操作系统课件3第2章.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文档。上传文档
查看更多
2.4 经典进程的同步问题 生产者—消费者问题 读者—写者问题 哲学家进餐问题 图书馆阅览室问题 理发师问题 吃水果问题 司机—售票员问题 过河问题 1.生产者—消费者问题(the producer-consumer problem) 问题描述:若干进程通过有限的共享缓冲区交换数据。其中,生产者进程不断写入,而消费者进程不断读出;共享缓冲区共有N个;任何时刻只能有一个进程可对共享缓冲区进行操作。 采用信号量机制: full是满数目,初值为0,empty是空数目,初值为N。实际上,full和empty是同一个含义:full + empty == N mutex用于访问缓冲区时的互斥,初值是1 每个进程中各个P操作的次序是重要的:先检查资源数目,再检查是否互斥――否则可能死锁(为什么?) 2.读者-写者问题(the readers-writers problem) 一个文件可能被多个进程共享,为了保证读写的正确性和文件的一致性,系统要求,当有读者进程读文件时,不允许任何写者进程写,但允许多读者同时读;当有写者进程写时,不允许任何其它写者进程写,也不允许任何读者进行读。 为了解决读者和写者问题,需设置两个信号量: (1)读互斥信号量rmutex,用于使读者互斥地访问共享变量readcount,这里readcount是记录有多少读者正在读; (2)写互斥信号量wmutex,用于实现读写互斥和写写互斥地访问共享文件。读者—写者问题进行如下描述: semapore rmutex,wmutex=1,1; int readcount:=0; cobegin vord readeri(vord)(i=1,2,…k) { while(true){ p(rmutex); if readcount=0 then if readcount=0 then v(wmutex); p(wmutex); v(rmutex); readcount:=readcount+1; } v(rmutex); } 读文件; … p(rmutex); readcount:=readcount-1; vord writerj(vord)(j=1,2,…,m) { while(true){ p (wmutex); 写文件; v(wmutex);} } Coend 第二类读者写者问题: 写者优先 条件: 1)多个读者可以同时进行读(N) 2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行) 3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者) S,sn:semaphore; S:=1;sn:=n; Cobegin Reader I(I:=1,2,…n); { P(s); P(sn); V(s); Read file f; V(sn); } Writer I (I=1,2,…,n); { P(s); For I:=1 to n do p(sn); Write file f; For I:=1 to n do v(sn); V(s); } Coend; 3.哲学家进餐问题 (the dining philosophers problem) 问题描述:(由Dijkstra首先提出并解决)5个哲学家围绕一张圆桌而坐,桌子上放着5支筷子,每两个哲学家之间放一支;哲学家的动作包括思考和进餐,进餐时需要同时拿起他左边和右边的两支筷子,思考时则同时将两支筷子放回原处。如何保证哲学家们的动作有序进行?如:不出现相邻者同时要求进餐;不出现有人永远拿不到筷子; Var S:array[0..4] of :semaphore; S[I]:=1; Repeat P(s[I]); P(s[(I+1) % 5]); Eat; v (s[I]); v (s[(I+1) %5]); Until false; 4.图书馆阅览室问题 问题描述:假定阅览室最多可同时容纳100个人阅读,读者进入时,必须在阅览室门口的一个登记表上登记,内容包括姓名、座号等,离开时要撤掉登记内容。用P、V操作描述读者进程的同步算法。 #define CHAIRS 100 Semophore mutex=1; Int Readers=0; Void Reader( ) {while (1) { P(mutex); If (readers CHAIRS

文档评论(0)

带头大哥 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档