进程同步与互斥的关系.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程同步与互斥的关系 在多道程序环境中,当程序同时运行时,由于资源共享和进程合作,同一系统中的进程之间可能存在相互干扰和直接制约的关系。信号机制是调整操作系统进步同步的常用工具,用于协调进程。 1 进程间的互斥 进程的同步是指在异步环境下的并发进程因直接制约而互相发送消息,进行相互合作、相互等待,使得各进程按一定的速度执行的过程;而进程的互斥是由并发进程同时共享公用资源而造成的对并发进程执行速度的间接制约.无论是同步还是互斥,都是在执行的时间顺序上对并发进程的操作加以某种限制.对于互斥的进程,它们各自单独执行时都是正确的;同步的进程,它们各自单独执行会产生错误,必须互相配合共同推进,也就是说,同步条件高.同步一方面要互斥进入临界区使用临界资源,另一方面进入临界区有先后顺序. 2 pv操作 一个信号量的建立必须经过说明,即应该准确说明s的意义和初值,信号量的值仅能由PV原语来改变.P操作是申请资源,它使信号量值减1,若结果非负,该进程继续,否则该进程被封锁;V操作是释放资源,它使信号量值增1,若结果大于零,该进程继续,否则从该信号量的等待队列中移出一个进程,解除它的等待状态. 2.1 售票厅社会资源 用于互斥的信号量mutex与所有的并发进程有关,称之为公有信号量,公有信号量的值反映了可用该公有资源的数量.要实现进程互斥,只需用P(mutex)、V(mutex)框住临界区CS.程序如下: 例1某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,厅外的购票者可立即进入,否则需要在外面等待.每个购票者可看成一个进程. 分析:首先确定进程间的关系,售票厅是各进程共享的公有资源,当售票厅中多于20名购票者时,厅外的购票者需要在外面等待,所以进程间是互斥的关系;然后确定信号量及其值,只有一个公有资源:售票厅,所以设置一个信号量mutex.售票厅最多容纳20个进程,即可用该资源实体数为20,mutex的初值就设为20.程序如下: REPEAT P(mutex); 进入售票厅; 购票; 退出; V(mutex); UNTIL false; 由此可知,互斥信号量的初值可大于等于1(当售票厅内至多容纳1名购票者时,初值为1),初值取什么,关键是可用资源数. 2.2 基于pv原语的进程同步 与进程互斥不同,进程同步时的信号量只与制约进程及被制约进程有关而不是与整组并发进程有关,所以称该信号量为私有信号量.利用PV原语实现进程同步的方法是:首先判断进程间的关系为同步的,且为各并发进程设置私有信号量;然后为私有信号量赋初值.进程通过调用P操作来测定自己需要的消息是否到达,通过调用V操作把其它进程需要的消息发送出去. 2.2.1 行完后才执行程序 首先找出所有的前趋关系,然后对每一种前趋关系(如Si→Sj)专门设置一初值为0的信号量,并在Si结束之后执行对该信号量的V操作,而在Sj开始之前执行对该信号量的P操作,这样便可保证程序段Si执行完后才执行程序段Sj. 例如图1有5个前趋关系,故设5个信号量S12、S13、S24、S25、S36、S46、S56,初值均为零,Sij表示第i个进程是否完成,第j个进程能否开始. 上述方法考虑的是有向边的个数,我们也可以根据结点来设置信号量.在前趋图中,有几个有后继的结点,就设几个信号量,且初值为零,表示该结点表示的进程是否完成,此时,一个结点有几个后继,要做几次V操作. 图1中,有5个结点有后继,故设5个信号量a、b、c、d、e初值均为零,分别表示P1、P2、P3、P4、P5是否执行完成,程序如下: 注意:进程P1、P2分别有2个V(a)、V(b)操作,因为它们分别有2个后继. 2.2.2 规范开车行为,释放信号量 例2在公共汽车上,司机和售票员各司其职.司机:正常行车、到站停车、启动开车;售票员:售票、开车门、关车门.司机和售票员之间应该密切配合,协调一致,以确保行车安全.请用PV操作实现司机和售票员之间的同步. 分析:司机和售票员在到站、开门、关门、启动开车几件事情上存在有同步关系:到站后才能开门,关门后才能开车.用2个私有信号量stop、run分别表示可以开门和可以开车.由于初始状态是汽车行车和售票员售票,所以初值应该都为0,到站后才会有司机发消息让开门.程序如下: 如果司机和售票员的工作流程如下,司机:启动开车、正常行车、到站停车;售票员:开车门、关车门、售票. 此时,由于初始状态为停车而还没开门状态,设stop=1、run=0,2个程序为: 需要注意的是2个进程同步时,程序编制和信号量初值有关.若S1=1,S2=0,则进程1为:P(S1)……V(S2),进程2为P(S2)……V(S1),即申请自己的信号量,释放对方的信号量;若S1=0,S2=0,则进程1为:……V(S2),P(

文档评论(0)

lgjllzx + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档