死锁

来源:互联网 发布:大学该不该谈恋爱 知乎 编辑:程序博客网 时间:2024/04/28 22:43

第八章 死锁


死锁的概念死锁的预防
死锁的避免死锁的检测与恢复

死锁的概念
死锁:是多个进程循环等待它方占有的资源而无限期僵持下去的局面。例如,两人竟过独木桥,两车竟过单行桥等交通阻塞现象,原因是共享资源(道路)。
产生死锁的必要条件
互斥条件:都为独占性资源,一方占用就不释放。
不可抢占条件:不能由申请方强夺。
占有且申请条件:至少占有一资源,又申请新资源
循环等待条件:存在进程等待序列{p1,p2,…pn}循环等待。

死锁的预防
只要打破四个必要条件之一就能有效预防死锁的发生:
打破互斥条件:改造独占性资源为虚拟资源,大部分资源已无法改造。
打破不可抢占条件:当一进程占有一独占性资源后又申请一独占性资源而无法满足,则退出原占有的资源。资源利用率、系统性能下降。
打破占有且申请条件:采用资源预先分配策略,即进程运行前申请全部资源,满足则远行,不然就等待,这样就不会占有且申请。
缺点:1.大部分进程运行前不知所有资源。2.资源利用率低,许多资源在进程中使用时间很短,但被早早的分配了。3.降低了进程的并发性,能同时满足要求的进程少了。
打破循环等待条件:实现资源有序分配策略,对所有设备实现分类编号,所有进程只能采用按序号递增的形式申请资源。
缺点:1.限制了进程对资源的请求,且资源编号困难。2.暂时不用的小编号的资源需先申请,加长了它的占用时间
死锁的避免
静态策略:对申请资源的活动加以限制,使不同时具备四个条件。
动态策略:分配资源时,预测有无可能发生死锁,避免可能发生的死锁,不限制资源申请活动。
安全序列:系统中的进程按照某一次序分配资源可以依次运行完毕,该次序为安全序列。
安全序列的构造:进程序列{p1,p2,…pn},若对每一进程pi(0<i<n+1),它需要的附加资源可以被系统中当前可用资源加上所有进程pj(j<i)当前占有资源之和所满足,则上述序列为安全序列。
存在安全序列时,一定不会有死锁发生,但即使进入不安全状态也未必一定死锁。
银行家算法
由Dijstra提出并解释:银行家(OS资源管理模块)怎样将资金(资源)用一定的方法分出去(给进程),让客户完成任务,又能如期回收资金(资源)。例如:银行家有10份资金,分给三个客户A、B、C,三客户分别需要9、3、8份资金才能完成,某一时刻资金使用情况为A-2(7),B-2(1),C-4(4)余2份。则{B,C,A}为安全序列。
优缺点:没有限制互斥条件、占有且申请条件、不可抢占条件。但要求进程数固定;只能保证进程在有限时间内完成,没有考虑快速响应;寻找安全序列开销较大。
死锁的检测与恢复
在分配资源时不采取任何限制措施,但提供检测和解除死锁的手段:即能发现死锁并解除死锁。
死锁的检测: 资源分配图:

结论:资源分配图中不存在环路,这系统一定不会死锁;存在环路,则可能存在死锁。资源分配图,就是数据结构中的图的表示,可以在算法上用程序解决问题。
死锁外传
死锁与交通阻塞,死锁的解决与交通管理相似:
增加共享资源(加宽道路)
交通工具分类分流各行其道(预防性静态分配)
各交叉路口动态管理(试分配判断是否会死锁)
交通干警干预管理(有无死锁进行检查与恢复)
死锁的解决一般应综合考虑,现代操作系统中,将资源分为多个层次,各层次的资源分配采用预防、避免、检测恢复的办法。

出于
http://jhtvu.jhedu.org/old/jxjy/kczl/czxt/eighth/