第二、三篇 进程、死锁.ppt

  1. 1、本文档共107页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.5 死锁的检测和恢复 在实际情况下,通过预防和避免的手段达 到排除死锁的目的是很难的。一般提供死锁 检测与恢复的方法。 死锁检测与恢复是指系统设有专门的机构, 当死锁发生时,该机构能够检测到死锁发生 的位置和原因,且能通过外力破坏死锁发生 的必要条件,从而使并发进程从死锁状态中 解脱出来。 3.5.1 对单体资源类的死锁检测 等待图。它是从资源分配图中去掉表示资源类的节点,且把相应边折叠在一起得到的。 当且仅当等待图中有环路,系统存在死锁。 图3-8 资源分配图和对应的等待图 3.5.2 对多体资源类的死锁检测 等待图不适用于多体资源类的资源分配系统。下面 介绍检测算法采用若干随时间变化的数据结构,与 银行家算法中所用的结构相似。 ① Available是一个长度为m的向量,表示每类资源的可用数目。 ② Allocation是一个n×m的矩阵,表示当前分给每个进程的每类资源的数目。 ③ Request是一个n×m的矩阵,表示当前每个进程对资源的申请情况。 检测算法只是简单地调查尚待完成的各个进程所有可能的分配序列。 3.5.2 对多体资源类的死锁检测 ① 令Work和Finish分别表示长度为m和n的向量,初始化Work:=Available;对于i=1, 2,…, n,如果Allocationi≠0,则Finish[i]:=false;否则Finish[i]:=true。 ② 寻找一个下标i,它应满足条件: Finish[i]=false且Requesti≤Work 若找不到这样的i,则转到④。 ③ 修改数据值: Work:=Work+Allocationi Finish[i]=true 转向②。 ④ 若存在某些i(1≤i≤n),Finish[i]=false,则系统处于死锁状态。此外,若Finish[i]=false,则进程pi处于死锁环中。 3.5.2 对多体资源类的死锁检测 设系统中有5个进程p1, p2, p3, p4和p5,有3类资源R1, R2和R3 ,每类资源的个数分别为7, 2, 6。 Allocation Request Available R1 R2 R3 R1 R2 R3 R1 R2 R3 p1 0 1 0 0 0 0 0 0 0 p2 2 0 0 2 0 2 p3 3 0 3 0 0 0 p4 2 1 1 1 0 0 p5 0 0 2 0 0 2 表3-6 死锁检测示例资源分配情况 可以找到序列{p1, p3, p4, p2, p5},对于所有的i 都有Finish[i]=true,系统在T0时刻没有死锁。 资源情况 进程 假定,进程p3现在申请一个单位的R3资源,则系统资源分配情况如表3-7所示。 Allocation Request Available R1 R2 R3 R1 R2 R3 R1 R2 R3 p1 0 1 0 0 0 0 0 0 0 p2 2 0 0 2 0 2 0 0 0 p3 3 0 3 0 0 1 p4 2 1 1 1 0 0 p5 0 0 2 0 0 2 由于对所有i=1, 2,…, 5,Allocationi≠0,所以Finish[i]=false。 表3-7 p3申请一个单位的R3资源后的资源分配数据 资源情况 进程 3.5.3 从死锁中恢复 主要有三种方式: 通过抢占资源实现恢复、通过回退执行实现恢复和通过杀掉进程实现恢复。 1.通过抢占资源实现恢复 即临时性地把资源从当前占有它的进程那里拿过来,分给另外某些进程,直至死锁环路被打破。 3.5.3 从死锁中恢复 2.通过回退执行实现恢复 回退方法由系统管理员做出安排,定期对系统中各个进程进行检查,并将检查点的有关信息(如进程状态、资源状态等)写入文件。 当检测到死锁时,就让某个占有必要资源的进程回退到它取得另外某个资源之前的一个检查点。回退过程所释放的资源分配给一个死锁进程,然后重新启动运行。 系统中应保存一系列检查点的文件。 要确定这个进程后退多远。 还有一种“全体”回退方式。 3.5.3 从死锁中恢复 3.通过杀掉进程实现恢复 终止所有的死锁进程。 一次终止一个进程,直至消除死锁环路。 3.5.4 “饥饿”状态 在某些策略下,系统会出现这样一种情况:在可以预计的时间内,某个或某些进程永远得不到完成工作的机会,因为它们所需的资源总是被别的进程占有或抢占。这种状况称做“饥饿”或者“饿死”(Starvation)。 饥饿不同于死锁。 3.6 处理死锁的综合方式 把以前介绍的基本方法组合起来,使得系统中各级资源都以最优的

文档评论(0)

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

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

1亿VIP精品文档

相关文档