2.2.3 进程控制

2.2.3 进程控制

进程的状态变化是由操作系统的进程控制机构完成的,控制机构具有创建进程、撤销进程和实施进程间同步、通信等功能,控制机构是操作系统内核的主要部分。操作系统内核是计算机硬件的首次延伸,是加到硬件的第一层软件。内核由一些特殊的称为原语的程序段组成。原语是不可中断的程序段,它是一种特殊的系统调用命令,可以完成一个特定的功能,一般为外层软件所调用,其特点是执行时不可中断,在操作系统中原语作为一个基本执行单位出现。

进程控制的原语有:创建原语、撤销原语、阻塞原语、唤醒原语等。

1.创建原语

创建原语创建一个新进程。通常,主要有4类事件会导致创建一个进程:①在批处理环境中,响应作业的提交会创建进程;②在交互环境中,当一个用户登录时会创建进程;③操作系统提供一项服务时,系统会创建一个系统进程提供服务,如用户请求打印操作,系统会创建一个管理打印的进程,使得原进程可以与打印进程并发执行;④用户请求创建进程时,也会创建进程。

一个进程生成另一个进程时,称前一个进程为父进程,生成的进程为子进程。一个系统运行初始只有一个进程,称为根进程,其后出现的进程都为根进程的子孙进程,随着系统运行,所有进程形成一棵进程树,如图2-15所示。

创建原语的主要工作是为被创建进程建立一个PCB,分配进程标识符,形成PCB。操作过程是:向系统申请一个空闲PCB,然后为新进程分配请求的资源,根据父进程提供的参数以及获得的资源情况初始化PCB,将新进程插入就绪队列。

操作系统创建进程的方式对用户和应用程序都是透明的。

图2-15 进程树

2.撤销原语

撤销原语撤销或终止一个进程。通常有主要几类事件会导致撤销一个进程:①进程完成了运行任务正常终止;②进程由于错误而非正常终止;③进程由于其祖先进程的要求被撤销。撤销进程一般由父进程或祖先进程发出,给出的参数是进程标识符或优先级。如果一个进程被撤销,那么它的子孙进程必须先行撤销。

撤销原语的主要工作有两个:一是将被撤销进程及其子孙进程的所有资源(主存、外设、PCB)全部收回,归还系统;二是根据被撤销进程状态,决定是否重新调度CPU分配。具体操作过程为根据被终止进程的标识符,从PCB队列中检索出该进程的PCB,以该进程为初始节点,寻找其所有子孙进程,从其子孙进程节点树的叶子节点开始向上逐一撤销每个进程,收回每个节点所占系统资源,将被终止进程的PCB从所在队列移除;判断在以上被终止的所有节点中是否有正在运行的进程,如果有,启动CPU调度程序,重新分配处理机。

3.阻塞原语

创建原语和撤销原语解决了进程从无到有,从存在到消亡的变化,阻塞和唤醒原语则完成进程由“运行”到“等待”,由“等待”到“就绪”的变化。

当一个进程期待某一事件(如请求系统服务、启动某种操作、数据尚未到达、无新工作可做等)出现时,该进程就调用阻塞原语将自己置为阻塞(等待)状态。阻塞原语的主要工作是保存阻塞进程的现场,让出处理机,具体工作过程为,发现上述事件,调用阻塞原语把自己阻塞;停止进程的执行,修改PCB中的状态信息,把阻塞进程的运行环境信息保存在PCB中,并将其插入相应的阻塞队列;转处理机调度程序,选择一个进程运行。

4.唤醒原语

当处于阻塞状态的进程所等待的事件出现时,由发现者进程调用唤醒原语唤醒该阻塞进程。引起唤醒的事件与引起阻塞的事件是相对应的。唤醒原语的主要工作是将阻塞进程从阻塞队列移到就绪队列,工作过程为,将该阻塞进程的PCB从阻塞队列中移出,修改PCB中的状态信息,再将其插入就绪进程队列中。

阻塞与唤醒要匹配使用,以免造成“永久阻塞”。