计算机操作系统-进程同步与通信.ppt

上传人:s****8 文档编号:69506164 上传时间:2023-01-05 格式:PPT 页数:79 大小:938.50KB
返回 下载 相关 举报
计算机操作系统-进程同步与通信.ppt_第1页
第1页 / 共79页
计算机操作系统-进程同步与通信.ppt_第2页
第2页 / 共79页
点击查看更多>>
资源描述

《计算机操作系统-进程同步与通信.ppt》由会员分享,可在线阅读,更多相关《计算机操作系统-进程同步与通信.ppt(79页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、计算机操作系统计算机操作系统计算机操作系统计算机操作系统第三章第三章第三章第三章 进程同步与通信进程同步与通信进程同步与通信进程同步与通信计算机信息工程学院主讲教师主讲教师 王帅强王帅强http:/ 3.1 进程互斥和同步进程互斥和同步3.1.1 3.1.1 互斥算法互斥算法3.1.2 3.1.2 信号量信号量(semaphore)(semaphore)3.1.3 3.1.3 经典进程同步问题经典进程同步问题3.1.4 3.1.4 管程管程(monitor)(monitor)返回v在多道程序系统中,由于资源共享和进程合作,使各在多道程序系统中,由于资源共享和进程合作,使各进程之间存在两种类型的

2、制约关系:进程之间存在两种类型的制约关系:(1 1)间接制约关系(互斥)间接制约关系(互斥)(2 2)直接制约关系(同步)直接制约关系(同步)v进程同步指多个相关进程在执行次序上的协调,用于进程同步指多个相关进程在执行次序上的协调,用于保证这种关系的保证这种关系的 相应机制称为进程同步机制相应机制称为进程同步机制v互斥指进程之间竞争使用某种资源互斥指进程之间竞争使用某种资源进程同步与互斥进程同步与互斥 3.1.1 3.1.1 互斥算法互斥算法3.1.1.13.1.1.1临界资源临界资源3.1.1.23.1.1.2临界区的访问过程临界区的访问过程3.1.1.33.1.1.3同步机制应遵循的准则同

3、步机制应遵循的准则3.1.1.43.1.1.4进程互斥的硬件方法进程互斥的硬件方法3.1.1.13.1.1.1临界资源临界资源v进程间资源访问冲突进程间资源访问冲突共享变量的修改冲突操作顺序冲突v进程间的制约关系进程间的制约关系间接制约:进行竞争独占分配到的部分或全部共享资源,“互斥”直接制约:进行协作等待来自其他进程的信息,“同步”硬件或软件(如外设、共享代码段、共享数据结构),多个进硬件或软件(如外设、共享代码段、共享数据结构),多个进程在对其进行访问时(关键是进行写入或修改),必须互斥地程在对其进行访问时(关键是进行写入或修改),必须互斥地进行有些共享资源可以同时访问,如只读数据进行有些

4、共享资源可以同时访问,如只读数据多道程序环境多道程序环境 进程之间存在资源共享,进程的运行时间受影响进程之间存在资源共享,进程的运行时间受影响举例举例1 1:共享变量的修改冲突:共享变量的修改冲突举例举例2:竞争条件:竞争条件Race Conditionvcount+could be implemented as register1=count register1=register1+1 count=register1vcount-could be implemented as register2=count register2=register2-1 count=v假定初始状态下假定初始状态

5、下count=5 S0:producer execute register1=count register1=5S1:producer execute register1=register1+1 register1=6 S2:consumer execute register2=count register2=5 S3:consumer execute register2=register2-1 register2=4 S4:producer execute count=register1 count=6 S5:consumer execute count=register2 count=4c

6、ount-register2=count register2=register2-1 count=register2count+register1=count register1=register1+1 count=register1假设有两个进程假设有两个进程producer:producer:做做count+count+,进程,进程consumerconsumer做做countcount且两个进程并发执行。且两个进程并发执行。竞争条件竞争条件race conditionv多个进程并发访问和操作同一数据且执行结果与多个进程并发访问和操作同一数据且执行结果与特定访问顺序有关,称为竞争条件。特定

7、访问顺序有关,称为竞争条件。v如何防止出现竞争条件?如何防止出现竞争条件?同步同步举例举例3 操作顺序冲突操作顺序冲突有有3 3个进程:个进程:get,copyget,copy和和putput,它们对它们对4 4个存储区域个存储区域f f、s s、t t和和g g进行操作。进行操作。有有6 6种可能的操作顺序,只有一种结果是正确的。种可能的操作顺序,只有一种结果是正确的。进程的交互关系:可以按照相互感知的程度来分类进程的交互关系:可以按照相互感知的程度来分类互斥,指多个进程不能同时使用同一个资源;互斥,指多个进程不能同时使用同一个资源;死锁,指多个进程互不相让,都得不到足够的资源;死锁,指多个

8、进程互不相让,都得不到足够的资源;饥饿,指一个进程一直得不到资源(其他进程可能轮流占用资源)饥饿,指一个进程一直得不到资源(其他进程可能轮流占用资源)3.1.1.2 3.1.1.2 临界区的访问过程临界区的访问过程临界区v临界区临界区(critical section)(critical section):进程中访问临界资源的一段进程中访问临界资源的一段代码。代码。v进入区进入区(entry section)(entry section):在进入临界区之前,检查可否在进入临界区之前,检查可否进入临界区的一段代码。如果可以进入临界区,通常设置进入临界区的一段代码。如果可以进入临界区,通常设置相应

9、相应 正在访问临界区正在访问临界区 标志标志v退出区退出区(exit section)(exit section):用于将用于将 正在访问临界区正在访问临界区 标志清标志清除。除。v剩余区剩余区(remainder section)(remainder section):代码中的其余部分。代码中的其余部分。临界区临界区3.1.1.3 3.1.1.3 同步机制应遵循的准则同步机制应遵循的准则v空闲则入:其他进程均不处于临界区;空闲则入:其他进程均不处于临界区;v忙则等待:已有进程处于其临界区;忙则等待:已有进程处于其临界区;v有限等待:等待进入临界区的进程不能有限等待:等待进入临界区的进程不能死

10、等死等;v让权等待:不能进入临界区的进程,应释放让权等待:不能进入临界区的进程,应释放CPU(如转换到阻塞状态)如转换到阻塞状态)3.1.1.4 3.1.1.4 进程互斥的硬件方法进程互斥的硬件方法在许多机器中,都提供了专门的硬件指令在许多机器中,都提供了专门的硬件指令Test and Set,它可以用做解决它可以用做解决临界区问题。临界区问题。Test-and-Set指令指令该指令读出标志后设置为该指令读出标志后设置为TRUETRUEbooleanboolean TS(varTS(var lock lock boolean):booleanboolean):booleanbeginbegin

