您好,欢迎访问三七文档
2、2进程控制进程控制的主要任务进程控制是对系统中所有进程从产生、存在到消亡的全过程实行有效的管理和控制。进程控制一般是由操作系统的内核来实现,内核在执行操作时,往往是通过执行各种原语操作来实现的原语原语(primitive):由若干条指令构成的“原子操作(atomicoperation)”过程,作为一个整体而不可分割--要么全都完成,要么全都不做。许多系统调用就是原语。在操作系统中,某些被进程调用的操作,例如队列操作、对信号灯的操作、检查启动外设操作等,一旦开始执行就不能被中断,否则就会出现操作错误,造成系统混乱。原语就是为实现这些操作而设置的。原语的特点:执行时不可中断进程控制原语1.创建原语2.撤消原语3.阻塞原语4.唤醒原语内核与原语内核:加在硬件上的第一层软件,通过执行各种原语操作来实现各种控制和管理功能,具有创建、撤消、进程通信、资源管理的功能。内核的基本功能支撑功能:中断处理、时钟管理、原语操作资源管理功能:进程管理、存贮管理、设备管理原语:是由若干条机器指令所构成,用以完成特定功能的一段程序。进程家族树一个进程可以创建几个新的进程,被建立的进程叫子进程,建立进程被称为父进程。子进程可以继承父进程的所拥有的资源子进程可以从父进程中继承环境变量、打开文件、文件系统的当前目录、控制终端、已经连接的共享存储区、信号处理例程入口表等进程图进程图是一棵有向树(如下图),结点代表进程。一棵树表示一个家族,根结点为该家族的祖先(Ancestor)。ABCDMEIJHGFLK子进程可以继承父进程的所有资源,当子进程被撤消时,应将从父进程那里获得的资源归还给父进程。撤消父进程时也必须同时撤消其所有的子进程。进程家族示例进程图和前趋图之间的差异前趋图描述的是任务(或进程)之间的前趋关系;只有在前趋进程完成后,其后继进程才能运行;在进程图中,创建者和被创建者可以并发执行,也可以父进程等待其所有的子进程结束后再执行,这完全取决于创建原语和创建者的需要。引起创建进程的事件1用户登录:在分时系统中,用户在终端键入登录命令后,若是合法用户,系统建立一个进程,并插入就绪队列。2作业调度:批处理系统中,作业调度程序调度到某个作业以后,就把这个作业装入内存,并分配必要的资源,创建进程,插入就绪队列。3提供服务:运行中的用户向系统提出请求后,系统专门建立一个进程为用户服务。(打印请求)由操作系统核心(系统程序模块)创建4应用请求:应用进程的需要,由它自己创建一个新进程,使新进程以并发运行方式完成特定任务。(输入数据并将处理结果输出到表格上)由父进程创建系统创建新进程的过程首先,申请一个空PCB为新进程分配资源(例如内存空间等)系统初始化PCB标识符信息、父进程信息、进程的状态和优先级把新进程插入到就绪队列中入口查PCB链表有空PCB?PCB(I)入进程家族或进程链PCB(I)入就绪队列将有关参数填入PCB(I)相应项取空表PCB(I)返回创建失败无创建原语流程图有Creat(pn,pri,res,fn){getfreepcb(i);if(i==NULL)return(NULL);i.id=pn;i.priority=pri;i.resources=res;add=malloc(datasetsize);进程的建立if(add==NULL){pcbrelease(i);return(NULL);}i.dataadd=add;i.datasize=datasetsize;datasetinit(i.dataadd,args);add=filestate(fn);if(add==NULL){add=malloc(size);if(add==NULL){memrelease(i.dataadd,i.datasize);pcbrelease(i);return(NULL);}read(fn,size,add);}i.textadd=add;i.textsize=size;i.prog=fn;i.pc=add;i.children=0;i.parent=EXE;EXE.children=EXE.children+1;i.state=”ready”;i.queue=RQ;insert(RQ,i);otherinit;return(i);}2.2.2进程的终止(撤销进程)引起进程终止的事件:1正常结束:计算机系统中,都有一个表示进程已经运行完成的指示。(批处理,Holt。分时系统中,LogsOff)2异常结束越界错误、保护错、特权指令错、非法指令错、运行超时、等待超时算术运算错、I/O故障3外界干预操作员或操作系统干预父进程请求父进程终止进程终止过程1根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态2若被终止进程处于执行态,应立即终止该进程的执行,并设置调度标志为真(用于指示该进程被终止时应重新调度),然后再选择一个进程,分配处理机给它。3如果该进程还有子孙进程,还应将它的所有子孙进程进行终止,以防它们称为不可控的。4将该进程所拥有的全部资源,或者归还给它的父进程,或者归还给系统。5将被终止进程(PCB)从所在队列(链表)中移出,等待其它程序来搜索信息。入口返回查进程链表或进程家族有此PCB吗?该PCB有子进程吗?释放该进程所占有的资源释放该PCB结构本身出错处理有无有2.2.3进程的阻塞与唤醒一、引起进程阻塞和唤醒的事件1请求系统服务正在执行的程序请求操作系统服务,但是由于某种原因操作系统没有立即满足该进程的要求,该进程只能转变为阻塞状态来等待。2启动某操作当进程启动某种操作后,如果该进程必须在该操作完成之后才能继续执行,所有必须先使进程阻塞。3新数据尚未到达4无新工作可做系统往往设置一些具有某特定功能的系统进程,每当这种进程完成任务以后便把自己阻塞起来等待新任务的到来。(发送进程)二进程阻塞过程当有阻塞事件发生时,进程便调用阻塞原语block把自己阻塞。进入block后,应先立即停止执行,把进程控制块中的执行状态改为阻塞状态,并把它插入阻塞队列。三进程唤醒过程当阻塞进程所期待的事件出现时。则调用唤醒原语wakeup(),将等待事件的进程唤醒。唤醒原语执行的过程是:首先把被阻塞进程从等待该事件的阻塞队列中移出,将其PCB中的阻塞状态改为就绪状态,然后把该进程插入到就绪队列中。Block和wakeup是一对作用刚好相反的原语。入口入口保存当前进程的CPU现场从等待队列中摘下被唤醒进程置该进程的状态为()状态被阻塞进程入等待队列转进程调度将被唤醒进程置为()状态将被唤醒进程送入就绪队列转进程调度返回阻塞原语唤醒原语2.2.4进程的挂起和激活当出现了引起进程挂起的事件时,用户请求将自己挂起,或者父进程请求挂起自己的子进程,应该利用挂起原语suspend()挂起原语的执行过程:检查被挂起进程的状态;如果处于活动就绪状态,就将它改为静止就绪;如果处于活动阻塞,则改为静止阻塞。进程的激活过程当发生激活事件后,系统利用激活原语Active()将指定进程激活。激活原语先将进程从外存调入内存,然后检查进程的状态。静止就绪活动就绪静止阻塞活动阻塞思考题1.如果系统中有N个进程,运行的进程最多几个,最少几个;就绪进程最多几个,最少几个;等待进程最多几个,最少几个?2.有没有这样的状态转换,为什么?等待—运行;就绪—等待3.一个状态转换的发生,是否一定导致另一个转换发生,列出所有的可能4.为使进程由活动就绪转变为静止就绪,应利用__⑴__原语;为使进程由执行状态变为阻塞状态,应利用__⑵__原语;为使进程由静止就绪变为活动就绪,应利用__⑶__原语;从阻塞状态变为就绪状态应利用__⑷__原语。⑴-⑷:A.createB.suspendC.activeD.blockE.wakeup
本文标题:2、2进程控制
链接地址:https://www.777doc.com/doc-3362353 .html