进程控制是进程管理中最主要的功能。
它用于创建一个新进程,终止一个已完毕的进程,或者去终止一个因出现某事件而使其无法执行下去的进程,还可负责进程执行中的状态转换。
一、创建进程
1.引起创建进程的事件
在多道程序环境中,仅仅有(作为)进程(时)才干在系统中执行。因此。为使程序能执行。就必须为它创建进程。导致一个进程去创建还有一个进程的典型事件。能够有下面四类:
1) 用户登录
在分时系统中,用户在终端键入登录命令后,假设是合法用户,系统将为该终端建立一个进程,并把它插入到就绪队列中。
2)作业调度
在批处理系统中,当作业调度程序依照一定的算法调度到某作业时,便将该作业装入到内存,为它分配必要的资源,并马上为它创建进程,再插入到就绪队列中。
3) 提供服务
当执行中的用户程序提出某种请求后。系统将专门创建一个进程来提供用户所须要的服务。比如,用户程序要求进行文件打印。操作系统将为它创建一个打印进程,这样,不仅能够使打印进程与该用户进程并发执行,并且还便于计算出为完毕打印任务所花费的时间。
4) 应用请求
在上述三种情况中。都是由系统内核为它创建一个新进程。而这一类事件则是基于应用进程的需求,由它创建一个新的进程,以便使新进程以并发的执行方式完毕特定任务。
2.进程的创建过程
一旦操作系统发现了要求创建新进程的事件后,便调用进程创建原语Creat()按下述步骤创建一个新进程。
1) 申请空白PCB。为新进程申请获得唯一的数字标识符。并从PCB集合中索取一个空白PCB。
2) 为新进程分配资源。为新进程的程序和数据以及用户栈分配必要的内存空间。
显然。此时操作系统必须知道新进程所须要的内存大小。
3) 初始化进程控制块。PCB的初始化包含:
①初始化标识信息,将系统分配的标识符和父进程标识符,填入新的PCB中。
②初始化处理机状态信息。使程序计数器指向程序的入口地址,使栈指针指向栈顶。
③初始化处理机控制信息,将进程的状态设置为就绪状态或精巧就绪状态。对于优先级。一般是将它设置为最低优先级,除非用户以显式的方式提出高优先级要求。
4) 将新进程插入就绪队列。假设进程就绪队列可以接纳新进程。便将新进程插入到就绪队列中。
二、进程终止
1.引起进程终止的事件
1)正常结束
在不论什么计算机系统中,都应该有一个表示进程已经执行完毕的指示。比如,在批处理系统中,通常在程序的最后安排一条Hold指令或终止的系统调用。
当程序执行到Hold指令时,将产生一个中断。去通知OS本进程已经完毕。
2)异常结束
在进程执行期间,因为出现某些错误和故障而迫使进程终止。
这类异常事件非常多,常见的有:越界错误。保护错。非法指令,特权指令错,执行超时,等待超时,算术运算错。I/O故障。
3)外界干预
外界干预并不是指在本进程执行中出现了异常事件,而是指进程应外界的请求而终止执行。这些干预有:操作员或操作系统干预,父进程请求。父进程终止。
2. 进程的终止过程
假设系统发生了上述要求终止进程的某事件后。OS便调用进程终止原语,按下述过程去终止指定的进程。
1)依据被终止进程的标识符。从PCB集合中检索出该进程的PCB,从中读出该进程状态。
2)若被终止进程正处于运行状态,应马上终止该进程的运行。并置调度标志为真。用于指示该进程被终止后应又一次进行调度。
3)若该进程还有子孙进程。还应将其全部子孙进程予以终止。以防他们成为不可控的进程。
4)将被终止的进程所拥有的所有资源。或者归还给其父进程。或者归还给系统。
5)将被终止进程(它的PCB)从所在队列(或链表)中移出。等待其他程序来搜集信息。
三、堵塞唤醒
1.引起进程堵塞和唤醒的事件
1)请求系统服务
当正在运行的进程请求操作系统提供服务时,因为某种原因,操作系统并不马上满足该进程的要求时。该进程仅仅能转变为堵塞状态来等待,一旦要求得到满足后,进程被唤醒。
2)启动某种操作
当进程启动某种操作后,假设该进程必须在该操作完毕之后才干继续运行。则必须先使该进程堵塞,以等待该操作完毕,该操作完毕后,将该进程唤醒。
3)新数据尚未到达
对于相互合作的进程,假设当中一个进程须要先获得还有一(合作)进程提供的数据才干执行以对数据进行处理,则是要其所需数据尚未到达,该进程仅仅有(等待)堵塞,等到数据到达后。该进程被唤醒。
4)无新工作可做
系统往往设置一些具有某特定功能的系统进程,每当这样的进程完毕任务后,便把自己堵塞起来以等待新任务到来。新任务到达后,该进程被唤醒。
2.进程堵塞过程
正在运行的进程,当发现上述某事件后,因为无法继续运行,于是进程便通过调用堵塞原语block把自己堵塞。可见,进程的堵塞是进程自身的一种主动行为。进入block过程后,因为此时该进程还处于运行状态,所以应先马上停止运行,把进程控制块中的现行状态由运行改为堵塞,并将PCB插入堵塞队列。假设系统中设置了因不同事件而堵塞的多个堵塞队列,则应将本进程插入到具有同样事件的堵塞(等待)队列。最后。转调度程序进行又一次调度,将处理机分配给还有一就绪进程。并进行切换,亦即,保留被堵塞进程的处理机状态(在PCB中)。再按新进程的PCB中的处理机状态设置CPU环境。
3. 进程唤醒过程
当被堵塞的进程所期待的事件出现时。如I/O完毕或者其所期待的数据已经到达,则由有关进程(比方,用完并释放了该I/O设备的进程)调用唤醒原语wakeup(),将等待该事件的进程唤醒。唤醒原语运行的过程是:首先把被堵塞的进程从等待该事件的堵塞队列中移出,将其PCB中的现行状态由堵塞改为就绪。然后再将该PCB插入到就绪队列中。