进程管理中对进程的控制是最基本的功能。其控制包括:创建一个新进程,终止一个已完成的进程,或终止一个因出现某事件而使其无法运行下去的进程,还可负责进程运行中的状态转换。如当一个正在执行的进程因等待某事件而暂时不能继续执行时,将其转换为阻塞态,而当该进程所期待的事件出现时,又将该进程转换为就绪态等。进程控制一般是由操作系统内核中的原语来实现的。
原语(primitive)是在管态下执行、由若干条指令组成的,用于完成一定功能的一个过程。原语和机器指令类似,其特点是执行过程中不允许被中断,是一个不可分割的基本单位,原语在管态下执行,常驻内存,原语的执行是顺序的而不可能是并发的。系统对进程的控制如不使用原语,就会造成其状态的不确定性,从而达不到进程控制的目的。
3.3.1 进程的创建
1.引起进程创建的事件
在多道程序环境中,只有(作为)进程(时)才能在系统中运行。因此,为使程序能运行,就必须为它创建进程。导致一个进程去创建另一个进程的典型事件,可有以下四类:
(1)作业调度。在批处理系统中,当作业调度程序按一定的算法调度到某作业时,便将该作业装入内存,为它分配必要的资源,并立即为它创建进程,再插入就绪队列中。
(2)用户登录。在分时系统中,用户在终端键入登录命令后,如果是合法用户,系统将为该终端建立一个进程,并将它插入就绪队列中。
(3)提供服务。当运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需要的服务,例如,用户程序要求进行文件打印,操作系统将为它创建一个打印进程,这样,不仅可使打印进程与该用户进程并发执行,而且还便于计算出为完成打印任务所花费的时间。
(4)应用请求。在上述三种情况下,都是由系统内核为它创建一个新进程;而这类事件则是基于应用进程的需求,由它自己创建一个新进程,以便使新进程以并发运行方式完成特定任务。例如,某应用程序需要不断地从键盘终端输入数据,继而又要对输入数据进行相应的处理,然后,再将处理结果以表格形式在屏幕上显示。该应用进程为使这几个操作能并发执行,以加速任务的完成,可以分别建立键盘输入进程、表格输出进程。
2.创建过程
一旦操作系统发现了要求创建新进程的事件后,便调用进程创建原语Create按下述步骤创建一个新进程。
(1)申请空白PCB。为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB。
(2)为新进程分配资源。为新进程的程序和数据以及用户栈分配必要的内存空间。显然,此时操作系统必须知道新进程所需内存的大小。对于批处理作业,其大小可在用户提出创建进程要求时提供。若是为应用进程创建子进程,也应是在该进程提出创建进程的请求中给出所需内存的大小。对于交互型作业,用户可以不给出内存要求而由系统分配一定的空间。如果新进程要共享某个已在内存的地址空间(即已装入内存的共享段),则必须建立相应的链接。
(3)初始化PCB。PCB的初始化包括:①初始化标识信息,将系统分配的标识符和父进程标识符填入新PCB中;②初始化处理机状态信息,使程序计数器指向程序的入口地址,使栈指针指向栈顶;③初始化处理机控制信息,将进程的状态设置为就绪状态或挂起就绪状态,对于优先级,通常是将它设置为最低优先级,除非用户以显式方式提出高优先级要求。
(4)将新进程插入就绪队列,如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列。
3.3.2 进程的阻塞与唤醒
1.引起进程阻塞与唤醒的事件
(1)请求系统服务。当正在执行的进程请求操作系统提供服务时,由于某种原因,操作系统并不立即满足该进程的要求时,该进程只能转变为阻塞态来等待。
(2)启动某种操作。当进程启动某种操作后,如果该进程必须在该操作完成之后才能继续执行,则必须先使该进程阻塞,以等待该操作完成。例如,进程启动了某I/O设备,如果只有在I/O设备完成了指定的I/O操作任务后进程才能继续执行,则该进程在启动了I/O操作后,便自动进入阻塞态去等待。在I/O操作完成后,再由中断处理程序或中断进程将该进程唤醒。
(3)新数据尚未到达。对于相互合作的进程,如果其中一个进程需要先获得另一(合作)进程提供的数据后才能对数据进行处理,则只要其所需数据尚未到达,该进程只有(等待)阻塞。例如,有两个进程:进程A用于输入数据,进程B对输入数据进行加工。假如进程A尚未将数据输入完毕,则进程B将因没有所需的处理数据而阻塞;一旦进程A把数据输入完毕,便可去唤醒进程B。
(4)无新工作可做。系统往往设置一些具有某特定功能的系统进程,每当这种进程完成任务后,便把自己阻塞起来以等待新任务到来。例如,系统中的发送进程,其主要工作是发送数据,若已有的数据已全部发送完成而又无新的发送请求,这时(发送)进程将使自己进入阻塞态;仅当又有进程提出新的发送请求时,才将发送进程唤醒。
2.进程阻塞与唤醒过程
1)进程阻塞的步骤
(1)停止进程执行,保存现场信息到PCB。
(2)修改PCB的有关内容,如进程状态由运行改为等待等。
(3)把修改状态后的PCB加入相应等待进程队列。
(4)转入进程调度程序去调度其他进程运行。
2)进程唤醒的步骤
(1)从相应的等待进程队列中取出PCB。
(2)修改PCB的有关信息,如进程状态改为就绪。(www.xing528.com)
(3)把修改后的PCB加入有关就绪进程队列。
3.3.3 进程的终止
1.引起进程终止的事件
(1)进程正常运行结束。
(2)进程执行了非法指令。
(3)进程在常态下执行了特权指令。
(4)进程运行时间超越了分配给它的最大时间配额。
(5)进程等待时间超越了所设定的最大等待时间。
(6)进程申请的内存超过了系统所能提供的最大量。
(7)越界错误。
(8)对共享内存区的非法使用。
(9)算术错误,如除零和操作数溢出。
(10)严重的输入输出故障。
(11)操作员或操作系统干预。
(12)父进程撤销其子进程。
(13)父进程撤销,因而其所有子进程被撤销。
(14)操作系统终止。
2.进程终止过程
如果系统中发生了上述要求终止进程的某事件,OS便调用进程终止原语,按下述过程去终止指定的进程:
(1)根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态。
(2)若被终止进程正处于执行态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度。
(3)若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防它们成为不可控的进程。
(4)将被终止进程所拥有的全部资源或者归还给其父进程,或者归还给系统。
(5)将被终止进程(PCB)从所在队列(或链表)中移出,等待其他程序来搜集信息。
3.3.4 进程的挂起与激活
1.进程的挂起
挂起原语suspend的执行过程是:检查被挂起进程的状态,若处于活动就绪态,便将其改为挂起就绪;对于活动阻塞态的进程,则将之改为挂起阻塞。为了方便用户或父进程考查该进程的运行情况而把该进程的PCB复制到某指定的内存区域。若被挂起的进程正在执行,则转向调度程序重新调度。
2.进程的激活
激活原语active的执行过程:先将进程从外存调入内存,检查该进程的现行状态,若是挂起就绪,便将之改为活动就绪;若为挂起阻塞,便将之改为活动阻塞。假如采用的是抢占调度策略,则每当有新进程进入就绪队列时,应检查是否要进行重新调度,即由调度程序将被激活进程与当前进程进行优先级的比较,如果被激活进程的优先级更低,就不必重新调度;否则,立即剥夺当前进程的运行,把处理机分配给刚被激活的进程。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。