死锁与饥饿.ppt

  1. 1、本文档共73页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
死锁与饥饿

第五章 死锁与饥饿 死锁与饥饿 死锁: indefinite wait. 可察觉 饥饿: not necessarily in wait state. ? 死锁和饥饿都是由于进程竞争资源而引起的. 5.1 死锁的概念 死锁定义 一组进程中的每一个进程,均无限期地等待此组进程中某个其他进程占有的,因而永远无法得到的资源,这种现象称为进程死锁。 定义死锁时刻: 无限等待发生时; 等待发生前(已注定死锁)。 由定义得到的结论 几个有用的结论: 参与死琐的进程至少有二个; 每个参与死锁的进程均等待资源; 参与死锁的进程中至少有两个进程占有资源; 死锁进程是系统中当前进程集合的一个子集。 5.2 死锁类型 5.2 死锁类型 5.2 死锁类型 5.2 死锁类型 5.2 死锁类型(Cont.) 5.3 死锁的条件 Coffman条件(必要条件) 资源独占(mutual exclusion) 不可抢占(non preemption) 保持申请(hold-while-applying) 循环等待(circular wait) 当每类资源只有一个实例时,充要条件。 破坏上述任意一个条件可以消除死锁。 5.4 死锁的处理 死锁预防(deadlock prevention)-静态 死锁避免(deadlock avoidance)--动态 死锁检测(deadlock detection) 死锁恢复(deadlock recovery) 5.5 资源分配图 5.5 资源分配图 申请:pi申请rj中的一个资源实例,由pi向rj画一条申请边,如可满足,改为分配边。 释放:去掉分配边。 申请边只指向方框,表明申请时不指定资源实例 分配边由方框中的某一圆点引出,表明哪一个资源实例被占用 例子(无环路,无死锁) 例子(有环路,有死锁) 例子(有环路,无死锁) 例子(有环路,无死锁) 资源分配图的约简 资源分配图的约简方法: (1)寻找一个非孤立且没有请求边的进程结点Pi,若没有则算法结束。 (2)去除所有Pi的分配边,使Pi成为孤立结点。 (3)寻找所有请求边均可满足的进程Pj,将Pj的请求边全部改为分配边。 (4)转步骤(1) 算法结束时,若所有结点均为孤立结点,则称资源分配图是可以完全约简的,否则称为不可完全约简的。 死锁定理:S为死锁状态的充分必要条件是S的资源分配图不可完全约简。 5.6 死锁预防 对进程有关资源的活动加限制,所有进程遵循这种限制,即可保证没有死锁发生。 优点:简单,系统不需要做什么。 缺点:对进程的约束,违反约束仍可能死锁。 预防方法: 预先分配法; 有序分配法。 5.6.1 预先分配法 进程:运行前申请所需全部资源; 系统: 能够满足,全部分配, 否则,一个也不分配。 破坏“hold-and-wait”条件 缺点: 资源利用效率低; 一次提出申请困难。 5.6.2 有序分配法 5.6.2 有序分配法 5.6.2 有序分配法 优点 与预先分配相比,资源利用率提高. 缺点 资源编号困难; 为保持按序申请,某些暂时不用的资源也需提前申请, 牺牲资源利用率. 例子 例子 例子 5.7 死锁避免 银行家算法(Cont.) 银行家算法(Cont.) 银行家算法(Cont.) 资源分配 安全性检测算法 银行家算法例子 银行家算法例子 银行家算法的保守性 银行家算法的保守性 讨论 5.8 死锁的检测 5.8.1 死锁检测算法 Remarks 死锁例子 5.8.2 死锁检测时刻 5.9 死锁的恢复 5.10 鸵鸟算法 视而不见 Pro: 工程师观点(考虑死锁发生的频率,危害,处理代价) 死锁发生频率<其它故障引起的系统瘫痪的频率 死锁处理constant overhead > 危害 Cont: 数学家观点 必须处理,无论代价如何 目前系统实际如此 Eg. UNIX proc结构(50 and up) 5.11 有关问题的讨论 关于充要性算法 已知进程关于资源活动序列 困难: 程序中的分枝与循环 复杂度高(NP Complete) 生灭资源问题 消息 消耗性资源与可重用资源并存 关于两阶段封锁 增长阶段有可能死锁 5.12 饥饿与活锁 饥饿(starvation):当等待时间给进程推进和响应带来明显影响时,称发生了进程饥饿.饥饿到一定程度的进程所赋予的使命即使完成也不再具有实际意义时称该进程被饿死(starved to death). 没有时间上界的等待 排队等待 忙式等待 忙式等待条件下发生的饥饿,称为活锁(live lock). 死锁与饥饿 饥饿 vs 死锁 死锁进程处于等待状态,忙式等待的进程并非处于等待状态, 但却可能被饿死; 死锁进程等待永远不会释放的资源, 饿死进程等待可能被释放,但却不会分给自己的资源,其等待时间

文档评论(0)

整理王 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档