教学课件第二章进程及作业管理

上传人:M****1 文档编号:569191013 上传时间:2024-07-28 格式:PPT 页数:83 大小:485.50KB
返回 下载 相关 举报
教学课件第二章进程及作业管理_第1页
第1页 / 共83页
教学课件第二章进程及作业管理_第2页
第2页 / 共83页
教学课件第二章进程及作业管理_第3页
第3页 / 共83页
教学课件第二章进程及作业管理_第4页
第4页 / 共83页
教学课件第二章进程及作业管理_第5页
第5页 / 共83页
点击查看更多>>
资源描述

《教学课件第二章进程及作业管理》由会员分享,可在线阅读,更多相关《教学课件第二章进程及作业管理(83页珍藏版)》请在金锄头文库上搜索。

1、第二章 进程及作业管理 第二章第二章 进程及作业管理进程及作业管理 1 进程概念进程概念 2 系统内核系统内核3 进程控制进程控制4 进程同步进程同步5 进程通讯进程通讯6 作业概念作业概念7 作业控制作业控制 第二章 进程及作业管理 1 进进 程程 概概 念念1.1 程序的顺序执行与并发执行程序的顺序执行与并发执行在单道程序系统中,程序的执行必然具有下述特性:(1) 顺序性(2) 封闭性(3) 无关性(4) 可再现性第二章 进程及作业管理 对于多道程序系统,程序的执行就有一些新的特性:(1) 异步性(2) 竞争性(3) 相互制约(4) 与速度有关第二章 进程及作业管理 设有两个循环结构的程序

2、A和B,它们共享一个公共变量n。程序A每执行一次循环都要作n:n1操作;程序B在每一次循环中打印出n的值,然后将n置0。对此的PASCAL描述如下:第二章 进程及作业管理 第二章 进程及作业管理 第二章 进程及作业管理 cobegin/coend表示并发结构,其中的程序可以并发执行。由于程序A和B都是异步执行,它们的语句在时间上可能是穿插或交叉执行的,故程序A的n:n1操作既可能在程序B的print(n)和n:0操作之前或之后执行,也可能在它们之间执行(即n:n1出现在print(n)之后,而在n:0之前)。于是,程序的运行可能产生三组不同的执行轨迹和结果(设在开始某个循环之前nv):第二章

3、进程及作业管理 1.2 进程定义进程定义(1) 进程是一种动态概念。(2) 进程的实体是程序和数据集合。(3) 进程是可并发的运行单位。第二章 进程及作业管理 1.3 进程的状态进程的状态(1) 执行状态执行状态(2) 就绪状态就绪状态 (3) 等待状态等待状态 (4) 停止状态停止状态(5) 死锁状态死锁状态 第二章 进程及作业管理 图2-1 进程的生命历程第二章 进程及作业管理 图2-2 具有挂起状态的进程生命历程第二章 进程及作业管理 1.4 进程控制块进程控制块图2-3 进程的物理表示第二章 进程及作业管理 PCB包含了进程的描述信息和控制信息,通常有如下项目:(1) 标识符(2) 存

4、贮信息(3) 现行状态(4) 优先数(5) 现场信息(6) 链接字(或称队列指针)(7) 族系关系(8) 资源清单(9) 其他第二章 进程及作业管理 PCB的内容和大小随系统不同而异,它不仅和具体系统的管理及控制方法有关,也和系统规模的大小有关。 为了便于管理,系统把所有的PCB用适当方式组织起来。一般说来,大致有以下三种组织方式: (1) 线性表方式 (2) 索引方式 (3) 链接方式第二章 进程及作业管理 图图2-4 PCB的组织方式的组织方式第二章 进程及作业管理 图图2-4 PCB的组织方式的组织方式第二章 进程及作业管理 图2-5 进程家族树第二章 进程及作业管理 2 系系 统统 内

