3.3.1进程控制块PCB进程的静态描述:由三部分组成PCB、有关程序段和该程序段对其进行操作的数据结构集。各部分的作用:1进程控制块:用于描述进程情况及控制进程运行所需的全部信息。2程序段:是进程中能被进程调度程序在CPU上执行的程序代码段。3数据段:一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行后产生的中间或最终数据。3.3.2进程控制块中的信息进程控制块中主要包括四个方面用于描述和控制进程运行的信息。1.进程标识符信息进程标识符用于唯一的标识一个进程。一个进程通常有以下两种标识符。外部标识符。由创建者提供,通常是由字母、数字组成,往往是用户(进程)访问该进程使用。外部标识符便于记忆,如:计算进程、打印进程、发送进程、接收进程等。内部标识符:为了方便系统使用而设置的。在所有的OS中,都为每一个进程赋予一个唯一的整数,作为内部标识符。它通常就是一个进程的符号,为了描述进程的家族关系,还应该设置父进程标识符以及子进程标识符。还可以设置用户标识符,来指示该进程由哪个用户拥有。2、处理机状态信息处理机状态信息主要是由处理机各种寄存器中的内容所组成。通用寄存器。又称为用户可视寄存器,可被用户程序访问,用于暂存信息。指令寄存器。存放要访问的下一条指令的地址。程序状态字PSW。其中含有状态信息。(条件码、执行方式、中断屏蔽标志等)用户栈指针。每个用户进程有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址。栈指针指向该栈的栈顶。3.进程调度信息在PCB中还存放了一些与进程调度和进程对换有关的信息。(1)进程状态。指明进程当前的状态,作为进程调度和对换时的依据。(2)进程优先级。用于描述进程使用处理机的优先级别的一个整数,优先级高的进程优先获得处理机。(3)进程调度所需要的其他信息。(进程已等待CPU的时间总和、进程已执行的时间总和)(4)事件。这是进程由执行状态转变为阻塞状态所等待发生的事件。(阻塞原因)3.2.3PCB的组织方式常用的组织方式有两种:链接方式、索引方式。1、链接方式:具有相同状态的PCB,用其中的链接字,链接成一个队列。这样就可以形成就绪队列、若干个阻塞队列和空白队列等。对其中的就绪队列常按照进程优先权的大小排列,把优先权告的进程的PCB排在队列前面。执行指针就绪队列指针阻塞队列指针空闲队列指针PCB1PCB2PCB3PCB4PCB5PCB6PCB7PCB8PCB943087901……1、索引方式:系统根据所有进程的状态,建立几张索引表。例如:就绪索引表、阻塞索引表的国内。并把各索引表在内存的首地址记录在内存中的一些专用单元中。每个索引表的表目中,记录具有相同状态的某个PCB在PCB表中的地址。执行指针就绪表指针阻塞表指针就绪索引表阻塞索引表PCB3PCB4PCB5PCB7PCB6PCB2PCB1按索引方式组织PCB3.3.4进程上下文进程上下文:是进程执行活动全过程的静态描述。包括计算机系统中与执行该进程有关的各种寄存器的值、程序段在经过编译之后形成的机器指令代码集、数据集及各种堆栈值和PCB结构。可按一定的执行层次组合,如用户级上下文、系统级上下文等。3.3.5进程空间任何一个进程,都有自己的地址空间,把该空间称为进程空间或虚空间。进程空间的大小只与处理机的位数有关。程序的执行都在进程空间内进行。用户程序、进程的各种控制表格都按一定的结构排列在进程空间里。在Unix和Linux系统中,进程空间还被划分为用户空间和系统空间两大部分在进程空间被划分为两大部分后,用户程序在用户空间内执行,操作系统内核程序在进程的系统空间内执行。了防止用户程序访问系统空间,造成访问出错,计算机系统还通过程序状态寄存器设置不同的执行模式,用户模式和系统模式来进行保护,即用户态和系统态。3.4进程控制为了防止操作系统及关键数据受到破坏,通常将处理机的状态分为系统态和用户态。OS内核通常是运行在系统态的,进程控制是由OS内核实现的。3.4.1操作系统内核OS内核:通常将一些与硬件紧密相关的模块(中断处理程序),各种常用设备的驱动程序,以及运行频率较高的模块(时钟管理、进程调度)都安排在紧靠硬件的软件层次中,使它们常驻内存,以便提高OS的运行效率,并对它们加以特殊的保护。我们把这一部分称为OS内核。3.4.2OS内核的功能一支撑功能:中断处理、时钟管理、原语操作1.中断处理:中断处理是内核最基本的功能。操作系统的重要活动最终都将依赖于中断(系统调用、键盘命令的输入、进程调度)。通常内核只对中断进行“有限的处理”然后便转交给有关进程继续处理。2.时钟管理:OS中的许多活动都需要时钟管理,例如:在时间片轮转调度中,每当时间片用完时,由时钟管理产生一个中断信号,促使调度程序重新调度。3.原语操作:原语:系统状态下执行的某些具有特定功能的程序段称为原语。机器指令级的执行其间不允许中断功能级的作为原语的程序段不允许并发执行(原语也是由若干条指令构成的,用于完成一定功能的过程)原子操作:一个操作中的动作要么全做,要么全不做。二资源管理功能1进程管理:进程管理的全部或大部分功能都放在内核中。主要因为这些模块的运行频率较高。2存储器管理:存储器管理软件的运行频率也较高,通常也将它放在内核中。(内存分配与回收模块、内存保护与对换功能的模块)3设备管理:各类驱动程序,缓冲管理等也都是存放在内存中的。在操作系统中,通常把进程控制用程序段做成原语。用于进程控制的原语有:创建原语、撤销原语、阻塞原语、唤醒原语等。3.4.3进程的创建一进程图进程图是用来描述进程家族关系的有向树。ABCDMEIJHGFLK子进程可以继承父进程的所有资源,当子进程被撤消时,应将从父进程那里获得的资源归还给父进程。撤消父进程时也必须同时撤消其所有的子进程。二引起创建进程的事件1用户登录:在分时系统中,用户在终端键入登录命令后,若是合法用户,系统建立一个进程,并插入就绪队列。2作业调度:批处理系统中,作业调度程序调度到某个作业以后,就把这个作业装入内存,并分配必要的资源,创建进程,插入就绪队列。3提供服务:运行中的用户向系统提出请求后,系统专门建立一个进程为用户服务。(打印请求)由操作系统核心(系统程序模块)创建4应用请求:应用进程的需要,由它自己创建一个新进程,使新进程以并发运行方式完成特定任务。(输入数据并将处理结果输出到表格上)由父进程创建三进程的创建过程(creat)1申请空白的PCB为新进程分配唯一的数字标识符,并从PCB集合中索取一个空白的PCB2为新建立的进程分配资源为新进程的程序和数据,以及用户栈分配必要的内存空间。3初始化程序控制块初始化标识符信息。将系统中分配的标识符、父进程标识符填入新PCB中。初始化处理机状态信息。是程序计数器指向程序的入口地址,栈指针指向栈顶。初始化处理机控制信息。将进程的状态设置为就绪状态或静止就绪状态。4将新进程插入就绪队列入口查PCB链表有空PCB?PCB(I)入进程家族或进程链PCB(I)入就绪队列将有关参数填入PCB(I)相应项取空表PCB(I)返回创建失败无创建原语流程图有3.4.4进程的终止(撤销进程)一引起进程终止的事件1正常结束:计算机系统中,都有一个表示进程已经运行完成的指示。(批处理,Holt。分时系统中,LogsOff)2异常结束越界错误、保护错、特权指令错、非法指令错、运行超时、等待超时算术运算错、I/O故障3外界干预操作员或操作系统干预父进程请求父进程终止二进程终止过程1根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态2若被终止进程处于执行态,应立即终止该进程的执行,并设置调度标志为真(用于指示该进程被终止时应重新调度),然后再选择一个进程,分配处理机给它。3如果该进程还有子孙进程,还应将它的所有子孙进程进行终止,以防它们称为不可控的。4将该进程所拥有的全部资源,或者归还给它的父进程,或者归还给系统。5将被终止进程(PCB)从所在队列(链表)中移出,等待其它程序来搜索信息。入口返回查进程链表或进程家族有此PCB吗?该PCB有子进程吗?释放该进程所占有的资源释放该PCB结构本身出错处理有无有3.4.5进程的阻塞与唤醒一、引起进程阻塞和唤醒的事件1请求系统服务正在执行的程序请求操作系统服务,但是由于某种原因操作系统没有立即满足该进程的要求,该进程只能转变为阻塞状态来等待。2启动某操作当进程启动某种操作后,如果该进程必须在该操作完成之后才能继续执行,所有必须先使进程阻塞。3新数据尚未到达4无新工作可做系统往往设置一些具有某特定功能的系统进程,每当这种进程完成任务以后便把自己阻塞起来等待新任务的到来。(发送进程)二进程阻塞过程当有阻塞事件发生时,进程便调用阻塞原语block把自己阻塞。进入block后,应先立即停止执行,把进程控制块中的执行状态改为阻塞状态,并把它插入阻塞队列。三进程唤醒过程当阻塞进程所期待的事件出现时。则调用唤醒原语wakeup(),将等待事件的进程唤醒。唤醒原语执行的过程是:首先把被阻塞进程从等待该事件的阻塞队列中移出,将其PCB中的阻塞状态改为就绪状态,然后把该进程插入到就绪队列中。Block和wakeup是一对作用刚好相反的原语。入口入口保存当前进程的CPU现场从等待队列中摘下被唤醒进程置该进程的状态被阻塞进程入等待队列转进程调度将被唤醒进程置为就绪状态将被唤醒进程送入就绪队列转进程调度返回阻塞原语唤醒原语3.4.6进程的挂起和激活当出现了引起进程挂起的事件时,用户请求将自己挂起,或者父进程请求挂起自己的子进程,应该利用挂起原语suspend()挂起原语的执行过程:检查被挂起进程的状态;如果处于活动就绪状态,就将它改为静止就绪;如果处于活动阻塞,则改为静止阻塞。进程的激活过程当发生激活事件后,系统利用激活原语Active()将指定进程激活。激活原语先将进程从外存调入内存,然后检查进程的状态。静止就绪活动就绪静止阻塞活动阻塞1.为使进程由活动就绪转变为静止就绪,应利用__⑴__原语;为使进程由执行状态变为阻塞状态,应利用__⑵__原语;为使进程由静止就绪变为活动就绪,应利用__⑶__原语;从阻塞状态变为就绪状态应利用__⑷__原语。⑴-⑷:A.createB.suspendC.activeD.blockE.wakeup