11、 tsts:=lock;:=lock;lock=TRUE;lock=TRUE;end endlocklock表示资源的两种状态:表示资源的两种状态:TRUETRUE表示正被占用,表示正被占用,FALSEFALSE表示空闲表示空闲利用利用TSTS实现进程互斥实现进程互斥v利用利用TSTS实现进程互斥:每个临界资源设置一个公共布尔变量实现进程互斥:每个临界资源设置一个公共布尔变量locklock,初值为初值为FALSEFALSEv在进入区利用在进入区利用TSTS进行检查:有进程在临界区时,重复检查;直到进行检查:有进程在临界区时,重复检查;直到其它进程退出时,检查通过;其它进程退出时,检查通过;W

12、hile TS(Lock)Do skip;Critical section;Lock:=false;Remainder section;Until v硬件方法的优点硬件方法的优点适用于任意数目的进程,在单处理器或多处理器上简单,容易验证其正确性可以支持进程内存在多个临界区,只需为每个临界区设立一个布尔变量v硬件方法的缺点硬件方法的缺点等待要耗费CPU时间,不能实现让权等待可能饥饿:从等待进程中随机选择一个进入临界区,有的进程可能一直选不上可能死锁3.1.1.43.1.1.4进程互斥的硬件方法进程互斥的硬件方法3.1.2 信号量信号量(semaphore)3.1.2.1 信号量和信号量和P、V原