5、内 核核 把操作系统中的所有程序模块分成两大类,即进程模块和非进程模块。进程模块是系统进程的程序实体,例如POOLing程序、磁盘管理程序、作业流控制程序等等,它们以进程的形式在系统中并发运行,执行相应的系统功能。非进程模块是不以进程形式独立运行的程序,每个这样的程序实现系统管理功能的某种相对独立的基本操作,在教科书中通常称这类模块为“原语”(Primitive)。 原语是机器指令的延伸,一条原语由若干机器指令所组成,有时也称之为“软指令”。第二章 进程及作业管理 所有的原语组成了操作系统的一个核心,称之为内核(Kernel)。从系统层次结构上看,内核处于操作系统的最底层,即它是最接近裸机的部

6、分,而且内核通常只占整个操作系统代码中的一小部分,但却是最频繁使用的部分,因而内核一般常驻内存。内核中除了涉及CPU管理、存贮器管理、设备管理、文件管理以及进程管理的各种原语之外,还包括各种中断处理、收费记帐等程序模块。第二章 进程及作业管理 中断处理是内核最重要的功能之一。系统中所有中断都由内核响应,当内核响应一个中断时,它屏蔽其他中断信号,在处理完一个中断后,它又继续响应其他中断。当确定了某个中断的原因后, 内核把中断处理的具体任务交给专门处理这类中断的特定进程或程序,这样就使内核能够及时响应连续不断发生的各种中断。第二章 进程及作业管理 裸机经内核扩充后构成了计算机系统的第一层“虚拟机”

7、,所有的进程都在这个虚拟机上运行。该虚拟机有三个属性: (1)它没有中断,面向进程的是一个没有中断的运行环境,因此进程中无需响应中断; (2)它为每个进程提供了一台虚拟处理机,每个进程都好象在各自的处理机上 顺序地执行; ()它为进程提供了强大的指令系统,即由机器指令系统和所有原语组成的指令集合。第二章 进程及作业管理 3 进进 程程 控控 制制3.1 建立、停止及撤销建立、停止及撤销 一个进程可借助于“建立”原语创建一个新进程,前者为后者的父进程,后者为前者的子进程。建立新进程的工作通常包括:从PCB集合中获取一个空闲PCB;对该PCB进行初始化;为新进程的数据集分配内存空间并初始化;为新进

8、程的程序文本分配内存空间并装入该程序;将新进程的PCB插入就绪队列。在一些系统中(如UNIX)允许子进程在被建立时可以直接继承父进程的某些特征和资源,例如优先数、终端、可共享的打开文件等。建立原语可大致描述如下:第二章 进程及作业管理 procedure create(pn,pri,res,fn,args);begin getfreepcb(i); if i=NIL then return(NIL); i.id:=pn; i.priority:=pri; i.resources:=res; memallocate(datasetsize,add); if add=NIL then begin

9、pcbrelease(i) return(NIL); end;第二章 进程及作业管理 end; i.dataadd:=add; i.datasize:=datasetsize; datasetinit(i.dataadd,args); filestate(fn,add,size); if add=NIL then begin memallocate(size,add); if add=NIL then begin memrelease(i.dataadd,i.datasize); pcbrelease(i); return(NIL);第二章 进程及作业管理 end; read(fn,size,

10、add); end; 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);end;第二章 进程及作业管理 调用参数说明如下:pn为新进程的外部名;res为新进程的初始资源,如终端、父进程的打开文件表等; pri为新进程的初始优先数; fn为新进程的执行程序文本之文件名; args是fn的参

11、数表。第二章 进程及作业管理 过程getfreepcb从PCB集中获取一个空闲PCB,返回值i为PCB号。过程memallocate按指定要求分配内存空间, 返回内存区地址add。过程memrelease和pcbrelease分别释放指定内存区和PCB。过程datasetinit初始化数据区,并装入参数表args。过程filestate检查指定文件的存贮状态,若该文件驻在内存,则返回其内存区地址add及长度size,同时将该文件的共享计数加1,这表明新进程将与其它进程共享一个纯代码程序;否则打开该文件,返回文件长度size,add=NIL。过程read读入指定文件。过程insert(RQ,i)

