第2章进程管理进程控制块中的信息为了刻画进程的动态变化,通常把进程表示为由程序段、私有数据块和进程控制块组成。程序部分描述进程本身所要完成的功能,而“私有数据块”是接受程序规定操作的一组存储单元的内容,是操作的对象。进程控制块是在进程创建时产生的,当进程存在于系统时(运行),进程控制块就标识了这个进程。第2章进程管理下一页PCB程序段私有数据进程名当前状态优先数现场保留区指示处于同一状态进程的链指针资源清单进程起始地址家族关系其他(a)进程示意图(b)进程控制块的基本内容第2章进程管理进程控制块是进程存在的标志,当系统或父进程创建一个进程时,实际上就是为其建立一个进程控制块。进程控制块既能标识进程的存在,又能刻画出进程的动态特征,它是一个进程仅有的被系统真正感知的部分。对操作系统而言,所有进程控制块将构成并发执行控制和维护系统工作的依据。进程控制块的作用:下一页第2章进程管理调度进程执行时,需要从该进程的PCB中查出其现行状态及优先级;调度到某进程后,根据PCB中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据PCB中的程序和数据的内存始址,找到其程序和数据;进程在执行过程中,当需要和与之合作的进程实现同步、通信或访问文件时,也需要访问PCB;当进程由于某种原因而暂停执行时,又须将断点的处理机环境保存在PCB中。进程控制块的作用:下一页第2章进程管理进程控制块中的信息•进程标识符•处理机状态•进程调度信息•进程控制信息第2章进程管理进程标识符用于唯一地标识一个进程。(1)内部标识符。在所有的操作系统中,都为每一个进程赋予一个唯一的数字标识符,它通常是一个进程的序号。(2)外部标识符由创建者提供,通常是由用户在访问该进程时使用。进程标识符第2章进程管理处理机状态信息主要是由处理机的各种寄存器中的内容组成的。处理机运行时,许多信息都存放在寄存器中。当处理机被中断时,所有这些信息都必须保存在PCB中,以便该进程重新执行时,能从断点继续执行。这些寄存器包括:通用寄存器:用户可视寄存器,用于暂存信息,用户程序可以访问;指令计数器:存放了要访问的下一条指令的地址;程序状态字PSW:其中包含了状态信息,如条件码、执行方式、终端屏蔽标志等;用户栈指针:每个用户进程都有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址。栈指针指向栈顶。第2章进程管理进程调度信息在PCB中还存放一些与进程调度和进程对换有关的信息,包括:进程状态指明进程的当前状态,作为进程调度和对换时的依据;进程优先级优先级高的进程应先获得处理机进程调度所需的其它信息与所采用的进程调度算法有关,比如,进程已等待CPU的时间总和、进程已执行的时间总和等;事件即阻塞原因,指进程由执行状态转变为阻塞状态所等待发生的事件。第2章进程管理程序和数据的地址:指进程的程序和数据所在的内存或外存地址,以便再调度到该程序执行时,能从PCB中找到其程序和数据;进程同步和通信机制:指实现进程同步和通信必需的机制,如消息队列指针、信号量等;资源清单:是一张列出了使用CPU以外的、进程所需的全部资源及已经分配到该进程的资源的清单;链接指针:它给出了本进程(PCB)所在队列中的下一个进程的PCB的首地址。进程控制信息:第2章进程管理第2章进程管理进程控制块的组织形式为了能对系统中若干个PCB有效的管理,应该用适当的方式将这些PCB组织起来。目前常用的方式有两种:链接方式和索引方式。链接方式:•同一状态进程的PCB组成一个链表,不同状态对应多个不同的链表•就绪链表、阻塞链表第2章进程管理索引结构:对具有相同状态的进程,分别设置各自的PCB索引表,表明PCB在PCB表中的地址。进程队列:不同状态进程分别组成队列运行队列、就绪队列、等待队列第2章进程管理PCB链表队列执行指针就绪队列指针阻塞队列指针空闲队列指针PCB14PCB23PCB30PCB48PCB5PCB67PCB79PCB80PCB915…由图示可知:P5正在执行;就绪进程有:P1,P4,P8阻塞进程有:P2,P3其余为空闲进程控制块PCB第2章进程管理PCB索引表形式PCB1执行指针就绪表指针阻塞表指针就绪索引表阻塞索引表PCB2PCB3PCB4PCB5PCB6PCB7第2章进程管理第2章进程管理2.1进程的基本概念2.2进程控制2.3进程同步2.4经典进程的同步问题2.5进程通信2.6线程开始第2章进程管理2.2进程控制进程控制是进程管理中最基本的功能,它可用于创建一个新进程;终止一个无法运行下去的进程;转换进程的运行状态。进程控制一般由OS的内核中的原语来实现。原语(Primitive):是由若干条指令组成的,用于完成一定功能的一个过程。它是原子操作(ActionOperation),指一个操作中的所有动作要么全做,要么全不做。是一个不可分割的基本单位,执行过程中不允许中断。原子操作需要常驻内存。第2章进程管理2.2进程控制2.2.1进程的创建2.2.2进程的终止2.2.3进程的阻塞与唤醒2.2.4进程的挂起与激活第2章进程管理2.2.1进程的创建可用进程图来描述进程的家族关系。进程图是一个有向树。下一页子进程、父进程、祖先进程子进程可继承父进程所分配到的资源;子进程运行完毕后,将资源归还给父进程;撤销父进程时,其所有的子进程也随之撤销。ABCDEFGHIJKLM第2章进程管理引起创建进程的事件•用户登录在分时系统中,用户在终端键入登录命令后,如果是合法用户,系统将为该终端建立一个进程,并把它插入到就绪队列中。•作业调度在批处理系统中,当作业调度程序按一定的算法调度到某作业时,便将该作业装入内存,为它分配必要的资源,并立即为它创建进程,再插入到就绪队列中。第2章进程管理引起创建进程的事件•提供服务当运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需要的服务。例如,运行过程中要求打印,系统会创建一个打印进程与该用户进程并发执行。•应用请求指的是基于应用程序的需求,为它创建一个新进程,以便使新进程以并发运行方式完成特定任务。通过这种方式可以使得几个操作并发执行,以加速任务的完成。第2章进程管理进程的创建(CreationofProcess)•申请空白PCB。•为新进程分配资源•初始化进程控制块•将新进程插入到就绪队列一旦操作系统发现了要求创建进程的事件后,便调用进程创建原语Creat()来创建进程。进程的创建需要经历以下步骤:第2章进程管理开始申请空白PCB为新进程分配资源初始化进程控制块将新进程插入就绪队列进程创建流图第2章进程管理进程的终止进程会在出现以下情况时终止:1)正常结束2)异常结束指的是出现某些错误和故障而迫使进程终止。常见的异常有:越界错误;保护错;非法指令;特权指令错;运行超时;等待超时;算术运算错和I/O故障。3)外界干预指的是进程应外界的请求而终止执行。常见的干预包括:操作员或操作系统干预;父进程请求;父进程终止等。第2章进程管理进程的终止过程当系统中出现了要求终止进程的某事件后,OS便调用进程终止原语来终止进程。其步骤包括:1.根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态;2.若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度;3.若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防他们成为不可控制的进程;4.将被终止进程所拥有的全部资源,或者归还给父进程,或者归还给系统;5.将被终止进程(它的PCB)从所在队列(或链表)中移出,等待其他程序来搜集信息。第2章进程管理开始检索PCB,读出进程状态若是执行,置调度标志为真若有子孙进程,终止其子孙进程进程终止流图将所拥有的资源归还给父进程或系统将PCB从所在队列移出第2章进程管理进程的阻塞与唤醒•引起进程阻塞和唤醒的事件•进程阻塞过程•进程唤醒过程第2章进程管理引起进程阻塞和唤醒的事件•请求系统服务由于操作系统不能马上满足进程的某种请求,导致进程只能转变为阻塞状态等待;•启动某种操作如果某进程必须在一个已启动的操作完成后才能继续执行,则必须先将该进程阻塞,以等待该操作的完成;•新数据尚未到达•无新工作可做系统往往设置一些具有某种特定功能的系统进程,每当这种进程完成任务后,便把自己阻塞起来以等待新任务到来第2章进程管理进程阻塞过程进程可通过调用阻塞原语block把自己阻塞。阻塞过程为:1.调用block原语;2.停止当前进程的执行;把PCB中的状态由“执行”改为“阻塞”;3.将PCB插入到阻塞队列;4.转调度程序进行重新调度,保留被阻塞进程的处理机状态第2章进程管理开始将CPU当前状态存入PCB设置进程状态为阻塞状态将PCB置入阻塞队列进程阻塞流图转处理机调度第2章进程管理进程唤醒过程当被阻塞进程所期待的事件出现时,如I/O完成或其所期待的数据已经到达,则由有关进程(比如,用完并释放了该I/O设备的进程)调用唤醒原语wakeup(),将等待该事件的进程唤醒。其执行过程为:把被阻塞进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪;将该PCB插入到就绪队列中。第2章进程管理开始从阻塞队列删除该PCB设置进程状态为就绪状态将PCB置入就绪队列结束进程唤醒流图第2章进程管理进程的挂起与激活当出现了引起进程挂起的事件时,系统将利用挂起原语suspend()将指定进程或处于阻塞状态的进程挂起。其执行过程为:检查被挂起进程的状态,若处于活动就绪状态,则将其改为静止就绪;对于活动阻塞状态的进程,则将其改为静止阻塞。把该进程的PCB复制到某指定的内存区域;若被挂起的进程正在执行,则转向调度程序重新调度。进程的挂起第2章进程管理进程的激活过程当发生激活进程的事件时,则可将在外存上处于静止就绪状态的进程换入内存。系统利用激活原语active()将指定进程激活。其激活过程如下:将进程从外存调入内存;检查该进程的现行状态,若是静止就绪,便将之改为活动就绪;若为静止阻塞,则将其改为活动阻塞。