13、语原语3.1.2.2 信号量集信号量集 前面的互斥算法是平等进程间的一种协商机制,前面的互斥算法是平等进程间的一种协商机制,OSOS可从进程管理者的角度来处理互斥的问题,信号量可从进程管理者的角度来处理互斥的问题,信号量就是就是OSOS提供的管理公有资源的有效手段。提供的管理公有资源的有效手段。信号量代表可用资源实体的数量。信号量代表可用资源实体的数量。3.1.2.1 信号量和信号量和P、V原语原语v1965年,由荷兰学者年,由荷兰学者Dijkstra提出是一种卓有成效的进程提出是一种卓有成效的进程同步机制。同步机制。v每个信号量每个信号量 s 除一个整数值除一个整数值s.value(计数)外

14、,还有一个计数)外,还有一个进程等待队列进程等待队列 s.queue,其中是阻塞在该信号量的各个进程其中是阻塞在该信号量的各个进程的标识的标识信号量只能通过初始化和两个标准的原语来访问作为OS核心代码执行,不受进程调度的打断初始化指定一个非负整数值,表示空闲资源总数(又称为资源信号量)若为非负值表示当前的空闲资源数,若为负值其绝对值表示当前等待临界区的进程数信号量数据结构的定义信号量数据结构的定义Type semaphore=record value:integer;L:list of process;end (类类pascal语言语言)或或typedef struct int value;s

15、truct process*;semaphore;(语言)(语言)1.P原语原语wait(s)Procedure wait(s)var s:semaphore;begin s.value:=s.value-1;/表示申请一个资源表示申请一个资源;if(s.value 0)then/表示没有空闲资源表示没有空闲资源;begin 调用进程进入等待队列调用进程进入等待队列s.;阻塞调用进程阻塞调用进程;end;2.V原语原语signal(s)Procedure signal(s)var s:semaphore;begin s.value:=s.value+1;/表示释放一个资源;表示释放一个资源;i

16、f(s.value=1 and S2=1 and and Sn=1)/满足资源要求时的处理;满足资源要求时的处理;for i=1 to n do Si=Si-1;/注:与注:与wait的处理不同,这里是在确信可满足的处理不同,这里是在确信可满足 /资源要求时,才进行减资源要求时,才进行减1操作;操作;endfor;else/某些资源不够时的处理;某些资源不够时的处理;调用进程进入第一个小于调用进程进入第一个小于1信号量的等待队列信号量的等待队列Sj.;阻塞调用进程阻塞调用进程; Ssignal(S1,S2,Sn)for i=1 to n do Si:=Si+1;/释放占用的资源;释放占用的资源

17、;for(each process P waiting in Si.)/检查每种资源的等待队列的所有进程;检查每种资源的等待队列的所有进程;从等待队列从等待队列Si.中取出进程中取出进程P;if(判断进程判断进程P是否通过是否通过Swait中的测试中的测试)/注:与注:与signal不同,这里要进行重新判断;不同,这里要进行重新判断;begin/通过检查(资源够用)时的处理;通过检查(资源够用)时的处理;进程进程P进入就绪队列进入就绪队列;end else /未通过检查(资源不够用)时的处理;未通过检查(资源不够用)时的处理;进程进程P进入某等待队列;进入某等待队列;endif endfore

18、ndfor 2.一般一般“信号量集信号量集”v一次需要一次需要N N个某类临界资源时,就要进行个某类临界资源时,就要进行N N次次waitwait操作低效又可能死锁操作低效又可能死锁v基本思想:在基本思想:在ANDAND型信号量集的基础上进行扩充:进程对信号量型信号量集的基础上进行扩充:进程对信号量SiSi的测试的测试值为值为titi(用于信号量的判断,即用于信号量的判断,即Si=Si=titi,表示资源数量低于表示资源数量低于titi时,便不时,便不予分配),占用值为予分配),占用值为didi(用于信号量的增减,即用于信号量的增减,即Si=Si=SiSi-didi和和Si=Si=SiSi +

19、didi)vSwait(S1,t1,d1;.;Swait(S1,t1,d1;.;SnSn,tntn,dndn););vSsignal(S1,d1;.;Ssignal(S1,d1;.;SnSn,dndn););一般信号量集用于同时需要多种资源、每种占用的数目不同、一般信号量集用于同时需要多种资源、每种占用的数目不同、且可分配的资源还存在一个临界值时的处理;且可分配的资源还存在一个临界值时的处理;Swait(S1,t1,d1;.;Sn,tn,dn);/P原语;原语;if(S1=t1 and .Sn=tn)then/满足资源要求时的处理;满足资源要求时的处理;for i=1 to n do Si=S