12、将新进程插入就绪队列RQ。otherinit表示对PCB的其它项置初值,如消息队列信号量、进程现场等。EXE是执行态进程的PCB指针,本原语由执行态进程调用,故执行态进程就是新进程的父进程。本原语最后返回新进程的内部号,即PCB号。如果建立失败,则返回NIL。第二章 进程及作业管理 一个进程一旦被建立便处于就绪状态,随时等候被进程调度选中并启动执行。 一个进程在正常运行结束后,一般应主动终止而进入停止状态,同时向父进程发一“完成”消息,等待父进程撤销它,这通过调用“停止”原语实现。停止原语halt的大致描述如下:procedure halt;begin EXE.state:=stop; sen

13、d(EXE.parent,completed); EXE:=NIL; scheduler;end;第二章 进程及作业管理 撤销原语可大致描述如下:procedure destory(i); begin if i.state stop then remove(i.queue,i); while i.children0 do begin i.children:=i.children-1; findchild(i,child); destory(child); end; memrelease(i.dataadd,i.datasize); close(i.prog,t); if t=true then

14、 memrelease(i.textadd,i.textsize); resrelease(i); pcbrelease(i);end;第二章 进程及作业管理 其中,过程remove将指定进程移出所属状态队列;过程findchild寻找指定进程的子进程,返回子进程的内部号;过程close关闭指定文件,若返回值t=true表示关闭成功,否则表示该文件为共享文件且正被其它进程所使用;过程resrelease释放除内存之外的其它资源。本原语可递归调用,用以实现撤销指定进程的子孙进程。第二章 进程及作业管理 3.2 挂起与激活挂起与激活 挂起原语suspend和激活原语activate的调用参数均为进

15、程内部号。它们可描述如下:procedure suspend(i); begin i.state:=if i.state=readythenreadys elsewaiteds; swapout(i.dataadd,i.datasize,add); i.swapadd:=add; memrelease(i.dataadd,i.datasize); close(i.prog,t); if t=true then memrelease(i.textadd,i.textsize);end;第二章 进程及作业管理 其中, 调用了换出过程swapout将数据集复制到外存交换区并返回相应的地址。进程实体中

16、的执行程序并未被复制到交换区,因为执行程序文件尚在外存并未被撤销,但仍要回收它所占用的内存空间(若它未被其它进程共享),这样做的好处是减少了交换时间。procedure activate(i);begin memallocate(i.datasize,add); if add=NILthen return(false); swapin(i.swapadd,i.datasize,add); i.dataadd:=add; filestate(i.prog,add,size); if add=NIL then begin第二章 进程及作业管理 memallocate(size,add); if a

17、dd=NIL then begin memrelease(i.dataadd,i.datasize); return(false); end; read(i.prog,size,add); end; i.textadd:=add; i.state:=if i.state=readysthenready elsewaited; return(true);end;第二章 进程及作业管理 3.3 阻塞与唤醒阻塞与唤醒 进程从执行态到等待态以及从等待态到就绪态的过渡分别是通过阻塞原语block和唤醒原语wakeup实现的。 当现行进程需要等待某个事件时, 可调用block原语使自己加入到该事件的等待队

18、列中,调用参数为等待队列指针。操作系统为每类事件设置一个等待队列,当某个事件发生时, 通过wakeup原语移出相应等待队列中的某个进程, 将其送入应绪队列,调用参数也是等待队列指针,下面是block原语和wakeup原语的类PASCAL语言描述:第二章 进程及作业管理 procedure block(q);begin save(EXE); EXE.state:=waited; EXE.queue:=q; insert(q,EXE); EXE:=NIL; scheduler;endprocedure wakeup(q);begin outqueue(q,i); i.state:=if i.sta

