文章

计算机与操作系统:进程

进程概念

操作系统中最核心的概念是进程,进程是对正在进行的程序的抽象。因为有了进程这个概念的存在,才让cpu有了(伪)并发操作的能力。

多道程序设计

在任何多道程序设计系统中,cpu在多个进程中不断的切换,每个进程执行几十至几百毫秒。严格来说,在某一个瞬间,cpu只能运行一个进程,而在1秒内,它可能运行多个进程,这就给人了一种进程在并行运行的错觉,以上是指单cpu情况下的伪并行,多cpu计算机(多处理器系统)是可以实现真正意义上的进程并行操作的。

在进程模型中,计算机中所有可运行的软件,包括操作系统,被组织成若干顺序进程,简称为进程,进程就是一个正在运行的程序的实例,它包括逻辑上的程序计数器(实际上每个cpu只有一个程序计数器),寄存器和变量的当前值。从概念上来说,每一个进程都有自己虚拟的逻辑cpu,实际上真正的cpu在各个进程间来回切换,这种快速的切换叫做多道程序设计。

进程与程序的区别

进程和程序间的区别是微妙的,想象有一位科学家正在为女儿烘制蛋糕,做蛋糕的食谱就是程序,科学家就是处理器(cpu),做蛋糕的各种原料就是输入数据,进程就是科学家阅读食谱,取来各种原料以及烘制蛋糕等一系列动作的总和。假设这时科学家的儿子哭着跑了进来,说他的手被蜜蜂蛰了,科学家就记录下他照着菜谱做的哪了(保存进程的当前状态),然后拿出一本急救手册,按照其中的指示处理蜇伤。这里处理器从一个进程(做蛋糕)切换到一个高优先级的进程(实施救治),每个进程都拥有各自的程序(食谱和急救手册),当处理完蜇伤后,科学家又回来做蛋糕,从他离开时的那一步继续做下去。

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

进程层次

  • 在 UNIX 中,所有的进程都属于以 init 为根的一棵树。
  • 在 Windows 中没有进程层次的概念,地位都是相同的,但在创建进程时,父进程会得到一个句柄用于控制子进程。

进程状态转换

进程状态在不断的切换:

  • 在操作系统发现进程不能继续运行下去时,发生转换1。
  • 转换2和转换3由进程调度程序引起。
  • 当进程等待的一个外部事件发生时,则发生转换4。
    • 当发生一个磁盘中断时,系统就会停止运行当前进程,转而运行磁盘进程,该进程因等待中断处于阻塞态。

进程模型

为了实现进程模型,操作系统维护着一张表格(一个结构数组),即进程表。每个进程占用一个表项(进程控制块),该表项包含了进程状态的重要信息,包括程序计数器、堆栈指针、内存分配状况、所有打开文件的状态、账号和调度信息以及其他在进程中由运行态转换到其他态时必须保存的信息,从而保证该进程随后再次启动。

本文由作者按照 CC BY 4.0 进行授权