20、i-di;endfor;else/某些资源不够时的处理;某些资源不够时的处理;调用进程进入第一个小于调用进程进入第一个小于tj信号量的等待队列信号量的等待队列Sj.queue;阻塞调用进程阻塞调用进程;Ssignal(S1,d1;.;Ssignal(S1,d1;.;SnSn,dndn););for i=1 to n dofor i=1 to n do Si:=Si+Si:=Si+didi;/释放占用的资源;释放占用的资源;for(each process P waiting in for(each process P waiting in Si.queueSi.queue)/检查每种资源的等待

21、队列的所有进程;检查每种资源的等待队列的所有进程;从等待队列从等待队列Si.LSi.L中取出进程中取出进程P;P;if(if(判断进程判断进程P P是否通过是否通过SwaitSwait中的测试中的测试)/注:与注:与signalsignal不同,这里要进行重新判断;不同,这里要进行重新判断;beginbegin/通过检查(资源够用)时的处理;通过检查(资源够用)时的处理;进程进程P P进入就绪队列进入就绪队列;end end else /else /未通过检查(资源不够用)时的处理;未通过检查(资源不够用)时的处理;进程进程P P进入某等待队列;进入某等待队列;endifendif endfo

22、rendforendforendfor 3.1.3 经典进程同步问题经典进程同步问题1.1.生产者消费者问题生产者消费者问题(the producer-consumer problem)(the producer-consumer problem)问题描述:若干进程通过有限的共享缓冲区交换数据。其中,问题描述:若干进程通过有限的共享缓冲区交换数据。其中,生产者生产者 进程不断写入,而进程不断写入,而 消费者消费者 进程不断读出;共享缓冲区进程不断读出;共享缓冲区共有共有N N个;任何时刻只能有一个进程可对共享缓冲区进行操作。个;任何时刻只能有一个进程可对共享缓冲区进行操作。v定义信号量:定义信

23、号量:full是 满缓冲区数目,初值为0,empty是空缓冲区数目,初值为N。实际上,full和empty是同一个含义:full+empty=Nmutex用于访问缓冲区时的互斥,初值是1 生产者生产者消费者问题消费者问题采用采用AND信号量集:信号量集:Swait(empty,mutex),Ssignal(full,mutex),生产者生产者消费者问题消费者问题读者写者问题读者写者问题v问题描述:对共享资源的读写操作,任一时刻问题描述:对共享资源的读写操作,任一时刻“写者写者”最多只允许一个,而最多只允许一个,而“读者读者”则允许多个则允许多个“读写”互斥,“写写”互斥,读读允许Wmutex表

24、示允许写,初值是1。公共变量Rcount表示“正在读”的进程数,初值是0;Rmutex表示对Rcount的互斥操作,初值是1。读者写者问题读者写者问题P(Rmutex);+Rcount;if(Rcount=1)P(Wmutex);V(Rmutex);read;P(Rmutex);-Rcount;if(Rcount=0)V(Wmutex);V(Rmutex);Reader:P(Wmutex);write;V(Wmutex);Writer:v采用一般采用一般 信号量集信号量集 机制:问题增加一个限制条件:同时读的机制:问题增加一个限制条件:同时读的 读者读者 最最多多R R个个Wmutex表示允许

25、写,初值是1Rcount表示允许读者数目,初值为R读者写者问题读者写者问题3.3.哲学家进餐问题哲学家进餐问题v问题描述:(由问题描述:(由Dijkstra首先提出并解决)首先提出并解决)5个哲学家个哲学家围绕一张圆桌而坐,桌子上放着围绕一张圆桌而坐,桌子上放着5支筷子,每两个哲学家支筷子,每两个哲学家之间放一支;哲学家的动作包括思考和进餐,进餐时需要之间放一支;哲学家的动作包括思考和进餐,进餐时需要同时拿起他左边和右边的两支筷子,思考时则同时将两支同时拿起他左边和右边的两支筷子,思考时则同时将两支筷子放回原处。如何保证哲学家们的动作有序进行?如:筷子放回原处。如何保证哲学家们的动作有序进行?

26、如:不出现相邻者同时要求进餐;不出现有人永远拿不到筷子;不出现相邻者同时要求进餐;不出现有人永远拿不到筷子;筷子是临界资源,可以用信号量表示筷子是临界资源,可以用信号量表示varvar chopstic:array0,1,2,3,4 of semaphore;chopstic:array0,1,2,3,4 of semaphore;初始化为初始化为1 1repeatrepeat wait(chopsticiwait(chopstici););wait(chopsticwait(chopstic(i+1)mod 5);(i+1)mod 5);.Eat;Eat;signal(chopsticisi

27、gnal(chopstici););signal(chopsticsignal(chopstic(i+1)mod 5);(i+1)mod 5);.Think;Think;until false;until false;3.3.哲学家进餐问题哲学家进餐问题采用一般采用一般信号量集信号量集机制:机制:Repeat think;swait(chopstic(i+1)mod 5,chopstici);eat;signal(chopstic(i+1)mod 5,chopstici);until false;3.1.4 3.1.4 管程管程(monitor)(monitor)用信号量可实现进程间的同步,但

28、由于信号量用信号量可实现进程间的同步,但由于信号量的控制分布在整个程序中,其正确性分析很困的控制分布在整个程序中,其正确性分析很困难。管程是管理进程间同步的机制,它保证进难。管程是管理进程间同步的机制,它保证进程互斥地访问共享变量,并方便地阻塞和唤醒程互斥地访问共享变量,并方便地阻塞和唤醒进程。管程可以函数库的形式实现。相比之下,进程。管程可以函数库的形式实现。相比之下,管程比信号量好控制。管程比信号量好控制。1.信号量同步的缺点信号量同步的缺点v同步操作分散:信号量机制中,同步操作分散在各个进程中,同步操作分散:信号量机制中,同步操作分散在各个进程中,使用不当就可能导致各进程死锁(如使用不当

29、就可能导致各进程死锁(如P、V操作的次序错误、操作的次序错误、重复或遗漏)重复或遗漏)v易读性差:要了解对于一组共享变量及信号量的操作是否正易读性差:要了解对于一组共享变量及信号量的操作是否正确,必须通读整个系统或者并发程序;确,必须通读整个系统或者并发程序;v不利于修改和维护:各模块的独立性差,任一组变量或一段不利于修改和维护:各模块的独立性差,任一组变量或一段代码的修改都可能影响全局;代码的修改都可能影响全局;v正确性难以保证:操作系统或并发程序通常很大,很难保证正确性难以保证:操作系统或并发程序通常很大,很难保证这样一个复杂的系统没有逻辑错误;这样一个复杂的系统没有逻辑错误;2.管程的引

30、入管程的引入v19731973年,年,HoareHoare和和HansonHanson所提出;其基本思想是把信号量及其所提出;其基本思想是把信号量及其操作原语封装在一个对象内部。即:将共享变量以及对共享操作原语封装在一个对象内部。即:将共享变量以及对共享变量能够进行的所有操作集中在一个模块中。变量能够进行的所有操作集中在一个模块中。v管程的定义:管程是关于共享资源的数据结构及一组针对该管程的定义:管程是关于共享资源的数据结构及一组针对该资源的操作过程所构成的软件模块资源的操作过程所构成的软件模块,这些过程能同步进程和改这些过程能同步进程和改变管程中的数据。变管程中的数据。v管程可增强模块的独立

31、性:系统按资源管理的观点分解成若管程可增强模块的独立性:系统按资源管理的观点分解成若干模块,用数据表示抽象系统资源,同时分析了共享资源和干模块,用数据表示抽象系统资源,同时分析了共享资源和专用资源在管理上的差别,按不同的管理方式定义模块的类专用资源在管理上的差别,按不同的管理方式定义模块的类型和结构,使同步操作相对集中,从而增加了模块的相对独型和结构,使同步操作相对集中,从而增加了模块的相对独立性立性v引入管程可提高代码的可读性,便于修改和维护,正确性易引入管程可提高代码的可读性,便于修改和维护,正确性易于保证:采用集中式同步机制。一个操作系统或并发程序由于保证:采用集中式同步机制。一个操作系

32、统或并发程序由若干个这样的模块所构成,一个模块通常较短,模块之间关若干个这样的模块所构成,一个模块通常较短,模块之间关系清晰系清晰。管程由三部分组成:管程由三部分组成:(1)局部于管程的共享变量说明)局部于管程的共享变量说明(2)对该数据结构进行操作的一组过程)对该数据结构进行操作的一组过程(3)对局部于管程的数据设置初始值的语句。)对局部于管程的数据设置初始值的语句。3.管程的主要特性管程的主要特性v模块化:一个管程是一个基本程序单位,可以单独编模块化:一个管程是一个基本程序单位,可以单独编译;译;v抽象数据类型:管程是一种特殊的数据类型,其中不抽象数据类型:管程是一种特殊的数据类型,其中不

