《操作系统原理第二章进程管理.ppt》由会员分享,可在线阅读,更多相关《操作系统原理第二章进程管理.ppt(121页珍藏版)》请在三一办公上搜索。
1、第二章 进程管理,进程的概念进程的控制进程同步及经典同步问题进程间的高级通信进程与线程的区别,12:49,操作系统|进程管理 2,2.1 前趋图和程序执行,前趋图的定义前趋图(Procedence Graph)是一个有向无循环图DAG(Directed Acyclic Graph)。结点:语句、程序段或进程。初始节点终止节点边:执行顺序。重量:程序量或执行时间。,12:49,操作系统|进程管理 3,1,2,3,4,5,6,7,例:有7个结点的前趋图。P=P1,P2,P3,P4,P5,P6,P7=(P1,P2),(P1,P3),(P1,P4),(P2,P5),(P3,P5),(P4,P6),(P
2、5,P7),(P6,P7),2.1前趋图和程序执行,12:49,操作系统|进程管理 4,程序的顺序执行一个复杂的程序通常可以分为若干程序段,并且必须按照某种先后次序来执行。例1:输入计算打印例2:语句执行顺序S1:a:=x+yS2:b:=a 5S3:c:=b+1,2.1前趋图和程序执行,12:49,操作系统|进程管理 5,顺序执行程序的特点:程序的顺序性。程序在运行时独占主机资源。程序的执行结果与其执行速度无关。程序执行时的初始条件相同,其结果必相同。,2.1前趋图和程序执行,12:49,操作系统|进程管理 6,程序的并发执行程序执行环境独立性,逻辑上是独立的。随机性:输入和执行开始时间都是随
3、机的。资源共享:资源共享导致对进程执行速度的制约。,2.1前趋图和程序执行,12:49,操作系统|进程管理 7,程序的并发执行 并发执行是指两个程序执行时间上是重叠的。凡是能由一组并发程序完成的任务,都能由相应的单个程序完成。,例1:有一批程序,而每个程序需输入,计算,打印三项操作。其程序段并发执行的前趋图:I1 I2 I3 I4 C1 C2 C3 C4 P1 P2 P3 P4,2.1前趋图和程序执行,12:49,操作系统|进程管理 8,例2Begin integer N:=0;CobeginProgram A:begin Program B:beginL1:N:=N+1;L2:Print(N
4、);N:=0;Goto L1;Goto L2;End EndCoendEnd当N=5时,如果 N=N+1 在 print(N)和 N:=0前中间后打印655执行后N=001,2.1前趋图和程序执行,12:49,操作系统|进程管理 9,例3设有堆栈S,栈指针top,栈中存放相应的数据块地址,程序 popaddr(top)从栈中取地址,pushaddr(blk)将地址放入栈S中。void popaddr(top)void pushaddr(blk)top-;*top=blk;r=*top;top+;return(r)先执行 popaddr 的top-,接着执行pushaddr的*top=blk,2
5、.1前趋图和程序执行,12:49,操作系统|进程管理 10,程序并发执行过程及条件(Bernstein条件)S0;CobeginS1;S2;S3;Sn;CoendSn+1;S1、S2、Sn可以由同一程序段中的不同语句组成。,2.1前趋图和程序执行,12:49,操作系统|进程管理 11,将任一语句划分为两个变量的集合R(Si)和W(Si):读集R(Si)=a1,a2,am写集W(Si)=b1,b2,bn 如对语句S1和S2有:R(S1)W(S2)=W(S1)R(S2)=W(S1)W(S2)=成立,则语句S1和S2可并发执行。,2.1前趋图和程序执行,12:49,操作系统|进程管理 12,例1 语
6、句 c=a b 和 w=c+1R(c=a b)=a,b W(c=a b)=c R(w=c+1)=c W(w=c+1)=w R(w=c+1)W(c=a b)=c 语句 c=a b 和 w=c+1 不能并发执行。,2.1前趋图和程序执行,12:49,操作系统|进程管理 13,例2 S1:a=x+y S2:b=z+1S3:c=a b S4:w=a+c+1 R(S1)=x,y W(S1)=a R(S2)=z W(S2)=b R(S3)=a,b W(S3)=c R(S4)=a,c W(S4)=w 语句 S1 和 S2 能并发执行。语句 S1 和 S3,S2 和S3,S3 和S4 不能并发执行。,S1 S
7、3 S4 S2,2.1前趋图和程序执行,12:49,操作系统|进程管理 14,资源共享资源共享是指系统中的硬件资源和软件资源不再由单个用户所独占,而为 n 个用户共同使用。由系统进行统一分配(硬件)和由程序自行使用(数据集,变量、队列等)程序并发执行与资源共享之间互为存在条件。,2.1前趋图和程序执行,12:49,操作系统|进程管理 15,程序并发执行的特点失去程序的封闭性和可再现性程序与计算不再一一对应程序并发执行的相互制约执行暂停执行,2.1前趋图和程序执行,12:49,操作系统|进程管理 16,2.2 进程的概念,进程的定义进程的定义:进程是程序在一个数据集合上的运行过程,是系统进行资源
8、分配和调度的一个独立的基本单位。进程的特征动态性并发特征独立特征异步特征机构特征,12:49,操作系统|进程管理 17,进程与程序的关系,进 程 程 序 概念 动态实体,静态实体,强调执行过程 是指令的有序集合 特征 并发性、独立性、无并行特征,异步性,是静止的 是竞争计算机系统 资源的基本单位两者联系 不同的进程可以共享同一个程序,只要对应的数据集不同,2.2 进程的概念,12:49,操作系统|进程管理 18,进程的组成(进程上下文)PCB程序数据进程控制块PCB描述信息控制信息资源管理信息CPU现场保护:对CPU的处理,2.2 进程的概念,12:49,操作系统|进程管理 19,PCB的组织
9、方式链接方式将具有相同状态的PCB,用其中的链接字,链接成一个队列。,2.2 进程的概念,12:49,操作系统|进程管理 20,索引方式根据进程的状态,建立索引表。,12:49,操作系统|进程管理 21,2.3进程状态及其控制,进程状态 一个进程的生命期可以划分为一组状态,这些状态刻画了这个进程。系统根据PCB结构中的状态值控制进程。就绪状态(Ready)执行状态(Running)等待状态(阻塞状态Blocked)新(New)状态终止状态(Terminated or Exit),12:49,操作系统|进程管理 22,挂起状态(Suspend)把一个进程挂起使之处于静止状态,以便研究它的执行情况
10、获对它进行修改。用户终端需要;父进程的需要:考查、修改获协调各子进程时;OS的需要:改善系统运行性能,调节负荷;对换的需要:缓和内存紧张的情况;,2.3进程状态及其控制,12:49,操作系统|进程管理 23,进程状态转换,三种基本状态:执行状态(Executing)就绪状态(Ready)阻塞状态(Blocked)或等待(Wait),阻塞状态,就绪状态,调度,I/O请求,进程,唤醒,时间片到,新状态,结束,后备队列,新状态结束状态,2.3进程状态及其控制,12:49,操作系统|进程管理 24,12:49,操作系统|进程管理 25,细化的进程状态图(增加挂起),活动阻塞,执行状态,活动就绪,静止就
11、绪,静止阻塞,调度,唤醒,I/O请求,激活,激活,挂起,挂起,挂起,唤醒,2.3进程状态及其控制,12:49,操作系统|进程管理 26,活动就绪(Readya)和活动阻塞(Blockeda)静止就绪(Readys)和静止阻塞(Blockeds),2.3进程状态及其控制,12:49,操作系统|进程管理 27,一个状态转换和进程转换的例子,进程A,I/O驱动,中断处理,进程B,I/O,现场保护和阻塞A启动I/O调度,恢复B现场,I/O中断,现场保护,中断处理A就绪调度,恢复A现场,退出(收回资源,调度),注:红色表示处于“管态”,2.3进程状态及其控制,12:49,操作系统|进程管理 28,2.4
12、进程控制,进程间的关系非结构系统(Unstructured System)树形结构系统(Tree-Structured System):一个进程能创建另一个进程,形成进程家族。,12:49,操作系统|进程管理 29,操作系统内核(Kernel)支撑功能中断处理时钟管理原语操作:完成特定功能的一段程序。原语在执行期间是不可分割的。资源管理功能进程管理存储器管理设备管理,2.4进程控制,12:49,操作系统|进程管理 30,进程的创建引起进程创建的事件用户登录作业调度提供服务应用请求(应用程序创建)创建过程 Create()申请空白PCB:新标识和PCB为新进程分配资源:批处理型和交互型作业初始化
13、进程控制块新进程插入就绪队列,12:49,操作系统|进程管理 31,创建原语(Create Primitive)Void Create(n,S0,P0,M0,R0,acc)i=getinternal name(n);id(i)=n;priority(i)=P0;cpupstate(i)=S0;main store(i)=M0;resources(i)=R0;status(i)=“readys”;set accounting data;insert(RL,i);,2.4进程控制,12:49,操作系统|进程管理 32,进程的终止进程终止的事件正常结束:Holt指令(引发中断)异常结束:越界错误保护
14、错非法指令错特权指令错运行超时等待超时算术运算错I/O故障外界干预:人工或系统干预、父进程请求、父进程终止,12:49,操作系统|进程管理 33,撤消原语(Destroy Primitive)Void destroy(n)sched=false;i=getinternal name(n);Kill(i);If sched then scheduler;,2.4进程控制,12:49,操作系统|进程管理 34,Kill过程:1、从PCB中读出进程状态;2、终止进程并设置调度标志为真;3、终止所有子进程;4、释放拥有的全部资源并归还父进程或系统;5、将终止进程从所在队列(PCB)中移出,12:49,
15、操作系统|进程管理 35,进程阻塞引起进程阻塞的事件1、请求系统服务2、启动某种操作3、数据尚未到达4、无新工作可做阻塞原语的主要工作停止目前工作,存CPU下场到PCB中;将PCB中的现行状态由“执行”改为“阻塞”;将PCB插入相应的阻塞队列中将CPU的控制权交下一就绪状态的进程,2.4进程控制,12:49,操作系统|进程管理 36,阻塞原语(Block Primitive)Void block(n)i=getinternal name(n);stop(i);status(i)=“blockeda”;insert(WL(r),i);scheduler;,2.4进程控制,12:49,操作系统|进
16、程管理 37,进程的唤醒进程唤醒的事件唤醒原语(Wakeup Primitive)Void wakeup(n)i=getinternal name(n);remove(WL(r),i);status=“ready”;insert(RL,i);scheduler;,2.4进程控制,12:49,操作系统|进程管理 38,进程的挂起(Suspend)挂起方式1、把发出本原语的进程自身挂起;2、挂起指定进程名(子进程)的进程;3、把某进程及其全部或部分子孙一起挂起。挂起操作检查被挂起进程的状态,根据原状态设置挂起后的状态把PCB复制到特定的内存区域若挂起前该进程正在执行,则由调度程序进行重新调度。,2
17、.4进程控制,12:49,操作系统|进程管理 39,方式2挂起原语(Suspend Primitive)Void suspend(n,a)i=getinternal name(n);s=status(i);if s=“executing”then stop(i);a=copy PCB(i);status(i)=if s=“blockeda”then“blockeds”;else“readys”;if s=“executing”then scheduler;,2.4进程控制,12:49,操作系统|进程管理 40,进程的激活进程激活过程激活原语(Activate Primitive)由创建原语创建
18、的进程处于“静止就绪“状态,后跟一个激活原语,使之变为活跃就绪,就能引起CPU的重新调度。,2.4进程控制,12:49,操作系统|进程管理 41,Void activate(n)i=getinternal name(n);status(i)=if status=“readys”then“readya”;else“blockeda”;if status(i)=“readya”then scheduler;,2.4进程控制,12:49,操作系统|进程管理 42,2.5 进程同步,并发引起的操作系统的改变操作系统必须记住各种活跃的进程必须为每个进程分配和释放各种资源保护每个进程的数据和物理资源进程的
19、结果必须与执行速度无关,12:49,操作系统|进程管理 43,进程间的制约进程中的资源竞争(间接)进程间通过共享的合作(直接)进程间通过通信的合作(直接)进程间的制约临界区临界资源(Critical Resource):一次仅允许一个进程使用的资源。,2.5进程同步,12:49,操作系统|进程管理 44,例1:两个进程对同一变量count访问和修改,P1:count+=1;P2:count-=1;若 count=5。P1:R1=count;R1=R1+1;count=R1;P2:R2=count;R2=R2-1;count=R2;若顺序执行P1、P2,则count=5。,2.5进程同步,12:
20、49,操作系统|进程管理 45,P1:R1=count;P1:R1=count;P2:R2=count;R1=R1+1;P1:R1=R1+1;P2:R2=count;count=R1;R2=R2 1;P2:R2=R2 1;count=R2;count=R2;P1:count=R1;若执行顺序如上,若执行顺序如上,则count=4则count=6。,2.5进程同步,12:49,操作系统|进程管理 46,与时间有关的错误:理发师问题,理发师 读Y 顾客 读Y 写X 读X 写Y,12:49,操作系统|进程管理 47,cobegin process 1;process 2:coend,2.5进程同步,
21、临界区:不允许多个并发进程交叉执行的一段程序,process 1:begin L1:entry section CS1;exit section Remainder of rocess 1;Goto L1;end,process 2:begin L2:entry section CS2;exit section Remainder of rocess 2;Goto L1;end,12:49,操作系统|进程管理 48,互斥不允许两个以上的共享该资源的并发进程同时进入临界区称为互斥。临界区调度原则空闲让进忙则等待有限等待让权等待,2.5进程同步,12:49,操作系统|进程管理 49,互斥的软件实现
22、 算法1:进程Pi,Pj共享临界资源R。Turn:进程编号。算法1:共享一个公用整型变量turnvoid Pi()while(true)while(turn!=i);/资源被j进程用,空转 critical section turn=j;/把资源控制权交给j remainder section,2.5进程同步,12:49,操作系统|进程管理 50,算法2:用数组代替算法一中的turnint flag n=0,0,0;void Pi()while(true)for(j=0;jn;j+)if(flagj)j=0;/资源被用,空转 flagi=1;/让i 进程获得资源 critical sectio
23、n flagi=0;/放弃资源控制权 remainder section,2.5进程同步,12:49,操作系统|进程管理 51,算法3:int flag n=0,0,0;void Pi()while(true)flagi=1;for(j=0;jn;j+)if(flagj)j=0;critical section flagi=0;remainder section,2.5进程同步,12:49,操作系统|进程管理 52,算法4:进程共享两个公用变量boolean flag=new boolean 2;int turn=0;,public void P0()while(true)flag 0=tru
24、e;turn=1;while(flag 1,public void P1()while(true)flag 1=true;turn=0;while(flag 0;,2.5进程同步,12:49,操作系统|进程管理 53,public static void main()flag 0=false;flag 1=false;parbegin(P0,P1);,2.5进程同步,12:49,操作系统|进程管理 54,算法5:对临界区S设置一个变量状态W,W=0表示资源可用,W=1表示资源已被占用。例:Begin integer W=0;CogeginBeginL1:lock W;CS1;Unlock W;
25、Remainder of process 1;Goto L1;EndBeginL2:lock W;CS2;Unlock W;Remainder of process 2;Goto L2;EndCoend End,2.5进程同步,12:49,操作系统|进程管理 55,关锁原语lock W:if W=1 thenbeginblock(n);insert(WL,n);scheduler;endelseW=1;,2.5进程同步,12:49,操作系统|进程管理 56,开锁原语unlock W:if WL NULL thenbeginremove(WL,q);status(q)=“ready”;inser
26、t(RL,q);endelseW=0;,2.5进程同步,12:49,操作系统|进程管理 57,2.6 信号量机制及其应用,整型信号量机制信号量(sem)sem=0:表示可供并发进程使用的资源实体的个数sem0:表示正在等待使用临界区的进程数。Sem的值只能由P、V操作改变。P:wait(s)V:signal(s)按信号量数值分为二元信号量和一般信号量。,12:49,操作系统|进程管理 58,Wait(P)和signal(V)原语Wait(s)原语struct semaphore int count;QueueType Queue;void wait(s)s.count-;if(s.count
27、0)place this process in s.queue;block this process;,2.6信号量机制及其应用,12:49,操作系统|进程管理 59,signal原语void signal(s)s.count+;if(s.count=0)remove a process P from s.queue;place process P on ready list;,2.6信号量机制及其应用,12:49,操作系统|进程管理 60,利用信号量实现互斥public class mutualexclusion static final int n=;semaphore s=new sem
28、aphore(1);public void P(int i)while(true)wait(s);signal(s);public static void main()parbegin(P(1),P(2),.,P(n);,2.6信号量机制及其应用,12:49,操作系统|进程管理 61,利用信号量描述前趋关系P1:S1P2:S2S1S2则设置信号量s=0,P1:S1;signal(s);P2:Wait(s);S2;,2.6信号量机制及其应用,12:49,操作系统|进程管理 62,1,2,3,4,5,6,7,a,b,c,d,e,f,g,h,例:根据前趋图写出可并发执行的程序:,2.6信号量机制及其
29、应用,12:49,操作系统|进程管理 63,var a,b,c,d,e,f,g,h:semaphore:=0,0,0,0,0,0,0,0;beginparbegin begin S1;signal(a);signal(b);signal(c);end begin wait(a);S2;signal(d);end begin wait(b);S3;signal(e);end begin wait(c);S4;signal(f);end begin wait(d);S5;signal(g);end begin wait(e);wait(f);S6;signal(h);end begin wait(
30、g);wait(h);S7;endparendend,2.6信号量机制及其应用,12:49,操作系统|进程管理 64,信号量集机制AND型信号量集机制问题引入 进程A、B访问共享数据D和E 信号量Dmutex=1,Emutex=1process A:wait(Dmutex);wait(Emutex);process B:wait(Emutex);wait(Dmutex);,2.6信号量机制及其应用,12:49,操作系统|进程管理 65,A、B交替执行:process A:wait(Dmutex);则Dmutex=0process B:wait(Emutex);则Emutex=0process
31、A:wait(Emutex);则Emutex=-1,阻塞process B:wait(Dmutex);则Dmutex=-1,阻塞发生死锁。,2.6信号量机制及其应用,12:49,操作系统|进程管理 66,AND同步机制的思想Swait(S1,S2,Sn)if(S1=1,2.6信号量机制及其应用,12:49,操作系统|进程管理 67,Ssignal(S1,S2,Sn)for(i=1;i=n;i+)Si+;将所有等待Si资源的进程移到就绪队列。,2.6信号量机制及其应用,12:49,操作系统|进程管理 68,一般“信号量”机制Swait(S1,t1,d1;Sn,tn,dn)if(S1=t1,2.6
32、信号量机制及其应用,12:49,操作系统|进程管理 69,Ssignal(S1,d1,;Sn,dn)for(i=1;i=n;i+)Si+=di;将所有等待Si资源的进程移到就绪队列;,2.6信号量机制及其应用,12:49,操作系统|进程管理 70,特例:Swait(S,d,d):一个信号量,可每次申请d个资源;Swait(S,1,1):记录型信号量(S1)或互斥信号量(S=1);Swait(S,1,0):当S=1,允许多个进程进入某临界区;当S=0后,阻止任何进程进入临界区。,2.6信号量机制及其应用,12:49,操作系统|进程管理 71,例2:打印进程与计算进程的同步问题,设:SA 打印进程
33、的私有信号量,初值为0,当SA=1 时表示可以打印。SB 计算进程的私有信号量,初值为0,当SB=0 时表示可以放入计算结果。,缓冲区,计算,打印机,缓冲区,打印进程,计算进程,SA,SB,缓冲区,缓冲区,缓冲区,同步的概念,2.7 经典进程同步问题,12:49,操作系统|进程管理 72,计算结果放入缓冲区;T2:signal(SA);L1:wait(SB);,显然,进程CP与进程IOP相互制约:只有CP执行到 T2,IOP才能执行T1。(T2 T1)只有IOP执行到L2,CP才能执行L1。(L2 L1),计算进程与打印进程同步的模型,计算进程CP,打印进程IOP,T1:wait(SA);从缓
34、冲区取结果;L2:signal(SB);,SA,SB 初值为0,2.7 经典进程同步问题,12:49,操作系统|进程管理 73,异步环境 相互合作的一组并发进程,其中每一进程都能以各自独立的,不可预知的速度向前推进。进程同步 相互合作的进程之间需要交换一定的信息,当某进程未获得其合作进程发来的信息之前,该进程等待,直到该信息到来时才被唤醒继续执行,从而保证诸进程的协调运行。,2.7 经典进程同步问题,12:49,操作系统|进程管理 74,生产者消费者问题综述问题描述 通过由n个环形缓冲区构成的缓冲池,把生产者P1,P2,PM和一群消费者C1,C2,CK联系起来。算法描述,2.7 经典进程同步问
35、题,12:49,操作系统|进程管理 75,12:49,操作系统|进程管理 76,变量定义:begin Var mutex,empty,full:semaphore:=1,n,0;buffer:array0,n-1 of item;in,out:integer:=0,0;,2.7 经典进程同步问题,12:49,操作系统|进程管理 77,parbegin producer:beginrepeatproduce next product;wait(empty);wait(mutex);buffer(in):=nextp;in:=(in+1)mod n;signal(full);signal(mute
36、x);until false;end,2.7 经典进程同步问题,12:49,操作系统|进程管理 78,consumer:begin repeatwait(full);wait(mutex);nextc:=buffer(out);out:=(out+1)mod n;signal(empty);signal(mutex);consume the item in nextc;until false;endparendend,2.7 经典进程同步问题,12:49,操作系统|进程管理 79,wait(empty)empty=0则数据送入缓冲区empty 0empty=0释放一个空缓冲区,唤醒一个阻塞的生
37、产者进程,2.7 经典进程同步问题,12:49,操作系统|进程管理 80,wait(full)full=0则从缓冲区取走数据full 0full=0数据装入缓冲区,唤醒一个阻塞的消费者进程,2.7 经典进程同步问题,12:49,操作系统|进程管理 81,注意:互斥和同步信号量的原语必须成对出现。signal操作的次序无关紧要,但wait操作的次序不能颠倒,否则会造成死锁。用AND信号量解决生产者消费者问题,2.7 经典进程同步问题,12:49,操作系统|进程管理 82,用AND信号量解决生产者消费者问题parbegin producer:beginrepeatproduce nextp;Swa
38、it(empty,mutex);buffer(in):=nextp;in:=(in+1)mod n;Ssignal(mutex,full);until false;end,12:49,操作系统|进程管理 83,哲学家进餐问题,2.7 经典进程同步问题,12:49,操作系统|进程管理 84,public class diningphilosophers semaphore fork=new semaphore5(1);int i;,2.7 经典进程同步问题,12:49,操作系统|进程管理 85,public void philosopher(int i)while(true)think();wa
39、it(forki);wait(fork(i+1)%5);eat();signal(fork(i+1)%5);signal(forki);,2.7 经典进程同步问题,12:49,操作系统|进程管理 86,public static void main()parbegin(philosopher(0),philosopher(1),philosopher(2),philosopher(3),philosopher(4);,2.7 经典进程同步问题,12:49,操作系统|进程管理 87,解决死锁的方法:至多允许四个哲学家同时进餐。仅当哲学家的左右两支叉子均可用时,才进餐。(用AND信号量机制解决哲学
40、家进餐问题。)奇数号哲学家先拿左边的叉子,偶数号哲学家先拿右边的叉子。,2.7 经典进程同步问题,12:49,操作系统|进程管理 88,读者写者问题读者进程:可以同时读一个共享资源;写者进程:互斥的存取共享对象;读写进程同步:必须保证一个写进程与其它进程互斥地访问共享资源.Readcount:描述读者数目的临界资源.public class ReadersAndWriters int readcount;semaphore rmutex=new semaphore(1);semaphore wmutex=new semaphore(1);,12:49,操作系统|进程管理 89,public v
41、oid reader()while(true)wait(rmutex);if(readcount=0)wait(wmutex);readcount+;signal(rmutex);READUNIT();wait(rmutex);readcount-;if(readcount=0)signal(wmutex);signal(rmutex);,12:49,操作系统|进程管理 90,public void writer()while(true)wait(wmutex);WRITEUNIT();signal(wmutex);,12:49,操作系统|进程管理 91,2.8管程机制,管程的基本概念管程的定
42、义:一个管程定义了一个数据结构和能为迸发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。这些数据及操作对进程是透明的,局部于管程的数据结构只能被该管程的过程访问。管程组成:1、局部共享变量说明,2、内部对数据结构的操作,3、局部数据的置初值。任何进程访问共享资源,只能通过调用管程中的过程(管程名.过程名),而管程每次只允许一个进程进入管程,从而实现进程互斥条件变量:,12:49,操作系统|进程管理 92,管程的语法说明:一个进程访问临界资源,TYPE SSU=MonitorVar busy:boolean;nobusy:condition;define requi
43、re,returnProcedure requireBegin if busy then nobusy.wait busy:=trueEnd;,Procedure returnBegin busy:=false;nobusy.signal;End/initialization codeBeginbusy:=false;End,12:49,操作系统|进程管理 93,2.8 管程机制,条件变量:利用管程实现同步时,必须设置同步原语操作(wait和signal),由管程调用实现阻塞和唤醒。为了区别阻塞的原因,引入条件变量(在管程中说明),由条件变量来调用Wait、Signal原语操作。conditi
44、on VAR x,y:condition x.wait;y.signal,在管程中,y.signal操作的作用是启动一个被阻塞的进程,但如果阻塞队列没有进程时,y.signal不产生任何操作。如果进程Q处于阻塞队列的首部,当前进程P执行了y.signal,管程的处理方式1、P等待,直至Q离开管程或等待另一条件;2、Q等待,直至P离开管程或等待另一条件;,12:49,操作系统|进程管理 94,2.8 管程机制,用管程解决生产者-消费者问题,Type PC=monitorVar in,out,count:integer;Buffer:array0,n-1 of item;Full,Empty:co
45、ndition;Procedure Entry put(item)begin if count=n then Full.wait;Buffer(in):=nextp;in:=(in+1)mod n;count:=count+1;If Empty.queue then Empty.signal end,Procedure Entry get(item)begin if count=0 then Empty.wait;nextc:=buffer(out);out:=(out+1)mod n;count:=count-1;if Full.queue thenFull.signalend,Begin
46、in:=0;out:=0;count:=0;end,12:49,操作系统|进程管理 95,Producer:Begin repeat produce an item in nextp;PC.put(item);until false;end,Consumer:Begin repeat PC.get(item);consume the item in nextc;until false;end,2.8 管程机制,12:49,操作系统|进程管理 96,进程通信,进程之间的信息交换称为进程通信。1、低级通信:(信息量少)同步与互斥的进程间通过修改信号量,其缺点:1、效率低,2、不透明。2、高级通信:
47、(大量数据)通过操作系统提供的一组通信命令,高效地传送大量数据,通信过程对用户透明。优点:1、数据量大,2、减少通信程序编制上的复杂性。,12:49,操作系统|进程管理 97,进程通信,进程通讯类型共享存储系统、消息传递系统、管道通信系统共享存储系统(Shared-Memory System):由通信进程共享某些数据结构或共享存储区。基于共享数据结构的通信方式:公用数据结构的设置及对进程间同步的处理,都必须由程序员管理,操作系统只提供共享存储器,因此效率低,只适用少量数据传递。基于共享存储区的通信方式:进程在通信前,先向系统申请共享存储区(系统划分)中的一个分区,并指定关键字(若该分区已为其它
48、进程拥有,则向申请者返回描述符),由申请者把获得的共享存储分区连接到自己进程。适用于大量数据传递。,12:49,操作系统|进程管理 98,管道通信 管道(pipe)指用于连接一个读进程和一个写进程,以实现它们之间通信的共享文件。例:UNIX的管道管道按FIFO方式单向传送消息。,Pipe文件,写端fd1,读端fd0,2.9进程通信,管道机制必须具备:(1)互斥、(2)同步、(3)确定对方存在。,12:49,操作系统|进程管理 99,OS发送命令(直接通信方式)发送进程直接利用OS所提供的命令,把消息发送给目标进程。要求发送进程和接收进程必须以显示方式提供对方的标识符。OS通常提供以下两类通信原
49、语:Send(ReceiverID,message);Receive(SenderID,message);,消息传递通信的实现方法,12:49,操作系统|进程管理 100,信箱(间接通信方式)间接通信方式:进程之间的通信需要通过作为共享数据结构的实体作为暂存发送进程发送给目标进程的消息。当两个进程间需要通信时,由发送进程创建一个与接收进程相连的信箱。发送进程把消息送到信箱,接收进程从信箱中取走消息。信箱头:名称,大小,方向,进程名等;信箱体:由若干格子组成,每一格存放一条消息。双向信箱信箱溢出,12:49,操作系统|进程管理 101,信箱创建与撤消:系统提供相关原语,用于信箱的创建、撤消和消息
50、的发送、接收。消息的发送和接收:必须使用共享信箱,利用通信原语进行通信。Send(mailbox,message);Receive(mailbox,message);信箱类型私用信箱:用户创建,拥有者可读,其他人只可发。公用信箱:采用输入/输出双向通信链路,由OS创建。被核准进程可发、可收。共享信箱:由进程创建并指明共享进程名。发送进程和接受进程的对应关系:一对一、一对多、多对一、多对多。,12:49,操作系统|进程管理 102,通信链路:在发送进程和接受进程之间必须建立一条通信链路。一种是显示的由“建立连接”命令(原语)请求系统为之创建,使用完后,也用显示方式拆除。另一种是利用系统提供的发送