19、te=waited then ready elsereadys; i.queue:=RQ; insert(RQ,i);end;第二章 进程及作业管理 4 进进 程程 同同 步步4.1 同步概念同步概念 对同步与互斥的上述解释表明,它们的实质都是对进程在执行时序上的某种限制。因此,可把它们归结为:并发进程在执行时序上的相互制约关系。这就是广义同步概念。故在广义上,互斥是一种特殊的同步。第二章 进程及作业管理 4.2 临界区临界区 并发进程可以共享系统中的各种资源,但是系统中某些资源具有一次只允许一个进程所使用的属性,我们称这样的资源为临界资源。换言之,若有一进程正在使用某临界资源,那么其他欲使用

20、该资源的进程必须等待,只有当占有者释放后,其他进程才能使用。也就是说,共享临界资源的进程必须互相排斥。第二章 进程及作业管理 许多物理设备都属于临界资源,如输入机、打印机、磁带机等。还有许多可以被几个进程所修改的共享变量(如公共变量、数据、表格、队列等)也是临界资源。例如,进程A和B共享一个公共变量count,都要对count执行“count:=count+1”操作,但是在许多计算机上完成这一操作,实际上是由三条指令来实现的,如: LD R1,count INC R1 LD count, R1第二章 进程及作业管理 由于进程A和B异步前进,故A、B中相同的这个指令串可能在逐条指令基础上交叉执行

21、,比如产生序列: A:LD R1,count A:INC R1 B:LD R1,count A:LD count,R1 B:INC R1 B:LD count,R1 count经A、B访问后,只加了1,而不是所希望的2。为了防止发生这种与时间有关的错误,变量count必须按临界资源处理。第二章 进程及作业管理 系统的同步机构对解决临界区互斥问题应遵循下述准则: (1)当无一进程处于临界区内时,若有一进程要求进入临界区,应让其立即进入-有空让进; (2)当已有进程在临界区内时,其他欲进入临界区的进程必须等待-无空等待; (3)当无一进程处于临界区,而同时有多个进程要求进入临界区,且仅让其中之一进

22、入,其他则等待-多中择一; (4)任一进程进入临界区的要求应在有限时间满足-有限等待; (5)处于等待进入临界区的进程应放弃占用CPU-让权等待。第二章 进程及作业管理 4.3 同步机构同步机构 1测试与设置测试与设置(Test and Set) 这是一种借助一条硬件指令Test and Set(简记TS)来实现互斥的同步机构。许多计算机中都提供了这种指令,在IBM 370中称TS指令,在Z 8000中称TSET指令,在Intel 8086/8088中称XCHG指令。TS指令的功能可用PASCAL语言描述如下:第二章 进程及作业管理 procedure TS(vara,b:boolean);v

23、ar temp:boolean;begin temp:=a; a:=b; () b:=temp end或 function TS(var b:boolean):boolean; begin TS:=b; b:=true() endv第二章 进程及作业管理 TS指令的执行是不可分割的,利用TS指令可以简单而有效地实现互斥。 其方法是为每个临界资源设置一个布尔变量lock(锁),其初值为falsc,当lock值为false表示锁打开,临界资源未被使用,进程可进入临界区;反之则表示锁关闭,进程不能进入。于是用TS指令实现互斥的进程的程序结构为:第二章 进程及作业管理 var key: blooean

24、;begin key:=true; while key do TS(lock,key); () CS (临界区); lock:=false; end或begin while TS (lock) do skip; CS;() lock:=false; end第二章 进程及作业管理 2信号量和信号量和P、V操作操作 荷兰的著名计算机科学家Dijkstra把互斥的关键含义抽象成信号量(semaphore)概念,并引入在信号量上的P、V操作作为同步原语(P和V分别是荷兰文的“等待”和“发信号”两词的首字母)。信号量是个被保护的量,只有P、V操作和信号量初始化操作才能访问和改变它的值,Dijkstra把