33、仅有数据,而且有对数据进行操作的代码仅有数据,而且有对数据进行操作的代码v信息封装:管程是半透明的,管程中的外部过程(函信息封装:管程是半透明的,管程中的外部过程(函数)实现了某些功能,至于这些功能是怎样实现的,数)实现了某些功能,至于这些功能是怎样实现的,在其外部则是不可见的;在其外部则是不可见的;4.管程的实现要素管程的实现要素v管程中的共享变量在管程外部是不可见的,外部只能管程中的共享变量在管程外部是不可见的,外部只能通过调用管程中所说明的外部过程(函数)来间接地通过调用管程中所说明的外部过程(函数)来间接地访问管程中的共享变量;访问管程中的共享变量;v为了保证管程共享变量的数据完整性,

34、规定管程互斥为了保证管程共享变量的数据完整性,规定管程互斥进入;进入;v管程通常是用来管理资源的,因而在管程中应当设有管程通常是用来管理资源的,因而在管程中应当设有进程等待队列以及相应的等待及唤醒操作;进程等待队列以及相应的等待及唤醒操作;5.管程中的多个进程进入管程中的多个进程进入v当一个进入管程的进程执行等待操作时,它应当释放当一个进入管程的进程执行等待操作时,它应当释放管程的互斥权;当一个进入管程的进程执行唤醒操管程的互斥权;当一个进入管程的进程执行唤醒操作时(如唤醒),管程中便存在两个同时处于作时(如唤醒),管程中便存在两个同时处于活动状态的进程。活动状态的进程。v管程中的唤醒切换方法

