《现代操作系统:进程》学习笔记

参考资料: 《现代操作系统 3th edtion》原书第二章 进程与线程
在 xmind 上记录

进程模型

一个进程就是一个正在执行程序的实例,包括程序计数器、 寄存器和变量的当前值

一、创建进程

创建进程的场景

  • 系统初始化
  • 执行了正在运行的进程所调用的进程创建系统调用
  • 用户请求创建一个新进程
  • 一个批处理作业的初始化

在UNIX系统中,只有一个系统调用可以用来创建新进程:fork

  • 在调用了fork后,父进程和子进程拥有相同的存储映像、同样的环境字符串和同样的打开文件。这就是全部情形。通常,子进程接着执行execve或一个类似的系统调用,以修改其存储映像并运行一个新的程序
  • 在UNIX中,子进程的初始地址空间是父进程的一个副本,但是这里涉及两个不同的地址空间,不可写的内存区是共享的(某些UNIX的实现使程 序正文在两者间共享,因为它不能被修改)
  • 但是,对于一个新创建的进程而言,确实有可能共享其创建者的其他资源,诸如打开的文件等

在Windows中,情形正相反,一个Win32函数调用CreateProcess既处理进程的创建,也负责把正确的程序装入新的进程

  • 在Windows中,从一开始父进程的地址空间和子进程的地址空间就是不同的

进程的终止

正常退出(自愿的)

  • 完成了工作

出错退出(自愿的)

  • 进程希望自行处理某些错误

严重错误(非自愿)

  • 参数错误等

被其他进程杀死(非自愿)

  • kill命令

二、进程的层次结构

在UNIX中,进程和它的所有子女以及后裔共同组成一个进程组

  • 当用户从键盘发出一个信号时,该信号被送给当前与键盘相关的进程组中的所有成员(它们通常是在当前窗口创建的所有活动进程)。每个进程可以分别捕获该信号、忽略该信号或采取默认的动作,即被该信号杀死

Windows中没有进程层次的概念,所有的进程都是地位相同的

三、进程的状态

运行态(该时刻进程实际占用CPU)

阻塞态(除非某种外部事件发生,否则进程不能运行)

  • 当一个进程在逻辑上不能继续运行时,它就会被阻塞,典型的例子是它在等待可以使用的输入

就绪态(可运行,但因为其他进程正在运行而暂时停止)

四、进程的实现

为了实现进程模型,操作系统维护着一张表格(一个结构数组),即进程表 process table

  • 包括程 序计数器、堆栈指针、内存分配状况、所打开文件的状态、账号和调度信息,以及其他在进程由运行态转换 到就绪态或阻塞态时必须保存的信息,从而保证该进程随后能再次启动,就像从未被中断过一样

与每一I/O类关联的是一个称作中断向量(interrupt vector)的位置(靠近内存底部的固定区域)。它包含中断 服务程序的入口地址。

中断

  • 1.硬件压入堆栈程序计数器等
  • 2.硬件从中断向量装入新的程序计数器等
  • 3.汇编语言过程保存寄存器值
  • 4.汇编语言过程设置新的堆栈
  • 5.C中断服务例程运行(典型地读和缓冲输入)
  • 6.调度程序决定下一个将运行的程序
  • 7.C过程返回至汇编代码
  • 8.汇编语言过程开始运行新的当前进程

五、多道程序设计模型

采用多道程序设计可以提高CPU的利用率

假设一个进程等待I/O操作的时间与其停留在内存中时 间的比为p。当内存中同时有n个进程时,则所有n个进程都在等待I/O(此时CPU空转)的概率是p^n

CPU利用率=1-p^n

XMind: ZEN - Trial Version

《现代操作系统:进程》学习笔记