第3章进程管理本章主要内容进程管理的基本概念进程控制块进程控制进程调度实时系统的进程调度线程(Thread)关于调度讨论要点之一操作系统为什么要引进“进程”?到底什么是进程?进程有哪些特征?进程与程序、作业的关联与区别?进程管理模块要实现哪些功能?3.1进程管理的基本概念3.1.1程序的运行方式1.顺序运行顺序运行方式是一种最容易实现的方式,常见于早期的单道批处理系统中。这种方式具有以下基本特征:l顺序特征。l独占特征。l确定性特征l可重现性特征2.并发运行并发运行是多道程序系统中的一种运行方式。它允许多个程序共享CPU,以并发方式进行运算。在这种方式下,系统的资源不再被某一个程序独占,而是由多个程序共享。多道程序并发运行:指的是内存中同时活跃着多个用户进程,它们以CPU共享方式投入运行。并发运行方式的基本特征异步特征资源共享特征相互制约特征不可重现性特征3.1.2进程概念进程:是程序的运行过程,是可以独立申请并获得系统资源,能够与其他进程并发运行的基本单位。进程具有以下5个特征:(1)动态特征(2)并发特征(3)独立特征(4)异步特征(5)结构特征3.1.3进程管理的主要功能进程管理,是操作系统中最重要的组成部分,它的功能可大体分为两个方面:进程控制和进程调度。1.进程控制·创建新进程,撤消已结束的进程。·阻塞或唤醒一个进程,挂起或激活一个进程。·进程同步与通信控制。2.进程调度·根据进程当前状态决定哪个进程获得CPU,以及占用多长时间。·将CPU分给进程。一般用户如何感知到进程?举例://ex1.c#includeunistd.h#includestdio.h#includestdlib.hintmain(){intpid;pid=fork();printf(“Hello\n);}要点之二操作系统如何管理进程?PCB、进程状态、状态转换进程管理模块如何实现管理功能?进程控制原语进程调度进程的同步与互斥(第四章)进程控制块一个进程在其生命周期中,需要经历多个发展阶段。每个阶段进程的推进位置、资源占有情况都在发生不断变化。为了描述不断变化的进程,系统引入一种与进程相联系的数据结构——进程控制块PCB。进程控制块PCB的内容包括以下4部分:•进程标识•调度信息•处理机信息•进程控制信息1.进程标识进程标识是系统识别进程的标志。不同进程,其标识也不同。进程标识可分为外部标识和内部标识两部分。其中,外部标识(也称作进程的外部名),是进程的创建者提供的进程名字,通常由字符串组成。内部标识(也称作进程的内部名,简记为Pid)是系统为进程命名的一个代码,通常是一个整型数。2.调度信息(1)进程优先数,描述进程紧迫性的信息。(2)进程状态信息,描述进程当前处于何种状态。(3)其它调度信息。这部分信息有:进程在系统中等待的时间有多久,已在CPU上运行的时间是多少,剩余的运行时间有多少等。这些信息可帮助系统选择一个最迫切、最具运行条件的进程投入运行。3.处理机信息当一个进程运行过程中发生某些事件,使该进程运行不下去时,系统将剥夺它的CPU,交给别的进程使用。则,该进程的CPU现场信息可以保存在它自己的PCB内,以便该进程重新获得CPU时可以从此处恢复现场信息,继续运行。(1)通用寄存器的内容:包括数据寄存器、段寄存器等。(2)程序状态字PSW(ProgramStatusWord)及程序计数器PC(ProgramCount)值。(3)进程的堆栈指针。4.进程控制信息这部分内容是系统对进程实施控制的依据,主要包括程序代码及数据集的相关说明:(1)程序代码和数据集所在的内存地址。(2)资源清单,记载进程请求资源的情况和已经占有资源的情况。(3)同步与通信信息。(4)外存地址。(5)家族信息。(6)链接指针。如Linux中PCB类型定义structtask_struct{…unsignedshortuid;intpid;intprocessor;…volatilelongstate;longpriority;unsignedlongrt_priority;longcounter;unsignedlongflags;unsignedlongpolicy;…structtask_struct*next_task,*prev_task;structtask_struct*next_run,*prev_run;structtask_struct*p_opptr,*p_pptr,*p_cptr,*p_ysptr,*p_ptr;…};3.2.2进程基本状态及状态变迁一、进程的3种基本状态就绪(Ready)状态这是进程尚未获得CPU使用权的一种状态。在这一状态下,进程已经拥有除CPU外其它全部所需资源,因此该状态是一种“备运行”状态。运行(Running)状态这是进程获得CPU并投入运行的一种状态。事实上,在通常的单CPU系统中,每个瞬间最多只能有一个进程在运行。阻塞状态(BlockedStatus)这也是进程尚未获得CPU使用权的一种状态。在这一状态下,进程因某种要求得不到满足,只好等待,我们称之为运行“受阻”。处于阻塞状态的进程是无权获得CPU的。进程的三种基本状态(1)后备就绪当作业调度程序选中一个作业时,该作业就由外存装入内存,并被创建为进程。在大多数系统中,进程创建后的第1个状态是就绪状态。此刻进程已拥有所需的全部资源,只要获得CPU就可以运行。(2)就绪运行当进程调度程序按照某种算法,选中一个处于就绪状态的进程时,该进程就获得了CPU使用权,进程状态由“就绪”改为“运行”。(3)运行阻塞一个正在运行的进程,因需要系统的某种支持,比如,等待输入输出或者等待系统的资源,那么该进程已无法继续运行下去,只好主动放弃CPU,将自己阻塞起来等待所需的事件发生。(4)运行就绪在一个按时间片进行轮转调度的系统中,当正在运行的进程使用完自己的时间片时,系统将中断该进程的运行,使它由“运行”状态转为“就绪”状态。显然,该进程已充分用完自己的时间片,剩余的运行只好等到下一个调度周期到来。在一个可抢占式调度系统中,如果有一个更高优先级的进程到来,系统将剥夺当前进程的CPU,交给更高优先级进程运行。当前进程只好由运行状态转为阻塞状态。(5)阻塞就绪当一个阻塞的进程遇到自己等待的事件发生,该进程便具有了运行的条件,进程控制模块将它由“阻塞”状态转为“就绪”状态。等待的事件包括:请求的资源已获得;等待的I/O操作已完成;其它进程发来“唤醒”消息,及其它一些原因。(6)运行完成当正在运行的进程已经运行完自己的程序后,管理程序将收回它所占用的资源。比如,通过调用“存储管理模块”回收它所占用的内存空间,调用“设备管理模块”回收它所占用的外部设备。若当前进程的状态转为“完成”后,系统需要将CPU重新分配给他人使用。3.2.3扩展状态挂起将内存中当前某个尚不能运行的进程调到外存上去,腾出来的空间接纳更多的进程。这一处理称作进程“挂起”(Suspend)。挂起状态1.挂起阻塞(S-Blocked)状态2.挂起就绪(S-Ready)状态为什么要引入挂起状态?举一个例子。若系统的内存用户区有20M空间,收到的作业平均长度500K。每时刻可容纳的作业数量最多为40个。若每个作业平均执行104条指令将产生一次I/O,相当于每次使用CPU运行0.1ms就需要等待20ms的I/O时间。因此,CPU的利用率p可粗略地估算为:可以看出,处理机有近80%的时间是闲置的。2.0201.01.040p加入挂起状态的进程状态转换图Linux2.4版本中进程的6种状态PCB队列结构3.3进程控制进程从产生到消亡的整个过程中都是由操作系统来控制的。操作系统中的一些功能程序来实现进程控制的使命。通常,这些离散的小程序块处于操作系统的底层,运行时不允许中断。我们习惯上称它们为“原语”。原语(Primitive),是用机器指令构成的一种实现特定功能的小程序,它的运行具有不可分割性。l进程控制用的原语。这是一类实现进程管理和状态切换的原语,如,进程创建原语、进程撤消原语、阻塞原语、唤醒原语、进程挂起原语、进程激活原语、进程调度原语等。l进程通信用的原语。这类原语是用于实现进程之间通信的,如,消息发送原语、消息接收原语等。l资源互斥与同步用的原语。系统中的许多资源一次只能供一个进程使用,为了达到资源互斥访问的目的,系统需要设一组解决此类问题的原语。其中主要有P操作原语和V操作原语。l资源管理用的原语。主要有请求资源的原语和释放资源的原语。下面讨论各个控制进程状态装换的原语(1)何时执行?(2)如何执行?3.3.1进程创建与撤消原语1.进程创建原语何时?有以下4种事件会导致创建原语运行:•批作业调度。批处理系统中,当系统准备增加新进程时,一个处于磁盘上的后备作业有可能被作业调度程序选中,将它创建为进程•交互作业提交。在分时系统中,一个终端用户登录到系统。操作系统将创建一个与该终端相关联的终端进程。•系统提供服务。操作系统创建一些为用户服务的进程,比如I/O进程。这类进程的优先级要高于一般应用进程。•用户需求创建子进程。现有进程根据运行需要创建一些子进程,使系统中形成了父子进程并发运行的格局。如何?进程创建原语Create_Process():(1)索取一个空白PCB块。(2)填入进程信息:(2)-1填入进程标识。(2)-2PCB(优先级)赋予优先级或将JCB(优先级)填入。(2)-3PCB(内存地址)请求分配内存或JCB(内存地址)或父进程的内存地址填入。(2)-4PCB(资源清单)请求分配设备或JCB(资源清单)或父进程资源填入。(2)-5PCB(家族信息)用户名或父进程名。(2)-6PCB(现场信息)初始状态数据。(2)-7PCB(进程状态)“就绪”。(3)挂入就绪队列。(4)若需要将程序代码和数据集装入内存,可启动加载程序。2.进程撤销原语何时?进程撤销是进程创建的反过程。通常,有下列事件会导致进程撤消。(1)进程自行终止。(2)用户或父进程的原因使进程终止。(3)运行超时而终止(4)运行出错而终止。如何?进程终止原语Destroy(id_name):(1)根据id_name查找被终止进程的进程控制块PCB。(2)若该进程的状态是“运行”,则置调度标志为TRUE。(3)回收PCB(资源清单)中登记的全部资源。(4)将进程的PCB从所在队列摘下来,等待其它程序来搜集信息。(5)对于该进程的所有子进程Sub,递归调用End_Process(Sub),将子进程终止。(6)如果调度标志=TRUE,启动进程调度程序。3.3.2阻塞与唤醒原语1.进程阻塞原语何时?当处于运行状态的进程需要等待某一事件时,由于运行受阻无法继续下去,该进程需要通过中断服务请求进入系统。系统按照进程的需求进行适当处理后,启动“进程阻塞原语”将该进程阻塞起来。引起进程阻塞(也就是运行受阻)的原因:►等待I/O►请求资源得不到满足►进程同步约束►服务进程无服务任务如何?阻塞原语Block()可以描述为下述过程:j:=GetInternalname();Remove(RunQueue,j);//从运行队列上摘下jj(进程上下文):=CPU现场信息;j(状态):=“Blocked”;Insert(BlockQueue,j);//将j插入阻塞队列上Scheduler();//运行调度程序结束2.进程唤醒原语何时?当系统发生某一个事件时,正在等待该事件的进程需要立即被唤醒,由“阻塞”状态转为“就绪”状态。引起进程唤醒的原因源自进程的阻塞原因有:所等的I/O操作已完成。请求的资源得到了满足。进程同步约束已撤消。服务进程收到新的任务。如何?唤醒原语Wake_up()的功能过程:(1)将当前进程的上下文保存到系统栈中。(2)从阻塞队列上查找等待该事件的进程PCB。(3)将PCB从阻塞队列上摘下来。(4)将其状态置为“就绪”