35、:管程中的唤醒切换方法:P等待Q继续,直到Q等待或退出;Q等待P继续,直到P等待或退出;规定唤醒为管程中最后一个可执行的操作;v入口等待队列:因为管程是互斥进入的,所以当一个进程试入口等待队列:因为管程是互斥进入的,所以当一个进程试图进入一个巳被占用的管程时它应当在管程的入口处等待,图进入一个巳被占用的管程时它应当在管程的入口处等待,因而在管程的入口处应当有一个进程等待队列,称作入口等因而在管程的入口处应当有一个进程等待队列,称作入口等待队列。待队列。v紧急等待队列:如果进程唤醒进程,则等待继续,紧急等待队列:如果进程唤醒进程,则等待继续,如果进程在执行又唤醒进程,则等待继续,如果进程在执行又

36、唤醒进程,则等待继续,.,如此,在管程内部,由于执行唤醒操作,可能会出现多个等如此,在管程内部,由于执行唤醒操作,可能会出现多个等待进程(已被唤醒,但由于管程的互斥进入而等待),因而待进程(已被唤醒,但由于管程的互斥进入而等待),因而还需要有一个进程等待队列,这个等待队列被称为紧急等待还需要有一个进程等待队列,这个等待队列被称为紧急等待队列。它的优先级应当高于入口等待队列的优先级。队列。它的优先级应当高于入口等待队列的优先级。5.管程中的多个进程进入管程中的多个进程进入6.条件变量条件变量(condition)v由于管程通常是用于管理资源的,因而在管程内由于管程通常是用于管理资源的,因而在管程

