操作系统原理 第四章 进程通信精品.pptVIP

  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)消费者进程消费的速度不能快于生产者的速度,即消费者进程不能从“空”的缓冲区消费产品。 由此得到生产者和消费者进程应该满足以下同步规则: 1)若生产者企图把产品放入满的缓冲区,则必须阻塞等待,直到消费者从缓冲区中取走一个产品后将他唤醒。 2)若消费者企图从空的缓冲区取走商品,则必须阻塞等待,直到生产者放入一个产品后将其唤醒。 为了让缓冲区得到循环利用,将缓冲区做成环形的,以方便每个区域都可以循环利用 ?????????? 采用信号量机制: –??full是满缓冲区数目,初值为0,empty是空缓冲区数目,初值为N。记为同步信号量。实际上,full和empty是同一个含义:full + empty == N –??mutex用于访问缓冲区时的互斥,初值是1 另外设置整形变量in,out,分别用于指示空缓冲区和满缓冲区的位置 对环状缓冲区,放数据和取数据都有一个模操作· In:=(In+1)mod n Out:=(out+1)mod n 每个进程中各个P操作的次序是重要的:先检查资源数目,再检查是否互斥――否则可能死锁(为什么?) 分析: 生产者进程:P(mutex) 消费者进程:P(mutex) P(empty) P(full) 当进行了n次生产之后,缓冲区占满,empty=0。这时再执行生产者进程,p(mutex),mutex=0,可以执行,再执行p(empty),则empty=-1,生产者进程因为没有空的缓冲区而进入等待状态。如果此时有一个消费者进程来,首先执行p(mutex),则mutex=-1,消费者进程也进入等待,彼此都等待对方来唤醒自己,处于循环等待的状态,形成了死锁。 如果进程中wait(s1)和wait(s2)两个操作在一起,那么wait操作的顺序至关重要,尤其是一个同步wait操作与一个互斥wait操作在一起时,同步wait操作应该出现在互斥wait操作之前,而两个signal操作的顺序无关紧要。 (2)哲学家就餐问题 ?????????? 问题描述:(由Dijkstra首先提出并解决)5个哲学家围绕一张圆桌而坐,桌子上放着5支叉子,每两个哲学家之间放一支;哲学家的动作包括思考和进餐,进餐时需要同时拿起他左边和右边的两支叉子,思考时则同时将两支叉子放回原处。如何保证哲学家们的动作有序进行?如:不出现相邻者同时要求进餐;不出现有人永远拿不到叉子; 解决方法:为每个叉子单独设置一个信号量,取叉子的时候执行wait操作,放叉子时执行signal操作。 算法 : p51 问题:可能会出现每个哲学家都拿左边的叉子,会因为得不到右边的叉子而死锁。 解决死锁的方法 1)至多只允许四个哲学家同时就餐,保证至少有一个哲学家可以进餐 2)规定奇数号的哲学家先拿左边的叉子,再拿右边的叉子,偶数号哲学家则相反,这样的话,0,1号哲学家竞争1号叉子,2,3号哲学家竞争3号叉子。最后总有一个哲学家可以获得两把叉子。 3)仅当一哲学家左右两边的筷子都可以用时,才允许他抓起叉子。 利用AND信号量解决问题 Var fork array[0..4] of semaphore:=(1,1,1,1,1) repeat Swait(fork[i],fork[i+1] mod 5); eat; Ssingal(fork[i],fork[I+1] mod 5); think; until false; (3)读者-写者问题 问题描述:有一个共享文件L,允许多个进程同时读(reader)L中的消息,但任何时刻只能由一个进程写或者修改(writer)L中的消息;当有进程读的时候不允许任何进程写,当有进程写的时候不允许其他进程读或写。 ?????????? 对共享资源的读写操作,任一时刻“写者”最多只允许一个,而“读者”则允许多个 –??????? “读-写”互斥, –??????? “写-写”互斥, –??????? 读-读允许 另外,因为允许多个进程同时读,系统应记录读进程的个数,而每个读进程去读文或读文件结束后都要修改读者个数,因此,读者个数又是若干读进程的共享变量,即软件临界资源,它们也必

文档评论(0)

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

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

1亿VIP精品文档

相关文档