- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 生产者/消费者问题采用直接通信方式的进程 间的通信进程: 2.4 进程通信 typedef item=…; item nextp,nextc; cobegin; producer { do { … produce an item in nextp; … send(consumer,nextp); }while(true); } ? consumer { do { receive(producer,nextc); … consume the item in nextc; … }while(true); } coend 利用消息缓冲区实现直接通讯方式的通讯链: 2.4 进程通信 图2-19 消息缓冲区的直接通讯 2.4.2 消息通信 2、间接通信,又称邮箱(mailbox)通讯方式 进程间通过信箱实现通信 邮箱是一种数据结构,结 构如图2-20 使用信箱的规则: 1)若发送信件时邮箱已满,则发送进程被置 为“等邮箱”状态,直到信箱有空时才被释放。 2)若取信件时信箱中无信,则接收进程被置 为“等信件”状态,直到有信件时才被释放。 2.4 进程通信 图2-20 邮箱结构 2.4.2 消息通信 2、间接通信,又称邮箱(mailbox)通讯方式 send和receive原语定义如下: send(A,message):向邮箱A送入message; receive(A,message):从邮箱A取出message 2.4 进程通信 send实现步骤如下所示: { 查找指定邮箱A; 若邮箱未满,则把信件message送入邮箱且释放“等信件”者; 若邮箱已满置发送信件进程为“等邮箱”状态; } receive实现步骤如下所示: { 查找指定邮箱A; 若邮箱中有信,则取出一封信存于message中且释放“等邮箱”者; 若邮箱中无信件则置接收信件进程“等信件”状态; } 2.4.2 消息通信 2、间接通信,又称邮箱(mailbox)通讯方式 在间接通讯方式中,通讯链具有如下属性: 1)只有当两个进程有了一个可共享的邮箱时, 通讯链才在二者之间建立。 2)通讯链能够联系两个以上的进程。 3)每一对通讯进程之间必须有一组不同的链, 每条链对应一个邮箱。 4)通讯链可以是单向的,又可以是双向的, 如图2-21所示。 2.4 进程通信 2.4 进程通信 图2-21邮箱通信方式 2.5.1什么叫死锁 死锁:两个或两个以上的进程中的每一个都 在等待其中另一个进程释放资源而被封锁,它 们都无法向前推进的现象。 死锁问题是一种普遍性的现象,例如交通管 理中井字形的马路的车队死锁问题 下面我们继续看几个因进程竞争外设、文件 以及进程通讯而导致死锁情况的例子:如图2- 23 、24、25所示 2.5 死 锁 2.5 死 锁 图2-23 竞争外设 图2-24 竞争文件 图2-25 进程通信 2.5.2 产生死锁的条件 1. 产生死锁的原因 1)系统资源不足 2)与进程推进顺序有关 2.产生死锁的四个必要条件 1)互斥条件 2)占有等待条件 3)非剥夺条件 4)循环等待条件:存在进程—资源循环链 2.5 死 锁 2.5.3 死锁的对策 解决死锁的方法:死锁预防、死锁避免、 死锁恢复 1.死锁的预防 ⑴ 破坏互斥条件:共享使用 ⑵ 破坏占有等待条件:预先静态分配法 ,作业调度进内存前满足全部资源 ⑶ 破坏非剥夺条件:采用剥夺调度法 ⑷ 破坏循环等待条件:采用有序资源使 用方法 2.5 死 锁 2.5.3 死锁的对策 2.死锁的避免 银行家(Banker)算法:1965年E.W.Dijkstra 提出,它把操作系统比作一个银行家,它占有 有限资源,而要求资源进程比做要贷款的顾客 银行家问题:假设有3个顾客P,Q,R分别需 要贷款数为8万元、3万元、9万元,其银行所 有的资金数为10万元。其贷款有关系式为: 顾客剩余申请额=最大申请量—已贷款额 银行库
文档评论(0)