37、内部,应当存在某种等待机制。当进入管程的进程部,应当存在某种等待机制。当进入管程的进程因资源被占用等原因不能继续运行时使其等待。因资源被占用等原因不能继续运行时使其等待。为此在管程内部可以说明和使用一种特殊类型的为此在管程内部可以说明和使用一种特殊类型的变量变量-条件变量。每个表示一种等待原因,并条件变量。每个表示一种等待原因,并不取具体数值相当于每个原因对应一个队列。不取具体数值相当于每个原因对应一个队列。7.管程的格式管程的格式TYPE monitor_name=MONITOR;TYPE monitor_name=MONITOR;共享变量说明共享变量说明define define 本管程内

38、所定义、本管程外可调用的过程(函数)名字表本管程内所定义、本管程外可调用的过程(函数)名字表use use 本管程外所定义、本管程内将调用的过程(函数)名字表本管程外所定义、本管程内将调用的过程(函数)名字表PROCEDURE PROCEDURE 过程名(形参表);过程名(形参表);过程局部变量说明;过程局部变量说明;BEGINBEGIN语句序列;语句序列;END;END;FUNCTION FUNCTION 函数名(形参表):值类型;函数名(形参表):值类型;函数局部变量说明;函数局部变量说明;BEGINBEGIN语句序列;语句序列;END;END;.BEGINBEGIN共享变量初始化语句序列

39、;共享变量初始化语句序列;END;END;8.管程的的组成管程的的组成v名称:为每个共享资源设立一个管程名称:为每个共享资源设立一个管程v数据结构说明:一组局部于管程的控制变量数据结构说明:一组局部于管程的控制变量v操作原语:对控制变量和临界资源进行操作的一组原语过程操作原语:对控制变量和临界资源进行操作的一组原语过程(程序代码),是访问该管程的唯一途径。这些原语本身是(程序代码),是访问该管程的唯一途径。这些原语本身是互斥的,任一时刻只允许一个进程去调用,其余需要访问的互斥的,任一时刻只允许一个进程去调用,其余需要访问的进程就等待。进程就等待。v初始化代码:对控制变量进行初始化的代码初始化代

40、码:对控制变量进行初始化的代码9.例子:生产者例子:生产者-消费者问题消费者问题建立一个管程,命名为建立一个管程,命名为PCPC,其中包括两个过程其中包括两个过程(1 1)put(item)put(item)生产者利用该过程,将自己生产的消息放到缓冲池中,生产者利用该过程,将自己生产的消息放到缓冲池中,并用整型变量并用整型变量countcount来表示在缓冲池中已有的消息数,当来表示在缓冲池中已有的消息数,当count=ncount=n时,表示缓冲池已满,生产者需等待。时,表示缓冲池已满,生产者需等待。(2 2)get(item)get(item)消费者利用该过程从缓冲池中取出一个消息,当消费

41、者利用该过程从缓冲池中取出一个消息,当count=0count=n then notfull.wait;buffer(in):=nextp;in:=(in+1)mod n;count:=count+1;if notempty.queue then notempty.signal;endPCPC管程的描述:管程的描述:Procedure entry get(item)begin if count=0 then notempty.wait;nextc:=buffer(out)out:=(out+1)mod n;count:=count-1;if notfull.queue then notfull

42、.signal;endbegin in:=out:=0;count:=0;其中的生产者和消费者描述为:其中的生产者和消费者描述为:producer:begin repeat produce an item in nextp;pc.put(item);until false;endconsumer:begin repeat pc.get(item);consume the item in nextc;until false;10.管程和进程的异同点管程和进程的异同点v设置进程和管程的目的不同设置进程和管程的目的不同v系统管理数据结构系统管理数据结构进程:PCB管程:等待队列v管程被进程调用管程被

43、进程调用v管程是操作系统的固有成分,无创建和撤消管程是操作系统的固有成分,无创建和撤消进程间通信示意图进程间通信示意图communication?inter-process communicationmachineprocess Aprocess Bshared memorymessage passingsignals 3.2.1 进程间通信的类型进程间通信的类型v低级通信:只能传递状态和整数值(控制信息),低级通信:只能传递状态和整数值(控制信息),包括进程互斥和同步所采用的信号量和管程机制。包括进程互斥和同步所采用的信号量和管程机制。优点:速度快缺点:传送信息量小:效率低,每次通信传递的信

