- 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.6 生产者/消费者问题;;;1 2 3 4 5 6 7 8 n;?不控制生产者/消费者;生产者/消费者必须互斥;生产者/消费者必须同步;(a) 生产者;利用信号量实现生产者/消费者同步与互斥;注意;2.7 读者/写者问题;问题描述;读者/写者进程满足的条件;如何控制读者和写者? ;读者优先;读进程具有优先权;写者优先;写进程具有优先权;写进程具有优先权;2.8 互斥与同步解决方法之四管程;管程是一种在程序设计级控制进程互斥与同步的机制,具有信号量的功能,且更容易使用和控制。
目前已有很多程序设计语言支持管程机制,如并发Pascal、Pascal_Plus、Modula-2、Modula-3、Java等,并且还作为程序库提供服务。
利用管程可以锁定任何对象,尤其是链表型数据结构,可以锁定整个链表,或链表中的某个元素。 ;管程的结构;管程的使用;type name = monitor /* 管程命名 */
var i : integer; /* 变量说明 */
c :condition;
procedure P1(x);
begin
…
end;
procedure P2(x);
begin
… /* 一组过程定义 */
end;
procedure Pn(x);
begin
…
end;
begin
/* 初始化语句 */
end;;用管程实现互斥;用管程实现同步;由于进程阻塞等待的原因有多种,为了区别阻塞等待进程和不同的阻塞队列,管程中设置了不同的条件变量,将因为不同事件阻塞的进程组织在不同的队列中,如下图。
当一个进程利用管程申请资源而未能满足时,将调用 cwait 原语阻塞自己,并进入相应阻塞队列。当某进程释放出一个临界资源以后,将用 csignal原语唤醒等待在该临界资源上的一个阻塞进程。 ;*;2.9 互斥与同步解决方法之五消息传递;进程通信的方式 ;发送进程
;常用的进程通信机制;基于共享存储区方式;?如何通过共享存储区通信;消息传递机制;消息传递的同步 ;消息传递的同步;三种同步方式 ;“不阻塞发送”;阻塞接收;消息传递中的寻址 ;间接寻址;邮箱;利用消息传递实现互斥 ;使用消息的互斥;注意;注意;利用消息传递解决:生产者-消费者问题 ;生产者/消费者同步;使用消息的互斥;*;2.10 进程死锁;;交通中的死锁现象;进程竞争资源可能引起死锁 ;获得A;修改进程P、Q 的代码;死锁的定义;引起死锁的原因 ;可重用资源; 可重用资源死锁例(两个进程竞争两个资源)
如果每个进程占有一个资源并申请另外一个资源
执行轨迹:p0p1q0q1p2q2
??死锁;竞争可重用资源可能会死锁;可消耗资源;Process P Process Q
… …
receive(Q,msg1) receive(P,msg2)
… …
send(Q,msg3) send(P,msg4)
… …
;产生死锁的条件 ;产生死锁的条件;前三个条件是死锁产生的必要条件,但不是充分条件。
互斥条件是临界资源固有的属性,保证进程互斥访问临界资源是必要的。不能因为互斥会导致死锁而禁止互斥。
“占有且等待”条件很多时候都存在,也是合理的。不可能要求进程每次申请新资源时,必须释放已占有资源。
“非剥夺”条件也是应该保留的。允许剥夺的资源是指那些,一旦剥夺中断进程的执行以后,可以从断点恢复执行的资源。否则,属于非剥夺资源。 ;第四个条件实际上是前三个条件的可能导致的结果,即只有存在互斥、占有且等待与非剥夺条件,就可能出现循环等待。
只要系统出现循环等待,则一定出现死锁。
这四个条件即构成了死锁产生的充分必要条件。 ;解决死锁的方法 ;解决死锁的方法 ;解决死锁的方法 ;预防死锁:禁止“互斥” ;预防死锁:禁止“占有且等待”;预防死锁:禁止“不剥夺”;预防死锁:禁止“环路等待”;预防死锁:禁止“环路等待”;避免死锁 ;安全状态 vs. 不安全状态;安全状态 vs. 不安全状态;假定;进程
;安全状态向不安全状态转换 ;银行家算法 ;数据结构 ;数据结构;数据结构;设Requesti是进程Pi的请求向量。Requesti[j] = k,表示进程Pi需要k个Rj类资源。当进程Pi发出资源请求后,系统按下述步骤进行检查
文档评论(0)