操作系统笔记_进程

在任何多道程序设计系统中,CPU 由一个进程快速切换到另一个进程,使每个进程各运行几十或几百毫秒,严格地说,在某一个瞬间,CPU 只能运行一个进程,但在 1 秒的期间,它可以运行多个进程,这就产生了并行的错觉(伪并行)。多处理器系统是真正的硬件并行。

进程模型

进程模型中,计算机上所有可运行的软件,通常也包括操作系统,被组织成若干顺序进程,简称进程。

AlCVX9.png

上图中,一台多道程序计算机的内存中有 4 道程序,被抽象为各自拥有自己控制流程(逻辑程序计数器)的进程。实际上只有一个物理程序计数器,在每个程序运行时,它的逻辑程序计数器被装入实际的程序计数器中。在任何一个瞬间,仅有一个进程真正的运行。

一个关键思想是:一个进程是某种类型的一个活动,它有程序、输入、输出以及状态,单个处理器可以被若干个进程共享,它使用某种调度算法决定何时停止一个进程的工作,并转而为另一个进程提供服务。

创建进程

在 UNIX 系统中,只有一个系统调用可以用来创建新进程:fork。这个系统调用会创建一个与调用进程相同的副本。

进程创建之后,父进程和子进程有各自不同的地址空间,

进程的终止

进程终止通常由以下条件引起:

  • 正常退出(自愿)
  • 出错退出(自愿)
  • 严重错误(非自愿)
  • 被其他进程杀死(非自愿)

在有些系统中,当一个进程终止时,无论是自愿还是其他方式,由该进程所创建的所有进程也一律被杀死。不过 UNIX 和 Windows 都不是这种工作方式。

进程的层次结构

在父进程创建了子进程后,子进程可以自身创建更多的进程,组成一个进程的层次结构.

在 UNIX 中,进程和它的所有子女以及后裔共同组成一个进程组。相反,Windows 中没有进程层次的概念,所有的进程地位都是相同的。在创建进程时,父进程得到一个句柄,该句柄用来控制子进程,但是,它有权把这个句柄传送给其他进程,这样就不存在层次了。而在 UNIX 中,进程不能剥夺其子女的继承权。

进程的状态

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

AlVuKU.png

进程的三种状态:

  • 运行态:该时刻进程实际占用 CPU
  • 就绪态:可运行,但因为其他进程正在运行而暂时停止
  • 阻塞态:除非某种外部事件发生,否则进程不能运行

进程的实现

为了实现进程模型,操作系统维护着一张进程表,每个进程占用一个表项

AlV4aj.png

该表包含了进程状态的重要信息,从而保证该进程在中断后能再次启动,就像从未中断过一样。

中断后的工作步骤:

AlVTGq.png