44、息量固定,若传递较多信息则需要进行多次通信。编程复杂:用户直接实现通信的细节,编程复杂,容易出错。v高级通信:能够传送任意数量的数据,包括三类:高级通信:能够传送任意数量的数据,包括三类:共享存储区、管道、消息。共享存储区、管道、消息。1.1.低级通信和高级通信低级通信和高级通信2.2.直接通信和间接通信直接通信和间接通信v直接通信:信息直接传递给接收方,如管道。直接通信:信息直接传递给接收方,如管道。在发送时,指定接收方的地址或标识,也可以指定多个接收方或广播式地址;在接收时,允许接收来自任意发送方的消息,并在读出消息的同时获取发送方的地址。v间接通信:借助于收发双方进程之外的共享间接通信:

45、借助于收发双方进程之外的共享数据结构作为通信中转,如消息队列。通常数据结构作为通信中转,如消息队列。通常收方和发方的数目可以是任意的。收方和发方的数目可以是任意的。3.高级通信机制高级通信机制v共享存储器系统共享存储器系统v消息传递系统消息传递系统v管道通信管道通信v基于基于socketsocket的通信的通信3.2.2 共享存储区系统共享存储区系统相互通信的进程共享某些数据结构或共享相互通信的进程共享某些数据结构或共享存储区,进程之间通过它们进行通信。存储区,进程之间通过它们进行通信。1.基于共享数据结构的通信方式基于共享数据结构的通信方式 如生产者和消费者问题如生产者和消费者问题,属于低级

46、通信属于低级通信 。2.2.基于共享存储区的通信方式基于共享存储区的通信方式 为传输大量数据为传输大量数据,在内存中划出一块共享存储在内存中划出一块共享存储区区,诸进程可通过对共享存储区的数据进行读和诸进程可通过对共享存储区的数据进行读和写进行通信。写进行通信。共享内存共享内存 Shared Memory共享内存是进程间共享内存是进程间最有效最有效也是也是最快最快的通信方式。的通信方式。共享内存是内存块方式的数据块,其数据长度可为系统参共享内存是内存块方式的数据块,其数据长度可为系统参数限制内的任意长度。数限制内的任意长度。多个进程可将同一物理内存映射到自己的地址空间。多个进程可将同一物理内存

47、映射到自己的地址空间。共享内存处理函数:共享内存处理函数:创建一个共享段:shmget(key,size,flags)把共享内存链接到调用进程的数据段中:shmat(shmid,*shmaddr,flags)分离一个共享段:shmdt(*shmaddr)对共享段的各种控制操作:shmctl()Shared Memory Example#include#include#include#include#define SHMSZ 27main()int shmid;key_t key;char c,*shm,*s;key=5678;/*selected key*/*Create the segmen

48、t.*/if(shmid=shmget(key,SHMSZ,IPC_CREAT|0666)0)perror(shmget);exit(1);/*Now we attach the segment to our data space.*/if(shm=shmat(shmid,NULL,0)=(char*)-1)perror(shmat);exit(1);/*put some things into the memory*/for(s=shm,c=a;c=z;c+)*s+=c;*s=NULL;/*wait until first character is changed to*/while(*sh

49、m!=*)sleep(1);exit(0);#include#include#include#include#define SHMSZ 27main()int shmid;key_t key;char*shm,*s;key=5678;/*selected key by server*/*Locate the segment.*/if(shmid=shmget(key,SHMSZ,0666)0)perror(shmget);exit(1);/*Now we attach the segment to our data space.*/if(shm=shmat(shmid,NULL,0)=(cha

50、r*)-1)perror(shmat);exit(1);/*read what the server put in the memory.*/for(s=shm;*s!=NULL;s+)putchar(*s);putchar(n);/*change the first character in segment to*/*shm=*;exit(0);3.2.3 消息传递系统消息传递系统v进程间的数据交换以消息进程间的数据交换以消息(message)(message)为单位为单位,在计在计算机网络中算机网络中,message,message又称为报文。又称为报文。v系统提供了一组通信原语来实现通信

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