25、信号量s定义为一个非负整型量。把信号量s上的P操作P(s)定义为:若s0,则s值减1,否则执行进程等待,直到其他进程对s进行V操作。把信号量s上的V操作V(s)定义为:s值加1,若有进程在s上等待,则唤醒其中一个进程。第二章 进程及作业管理 信号量和P、V操作原语可构成“阻塞-唤醒”同步机构:当一个进程对值为0的信号量执行P操作时便被阻塞以等待某个事件的出现;在另一进程检测到该事件发生时,通过执行V操作唤醒被阻塞的进程。在实现该同步机构时,可采取“忙等待”方式也可采取“让权等待”方式。在忙等待方式下,被阻塞进程在不主动放弃处理机的情况下忙碌等待着其他进程来唤醒它,显然这不利于处理机的有效利用。

26、让权等待方式,即当执行进程必须在某信号量上等待时,就将该进程变为等待状态,并将其插入与此信号量相关的等待队列中,以让出处理机给其他就绪进程。在单机系统中普遍采用让权等待方式。而在多机系统中,为减少进程状态变换而引起的开销,可采取忙等待方式。另外,在具体实现时通常要对Dijkstra的原定义进行改进。第二章 进程及作业管理 (1)忙等待方式的P、V操作。 vars: integer; P(s):while s 0 do skip; s:=s-1; V(s):s:=s+1; 当一进程在值不大于0的信号量s上执行P操作时,将在循环语句while上陷入忙等待,直到其他进程在该信号量s上执行V操作后,解

27、除它的等待。不难看出这种形式的P、V操作完全可用硬件指令来实现。第二章 进程及作业管理 (2)让权等待方式的P、V操作。采取这种方式需要对原信号量定义进一步扩充,把信号量由整型量扩充成为记录形式: type psem=semaphore semaphore=record value: integer; qucue: pointer to WQ; end即信号量s是二元组s(v,q),v是信号量s的值,它是个整型量,q是指向s等待队列WQ的队首指针。于是P、V操作可分别描述为:第二章 进程及作业管理 procedure p(s);var s: psem;begin s.v:=s.v-1; if

28、s.v0表示某类资源的当前可用数。 每执行一次P操作意味着请求分配一个单位的资源,因此描述为s.v:=s.v-1; s.v0表示该类资源已不能供分配,因此请求资源的进程将被阻塞在等待队列s.q中,此时s.v的绝对值等于等待队列s.q中的进程数。执行一次V操作意味着释放一个单位资源,故描述为.v:=s.v+1,若s.v0,表示在等待队列s.q中有因请求该资源不能满足而被阻塞的进程,因此唤醒等待队列s.q中的第一个或优先数最高的进程,允许其使用该资源。第二章 进程及作业管理 4.4 信号量的应用信号量的应用1临界区的互斥临界区的互斥 利用信号量可方便地实现临界区的互斥执行。此时信号量是公用信号量,

29、它的初值为1,每个进程均可对它施行P、V操作。设mutex为互斥信号量,其初值为1,表示对应的临界资源R未被占用。对于每个想使用R的进程,只需把它们的临界区CS置于P(mutex)和V(mutex)之间,即可实现互斥。下面给出这种模型的大致描述:第二章 进程及作业管理 var mutex: psem;procedure processl begin while true do begin p(mutex); CS1; V(mutex); end end;第二章 进程及作业管理 procedure process 2:;procedure process n:;begin seminitial(

30、mutex.v,l); cobegin process 1; process 2; process n; coendend第二章 进程及作业管理 2合作进程的同步合作进程的同步 利用信号量同样可以方便地实现合作进程之间的同步。方法是为某个事件设置一个信号量event,event.v的初值为0,表示该事件还未发生,当一进程需要等待event对应的事件时执行P(event),如果此时event.v=0,则阻塞该进程,将它挂入event的等待队列;若event.v=1,则表示事件已发生,该进程可继续执行。当某进程完成了event的事件时,立即执行V(event)唤醒event等待队列中的某个进程。

