进程
所有现在的计算机都能同时做几件事。当一个用户程序正在运行时,计算机还能够同时读取磁盘,并向屏幕或打印机输出文本信息。在一个多道程序系统中,CPU在程序间切换,使每道程序运行几十或几百毫秒。然而严格地说,在一个瞬间,CPU只能运行一道程序。在1S期间,它可能运行了多道程序,这样就给用户一种并行的错觉。有时人们所说的伪并行就是这种情形,以此来区分多处理机系统的真正的硬件并行。人们很难对多个并行的活动进行跟踪。因此,经过多年的努力,操作系统的设计者发展了一种概念模型,即进程模型。
进程模型
在进程模型中,计算机上所有可运行的软件,通常包括操作系统,被组织成若干顺序进程,简称进程。一个进程就会使一个正在执行的程序,包括程序计数器,寄存器和变量的当前值。从概念上说每个进程都拥有它自己的CPU。当然,实际上真正的CPU在各进程之间来回切换。
进程和程序之间的区别是很微妙的,但却至关重要。一个类比可以使读者更容易理解这一点。想象一位有一手好厨艺的计算机科学家正在为他的女儿烘制生日蛋糕。他有制作生日蛋糕的食谱,厨房里有所需的原料:面粉,鸡蛋,糖,香草汁等。在这个比喻中,做蛋糕的食谱就是程序(即用适当形式描述的算法),计算机科学家就是处理器(CPU),而做蛋糕的各种原料就是输入数据。进程就是厨师阅读食谱,取来各种原料以及烘制蛋糕的一系列动作的总和。
现在假设计算机科学家的儿子哭着跑了进来,说他被一只蜜蜂蛰了。计算机科学家就记录下自己照着食谱做到哪儿了(保存进程的当前状态),然后拿出一本急救手册,按照其中的指示处理蜇伤。这里可看到处理器从一个进程(做蛋糕)切换到另一个高优先级的进程(实施医疗救治),每个进程拥有各自的程序(食谱和急救手册)。当蜜蜂蜇伤处理完之后,计算机科学家又回来做蛋糕,从他离开时那一步继续做下去。
这里的关键思想是:一个进程是某种类型的一个活动,它有程序,输入,输出,及状态。单个处理机被若干进程共享,它使用某种调度算法决定何时停止一个进程的工作,并转而为另一个进程提供服务。
线程
在传统的操作系统中,每个进程中只存在一个地址空间和一个控制流。事实上,这几乎是一个进程的定义。然而,有些情况下需要在相同的地址空间中有多个控制流并行地运行,就像它们是单独的进程一样。这些控制流通常被称为线程,有时也成为轻量进程。
进程具有的另外一个概念是它是一个执行流,通常称为线程。线程有一个程序计数器,用来跟踪下一条将要执行的指令。它有寄存器,存储当前使用的变量。它有堆栈,它有存储执行历史,其中每一栈帧保存了没有返回的过程调用。进程线程必须在进程中执行,但线程和它的进程是可以分别对待处理的两个不同概念。进程用来集合资源,而线程是CPU中调度实体。
参考资料《操作系统设计与实现》