2.2.2 进程描述及状态
为了刻画多道程序环境下系统内出现的情况,描述并发程序的特点及活动规律,引进了进程的概念。进程是操作系统中最基本、最重要的概念。处理机调度、内存分配、设备共享等功能都是以进程为单位(线程出现之前)。
1.进程的概念及特点
进程这一概念至今未形成公认的定义,目前不同教科书中给出的定义主要有以下几种:
·进程是程序的一次执行;
·进程是一个程序及其数据在处理机上顺序执行时所发生的活动;
·进程是程序在一个数据集合上的运行过程,它是系统进行资源分配和调度的一个独立单位;
·可以与其他程序并行执行的程序的一次执行。
这些定义都从不同的角度提出了对进程的看法,总结起来,进程与程序有关,与程序的并发执行有关,与多道环境下系统资源的共享有关。
本书采用一种使用较广的描述:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
进程有以下4点特征。
①动态性:这是进程的最基本特性,进程是程序的执行,有产生和消亡的状态变化。
②并发性:进程是可以并发执行的程序,因此具有并发性。
③独立性:进程是可并发的,但是并发的进程间是相互独立互不干扰的。
④异步性:进程的运行是异步的,运行速度是无法预测、不可再现的。
2.进程与程序
从概念来看,进程与程序有关又与程序不同,为了更好地理解进程,下面来比较进程与程序的异同。
①进程是程序的执行过程,是动态的概念;程序是一组指令的集合,是静态的概念。
②进程是程序的执行,因而它有生命过程,从投入运行到运行完成,所以进程有诞生和死亡。或者说,进程的存在是暂时的,程序的存在是永久的。
③进程是程序的执行,进程包括程序和数据,一个进程可以顺序地执行多个程序;一个程序可以对应多个进程(即由多个进程共享),如“售火车票”的多个窗口,每个窗口存在一个进程,但是执行的都是一个程序。
3.进程控制块及进程映像
进程是程序的一次执行活动,如何描述这一活动呢?操作系统设计了一个数据结构——进程控制块(PCB,Process Control Block)。
进程控制块是唯一标识进程存在的数据结构,包含了进程的描述信息和控制信息,是进程的动态特征的集中反映。操作系统根据进程控制块而感知进程的存在,所以说它唯一标识进程的存在。它的主要作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。每个操作系统的PCB内容不尽相同,但是以下内容是必须包括的。
·进程标识符:唯一标识一个进程,有内部标识(操作系统内部赋予的标识名)和外部标识(用户自定义的标识名)。
·进程状态信息:描述进程的动态性,包括运行、就绪、阻塞等状态。
·进程执行现场信息:包括处理机状态,通用寄存器(R,Register)、指令指针寄存器(IP,Instruction Pointer)、程序状态字(PSW,Program Status Word)、用户栈指针等。
·进程调度信息:状态、优先级、其他信息、等待事件(阻塞原因)。
·进程控制信息:程序和数据的地址、同步和通信机制、资源清单、链接指针等。
进程的实体即进程映像,是由程序、数据和进程控制块组成的。程序描述了进程所要完成的功能,数据是进程在执行时的操作对象,这两部分是进程存在的物理实体,而进程控制块是进程存在的物理标志和体现。进程映像的三部分可以有不同的组合,如图2-13所示。
图2-13 进程映像
其中:图(a)表示程序和数据捆绑在一起运行,这使程序无法处理其他数据,最不利于程序并发执行;图(b)表示程序和数据分离,但是目前也只有一个PCB标识,表示程序只对应一个进程;图(c)表示一个程序处理不同数据,对应多个进程,这是并发进程的进程映像的最一般形式。
4.进程状态及状态变化
进程是程序的一次执行,是动态的,因此,进程从产生、存在到消亡是有不同的状态的,而且在进程的存在期间,由于系统中各个进程并发及相互制约的结果,所以它们的状态不断变化。通常一个进程有3种基本状态。
①运行状态(Running):一个进程已获得处理机,正在执行。
②就绪状态(Ready):一个进程得到了除CPU以外的所有必要资源,一旦得到处理机就可以运行,又称为逻辑可运行状态。
③阻塞状态(Blocked):一个进程因等待某事件发生(如申请打印机,打印机忙)而暂时无法继续执行,从而放弃处理机,处于暂停状态,此时,即使该进程得到处理机也无法运行,又称为逻辑不可运行状态。
系统中不同的事件有可能引起进程状态的不同变化,如图2-14示。
图2-14 进程基本状态变化
由图2-14可见,①当一个新进程被接纳,初始状态为就绪态。②处于就绪态的进程被进程调度程序选中后,分配处理机,转变为执行状态;③处于执行态的进程可以有3种状态变化:进程执行完成,转变为结束状态;系统分配给该进程的时间片到了,其转变为就绪态,等待再次调度;进程运行过程中由于等待某个事件,如申请打印机,而打印机正忙,或者等待某进程传来的数据未到,进程只能将自己阻塞,进入阻塞状态。④处于阻塞态的进程,若等待的事件发生,逻辑上可运行,则变为就绪态。
在不同的系统中,出于调度策略的考虑,可能将进程划分为更多的状态,如挂起状态。