31、我们把信号量event称为私用信号量,即只有需要等待event相应事件发生的进程或说需要其它某个进程给予合作的进程在event上执行P操作,而完成event事件的进程或说提供合作的进程只在event上执行V操作。第二章 进程及作业管理 3生产者与消费者关系生产者与消费者关系图2-6 环形缓冲池第二章 进程及作业管理 基于环形缓冲池的生产者与消费者关系的形式描述,设: (1)公用信号量mutex:初值为1,用于实现临界区互斥; (2)生产者私用信号量empty:初值为n,指示空缓冲块数目; (3)消费者私用信号量full:初值为0,指示满缓冲块数目; (4)整型量i和j:初值均为0,i指示首空缓

32、冲块序号,j指示首满缓冲块序号。var mutex, empty, full: psem; i,j: integer; buffer: array 0n-1 of stuff;procedure producer; 生产者进程 begin while true do begin第二章 进程及作业管理 produce next product; P(empty); P(mutex); buffer(i):=product; i:=(i+1)mod n; V(mutex); V(full) endend;procedure consumer; 消费者进程 begin while true do b

33、egin第二章 进程及作业管理 P(full); P(mutex) goods:=buffer(j); j:=(j+1)mod n; V(mutex); V(empty); consume product end end;begin seminitial(mutex.v ,1;empty.v,n;full.v,0); i:=j:=0; cobegin producer; consumer; coendend第二章 进程及作业管理 4读者与写者关系读者与写者关系 设某航空公司有2个售票处,它们通过远程终端访问设在公司总部的航空订票系统,并要查询或修改系统中记录所有班机当前订票数的数据库B。设Bi

34、为某班机的当前订票数,P1和P2分别代表2个售票处的售票进程,R1和R2为进程执行时使用的工作寄存器。由于售票进程并发执行,且各自访问数据库B的时间是随机的,故有可能出现下面的访问序列(假定Bi的当前值为x):第二章 进程及作业管理 P1:R1:=Bi R1:=R1+1P2:R2:=Bi R2:=R2+1Bi:=R2 P1:Bi:=R1 可见,Bi的新值是X+1,而不是正确的X+2。这里的P1和P2均为写者,显然,对于写者Bi为临界资源,因此写者应该互斥。第二章 进程及作业管理 读者进程与写者进程的一般结构:读者进程与写者进程的一般结构:var mutex,wrt:psem; readcoun

35、t:integer; seminit(mutex.v,1;wrt.v,1); readcount:=0;cobegin procedure reader; begin P(mutex); readcount:=readcount+1; if readcount=1 then P(wrt); V(mutex);第二章 进程及作业管理 reading is perfermed; P(mutex); readcount:=readcount-1; if readcount=0 then (wrt); V(mutex); end;Procedure writer; begin (wrt); writi

36、ng is perfermed; V(wrt); end;coend;第二章 进程及作业管理 4.5 管程概念管程概念 建立管程的基本理由是:由于对临界区的执行分散在各进程中,这样不便于系统对临界资源的控制和管理,也很难发现和纠正分散在用户程序中的对同步原语的错误使用等问题。为此,应把分散的各同类临界区集中起来。并为每个可共享资源设立一个专门的管程来统一管理各进程对该资源的访问。这样既便于系统管理共享资源,又能保证互斥访问。管程主要由两部分组成: (1)局部于该管程的共享数据,这些数据表示了相应资源的状态; (2)局部于该管程的若干过程,每个过程完成关于上述数据的某种规定操作。第二章 进程及作

37、业管理 局部于管程内的数据结构只能被该管程内的过程所访问,反之,局部于管程内的过程只能访问该管程内的数据结构。因此管程就如同一堵围墙把关于某个共享资源的抽象数据结构以及对这些数据施行特定操作的若干过程围了起来。任一进程要访问某个共享资源,就必须通过相应的管程才能进入。为了实现对临界资源的互斥访问,管程每次只允许一个进程进入其内(即访问管程内的某个过程),这是由编译系统保证的。例如,并发PASCAL编译程序在编译源程序时,对每一个形如: monitor-name.procedure/function-entry-name的调用语句,都将自动保证其按如下方式执行: P(mutex); 执行相应的过

