网站大量收购独家精品文档,联系QQ:2885784924

Chapter-06(死锁)讲解.ppt

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

死 锁 第三章 资源 计算机资源实例 打印机 磁带机 表 进程必须以一个合理的顺序获得设备 假设一个进程拥有资源A同时申请资源B 同一时刻另一个进程拥有资源B申请资源A 两个进程都会被阻塞,而且这种状况会持续下去 资源 (1) 可抢占性资源(preemptable resources) 可以从拥有它的进程中抢占而不会产生任何副作用 不可抢占性资源(nonpreemptable resources) 如果从拥有它的进程中抢占将引起相关计算的失败 资源 (2) 使用一个资源所需要的事件顺序 请求资源 使用资源 释放资源 若请求资源失败,进程将会自动被阻塞 通常会处于一个小循环中:请求资源,睡眠,再请求 资源请求失败,系统会返回一个错误代码 死锁概述 规范定义 : 如果一个进程集合中的 每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么该进程集合时死锁的。 所谓的事件是释放该进程集合中其他进程所占有的资源 进程集合中没有任何一个进程会。。。 运行 释放资源 被唤醒 发生死锁的四个必要条件 互斥条件 每个资源要么已经分配给了一个进程,要么就是可用的 占有和等待 已经得到了某个资源的进程可以再申请新的资源 不可抢占条件 已经分配给一个进程的资源不能强制性被抢占,它只能被占有它的进程显示地释放 环路等待条件 死锁发生时,系统中一定有由两个或两个以上的进程组成的一条环路,该环路中的每一个进程都在等待下一个进程所占有的资源 死锁建模 (1) 采用有向图建立资源分配图 进程A占有一个资源 进程B请求一个资源 死锁 死锁建模 (2) 一个死锁是如何产生的例子 死锁建模 (3) 一个死锁是如何避免的例子 死锁建模 (4) 四种处理死锁的策略 忽略该问题 检测死锁并恢复 仔细对资源进行分配,动态地避免死锁 通过破坏引起死锁的四个必要条件之一,防止死锁的产生 鸵鸟算法 假装根本没有问题发生 如果以下假设成立,这种方法是合理的 死锁发生的可能性很小 预防死锁会付出很大的代价 大多数的工程师不会以性能损失和可用性的代价去防止死锁 每种类型一个资源的死锁检测 (1) 资源分配图 从a中抽取的环 每种类型多个资源的死锁检测 (2) 死锁检测算法所需的四种数据结构 每种类型多个资源的死锁检测(3) 死锁检测算法的一个例子 从死锁中恢复 (1) 通过抢占恢复 在某些情况下,可能会临时将某个资源从它当前所有者那里转移到另一个进程 该方法是否可行取决于该资源本身的特性 通过回滚恢复 周期性地对进程进行检查点检查 该方法就是将进程的状态写入一个文件以备以后重启 一旦检测到死锁,重新从一个较早的检查点开始重新启动进程 从死锁中恢复 (2) 通过杀死进程恢复 杀掉一个进程 杀掉死锁环中一个进程 选择一个环外的进程作为牺牲品以释放该进程的资源 最好选择可以从头开始重新运行而且不会带来副作用的进程 死锁避免 资源轨迹图 两个进程的资源轨迹图 安全状态和不安全状态 (1) 说明 (a) 中的状态为安全状态 安全状态和不安全状态(2) 说明 b 中的状态为不安全状态 单个资源的银行家算法 三种资源分配状态 安全 安全 不安全 多个资源的银行家算法 多个资源的银行家算法的例子 总的资源量为:A为10、B为5、C为7 死锁预防 破坏互斥条件 对于一些设备可以采用假脱机技术 (例如打印机) 只有打印机的守护程序可以使用打印机 不会因打印机而产生死锁 不是所有的设备都能够采用假脱机技术 原理: 避免分配那些不是绝对必需的资源 尽量做到尽可能少的进程可以真正申请资源 破坏占有且等待条件 规定所有进程在开始执行前申请请求所需的全部资源 进程不会因为中途申请资源而出现等待 出现问题 很多进程直到它运行时才知道它需要多少资源 资源的利用率将大大下降 少许改变: 现暂时释放当前所占有的所有资源 然后再尝试一次获得所需的所有资源 破坏不可抢占条件 有些资源可以通过虚拟化的方法来避免这个问题(例如磁盘) 假设一个进程拥有打印机 正在工作时被剥夺 !!?? 破坏环路等待条件 (1) 对资源排序编号 一个资源分配图 破坏环路等待条件(2) 死锁预防方法汇总 其他问题 两阶段锁 第一阶段 进程试图对所有所需的记录进行加锁,一次锁一个几轮 如果需要的记录已经被加锁,那么释放它所有加锁的记录,然后重新开始第一阶段 (在第一阶段没有做实际的工作) 如果第一阶段加锁成功,就开始第二阶段 执行更新 释放所有的锁 这种方法类似于提前请求所有资源 程序员必须仔细编写算法 程序可以在任意一点停下来 通信死锁(Communication Deadlock) 进程A向进程B发送请求信息,然后阻塞直至B回复 若请求信息丢失,A将阻塞以

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档