38、程或函数V(mutex);其中,mutex是关于相应管程的互斥信号量,初值为1。第二章 进程及作业管理 管理环形缓冲池的管程结构。monitor ringbuffer;var rbuffer:array0.n-1 of stuff; k,nextempty,nextfull:integer; empty,full:condition;procedure entry put(var product:stuff); begin if k=n wait(empty); rbuffernextempty:=product; k:=k+1; nextempty:=(nextempty+1)mod n;

39、signal(full); end;第二章 进程及作业管理 procedure entry get(var goods:stuff);begin if k=0 wait(full); goods:=rbuffernextfull; k:=k-1; nextfull:=(nextfull+1)mod n; signal(empty); end;begin k:=0; nextempty:=0;nextfull:=0;end;第二章 进程及作业管理 管程ringbuffer包含两个局部过程:过程put负责执行将数据写入某个缓冲块的操作;过程get负责执行从某个缓冲块读取数据的操作。empty和fu

40、ll被定义为两个条件变量,对应于缓冲池满和缓冲池空条件等待队列。任一进程都必须通过调用管程ringbuffer来使用环形缓冲池,生产者进程调用其中的put过程,消费者进程调用get过程第二章 进程及作业管理 5 进进 程程 通通 讯讯5.1 消息缓冲通讯消息缓冲通讯 消息缓冲通讯技术是由Hansen首先提出的,其基本思想是:根据生产者与消费者关系原理,利用内存的公用消息缓冲池实现进程之间的信息交换。第二章 进程及作业管理 (1)公用消息缓冲池buffpool 这是一个结构数组, 数组元素是消息缓冲块buffblock, 即 vat buffpool:array0n-1of buffblock;

41、 (2)消息缓冲块buffblock 这是一个记录结构,包含下列内容: sender:消息发送者名 size:消息长度 text:消息正文 next:指向消息队列中的下一个第二章 进程及作业管理 (5)emphead 空缓队列首指针,缓冲池中所有空闲缓冲块组成一个空缓队列。 (6)emptail 空缓队列尾指针。 (7)mq 进程的消息队列首指针,设置在PCB中。 (8)mmutex 进程的消息队列互斥信号量,初值为1,设置在PCB中。 (9)msyn 同步信号量,用于消息队列中的消息计数,初值为0,设置在PCB中。第二章 进程及作业管理 (10)发送消息原语send(receiver,a)

42、进程可调用本原语向其它进程发送一则消息,调用参数receiver为接收进程名,a为发送者在自己的内存工作区内存放待发送消息的内存区地址。 (11)接收消息原语receive(a) 进程可调用本原语摘取消息队列中的一则消息, 调用参数a为接收者在自己的内存工作区内准备复制消息的接收区地址。第二章 进程及作业管理 图图2-7是消息缓冲通讯是消息缓冲通讯第二章 进程及作业管理 下面是send原语的类PASCAL语言描述:procedure send(receiver,a)begin getid(receiver,i); if i=NIL then return(false); P(buffempty

43、); P(buffmutex); k:=emphead; emphead;=buffpoolk.next; V(buffmutex); buffpoolk.sender:=a.sender; buffpoolk.size:=a.size; buffpoolk.text:=a.text; buffpoolk.next:=NIL; P(i.mmutex); insert(i.mq,k); V(i.mmutex); V(i.msyn); return(true);end;第二章 进程及作业管理 5.2 管道通讯管道通讯1. pipe的建立和使用方式的建立和使用方式图图2-8 两个进程共享一个两个进程

44、共享一个pipe第二章 进程及作业管理 2. pipe操作的同步与互斥操作的同步与互斥 在对pipe文件进行读写操作过程中要对发送进程和接收进程实施正确的同步和互斥,以确保通讯的正确性。 接收进程读pipe时,若发现pipe为空,则进入等待状态。一旦有发送进程对该pipe执行写操作时便唤醒等待进程。不论是读或写pipe时,都要考虑信息传送的另一方是否存在。在读pipe时,若发现无信息可读,则在进入等待态之前先检查pipe的写入端是否已关闭,若已关闭,则不必等待。在写pipe时也要先检查读出端是否已关闭,若已关闭,则按出错处理。进程在关闭pipe文件的写入或读出端时,应唤醒等待写或读该pipe文

45、件的进程。为了防止两个进程同时读、写一个pipe,须为每个pipe设置互斥标志。 pipe通讯机构中的同步与互斥都由系统自动进行,对用户是透明的。 pipe通讯的实质是利用外存来进行数据通讯, 故具有传送数据量大的优点, 但通讯速度较慢。第二章 进程及作业管理 6 作作 业业 概概 念念 一个作业(job)是用户请求计算机执行的一个独立的程序任务。一个作业可能需要执行为完成同一任务的若干个程序,这些程序不仅包括用户自己编写的用户程序,也包括为用户服务的系统程序。例如,执行编辑程序建立和修改用户源程序,执行编译程序编译源程序,执行用户目标程序等等,程序是作业的执行文本。程序的操作对象(如变量、文

46、件等)称之为作业的数据。一个作业内的各个程序的执行结果有着一定的逻辑联系,各程序按一定的顺序执行,这谓之作业的工作流程,它是由用户定义的。此外,每个作业的运行都有不同的资源需求,例如,CPU时间,存贮空间的大小,需要打印机打印运行结果等等。用户对作业工作流程的控制意图以及作业的资源需求,需要用户使用操作系统提供的控制命令(作业控制语言JCL或终端命令)向系统说明。第二章 进程及作业管理 从静态观点看,一个作业由三部分组成,即作业控制命令序列程序集数据集从系统管理角度,一个作业的主体是控制命令序列,不同的控制命令序列形成了不同的作业。多道程序系统支持同时运行多个用户的作业,每个用户还可以建立多个

47、作业,所谓系统的道数即同时运行的作业个数。 作业有两种基本类型:脱机作业和联机作业。 脱机作业包括批处理作业和后台作业,即在批处理环境下运行的作业和以后台方式运行的作业。 联机作业包括终端作业及前台作业,即在分时环境或交互环境下运行的作业和以前台方式运行的作业。作业=控制命令序列+程序集+数据集第二章 进程及作业管理 图图2-9 作业的生命历程作业的生命历程第二章 进程及作业管理 7.1 作业的建立作业的建立JCB是记录型数据结构,一般包含下列内容:作业名作业优先级作业在输入井中的存放地址及长度作业的建立时间作业的估计运行时间内存需要量外设需求作业状态作业类型链接字其它 7 作业控制作业控制第

48、二章 进程及作业管理 7.2 作业的运行作业的运行 一个后备作业只有被作业调度程序选中后才能进入主机运行,即处于运行状态,作业调度程序为作业建立相应的作业进程。 第二章 进程及作业管理 7.3 作业的完成与注销作业的完成与注销 (1)调用撤销原语destory撤销作业进程,包括回收内存及外设资源、释放PCB,作业进程也就随之消亡。 (2)调用记帐程序,核算作业的运行费用。 (3)输出作业记帐收费信息以及作业正常或异常终止信息。 (4)回收JCB,最终注销该作业。 第二章 进程及作业管理 图2-10 JSCP工作流程7.4 JSCP工作流程工作流程 第二章 进程及作业管理 7.5 分时系统的作业控制分时系统的作业控制 在分时环境下,用户是以交互会话方式请求系统服务的,故作业的建立和运行以及对作业的控制都与批处理作业略有差异。系统初启时先建立系统总控进程,再由它为每个终端建立一个终端管理进程,这相当于一个终端上的作业流控制进程。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号