分布式系统中的死锁

上传人:宝路 文档编号:47735906 上传时间:2018-07-04 格式:PPT 页数:29 大小:319.30KB
返回 下载 相关 举报
分布式系统中的死锁_第1页
第1页 / 共29页
分布式系统中的死锁_第2页
第2页 / 共29页
分布式系统中的死锁_第3页
第3页 / 共29页
分布式系统中的死锁_第4页
第4页 / 共29页
分布式系统中的死锁_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《分布式系统中的死锁》由会员分享,可在线阅读,更多相关《分布式系统中的死锁(29页珍藏版)》请在金锄头文库上搜索。

1、第六章 分布式系统中的死锁 6.1 死锁问题 v死锁发生的条件 (1) 互斥。正如我们第五章所讨论的,互斥是一种资源分配方 式,保证同一个资源在同一时刻最多只能被一个进程占用,它 用于防止多个进程同时共享访问不可同时共享访问的资源。(2) 不可剥夺的资源分配。系统将一个资源的访问权分配给某 一个进程后,系统不能强迫该进程放弃对该资源的控制权。(3) 占有并等待。必然有一个进程占用了至少一个资源,同时 在等待获取被其他进程占用的资源。(4) 循环等待。在等待图中有一个循环路径。 第六章 分布式系统中的死锁 6.1 死锁问题 v死锁的图论模型 可以用图模型来表示死锁,表示死锁的图模型有两种,一种是

2、 等待图,另一种是资源分配图。 1) 在等待图中,节点代表进程,当且仅当进程Pi等待一个被 进程Pj所占用的资源时,边(Pi,Pj)存在于等待图中,图中的 边是有向的。 2) 资源分配图中的节点有两种:一种是进程节点,另一种是 资源节点。每个边是一个有序对(Pi,Rj)或(Rj,Pi),其中P代表 进程,R代表一个资源类型。边(Pi,Rj)表示进程Pi请求类型 为Rj的一个资源,并且正在等待这个资源,一个资源类型 中可能有多个资源。边(Rj,Pi)表示类型为Rj的一个资源已经 分配给进程Pi。由于等待图假定一个资源类型中只有一个 资源,所以资源分配图是一个比等待图更加有力的工具。 第六章 分布

3、式系统中的死锁 6.1 死锁问题 v死锁的图论模型 资源分配图实例:第六章 分布式系统中的死锁 6.1 死锁问题 v死锁的图论模型 资源分配图到等待图的转化:(1)在资源分配图中找到一个未被处理的资源R。如果所有的资 源都已经处理,转向步骤3。(2)从这个资源R的每个输入进程节点到每个输出进程节点之 间加一条有向边。一个资源的输入进程节点是等待这个资源 的进程节点,一个资源的输出进程节点是占有这个资源的进 程节点。转向步骤1。(3)删除所有的资源节点以及相应的边。第六章 分布式系统中的死锁 6.1 死锁问题 v死锁的图论模型 资源分配图到等待图的转化实例:第六章 分布式系统中的死锁 6.1 死

4、锁问题 v处理死锁的策略死锁 可以使用PAID来概括死锁处理的各种方法:预防(Prevent)、 避免(Avoid)、忽略(Ignore)和检测(Detect) 。 1) 预防死锁。通过限制请求,保证四个死锁条件中至少有一 个不能发生,从而预防死锁。 2) 避免死锁。如果资源分配会导致一个安全的结果状态,就 将资源动态地分配给进程。如果至少有一个执行序列使所 有的进程都能完成运行,那么这个状态就是安全的。 3) 忽略死锁。忽略死锁是UNIX常采用的一种方法,这种方 法只是简单地忽略死锁问题。 4) 检测死锁和从死锁中恢复。允许死锁发生,然后发现并解 除死锁。 第六章 分布式系统中的死锁 6.1

5、 死锁问题 v死锁的AND条件和OR条件 资源死锁和通信死锁:在通信死锁中,进程等待的资源就 是报文。资源死锁和通信死锁的真正区别在于资源死锁通 常使用AND条件,而通信死锁通常使用OR条件。 所谓AND条件就是当进程取得所有所需资源时,它才能继 续执行;所谓OR条件就是当进程得到至少一个所需资源 ,它就能继续执行。 在使用AND条件的系统中,死锁条件是在等待图中存在回 路。但是在使用OR条件的系统中,等待图中的回路未必 会引发死锁。在使用OR条件的系统中,死锁条件是存在 结(knot)。一个结K是一个节点集合,对于K中的任何节点 a,a能到达K中的所有节点,并且只能到达K中的节点。 第六章

6、分布式系统中的死锁 6.1 死锁问题 v死锁的AND条件和OR条件 OR条件死锁图例:第六章 分布式系统中的死锁 6.2 死锁的预防 v预防死锁的一般方法 死锁预防算法是通过限制进程的资源请求来达到预防死锁的目 的,都是通过打破四个死锁条件中的一个条件来实现的。 1) 进程在开始执行之前同时获得所有所需资源。这种方法打破 了占有并等待的条件。 2) 所有的资源都要被赋予一个唯一的数字编号。一个进程可以 请求一个有唯一编号i的资源,条件是该进程没有占用编号小 于或等于i的资源。这样,就打破了循环等待的条件。 3) 每个进程被赋予一个唯一的优先级标识。优先级标识决定了 进程Pi是否应该等待进程Pj

7、,从而打破了不可剥夺的条件。 第六章 分布式系统中的死锁 6.2 死锁的预防 v基于时间戳的预防死锁方法 包括两种死锁预防方案。这两种方案相互补充,这种方法常用 于分布式数据库系统中。 1) 等待死亡方案(wait-die scheme)。该方案是基于非剥夺方 法。当进程Pi请求的资源正被进程Pj占有时,只有当Pi的时间 戳比进程Pj的时间戳小时,即Pi比Pj老时,Pi才能等待。否则 Pi被卷回(roll-back),即死亡。 2) 伤害等待方案(wound-wait scheme)。它是一种基于剥夺 的方法。当进程Pi请求的资源正被进程Pj占有时,只有当进 程Pi的时间戳比进程Pj的时间戳大

8、时,即Pi比Pj年轻时,Pi才 能等待。否则Pj被卷回(roll-back),即死亡。 第六章 分布式系统中的死锁 6.2 死锁的预防 v基于时间戳的预防死锁方法 图例说明:第六章 分布式系统中的死锁 6.3 死锁的检测v集中式死锁检测 在集中式死锁检测方法中,利用所有的局部资源分配图(或等待 图)建立一个全局资源分配图(或等待图)。任何一个机器为它自 己的进程和资源维持一个局部的资源分配图。整个系统只有一 个协调者,它维持全局的资源分配图,全局的资源分配图是由 局部资源分配图组合而成的。 第六章 分布式系统中的死锁 6.3 死锁的检测v集中式死锁检测 全局资源分配图(或等待图)的获得方法:

9、1) 当在局部图中有边被加入或删除时,向协调者发送一个报 文,协调者根据报文信息对全局图进行更新。 2) 定期地更新,每个机器定期地向协调者发送自上次更新以 来所有添加的边和删除的边,协调者根据报文信息对全局 图进行更新。 3) 当协调者认为需要运行回路检测算法时,它要求所有的机 器向它发送局部图的更新信息,协调者对全局图进行更新 。 当开始死锁检测时,协调者便查找全局等待图。如果发现回路 ,一个进程就会被卷回,从而打破循环等待。 缺点:容易产生假死锁的情况 。 第六章 分布式系统中的死锁 6.3 死锁的检测v集中式死锁检测 产生假死锁的图例说明:第六章 分布式系统中的死锁 6.3 死锁的检测

10、v集中式死锁检测 产生假死锁的图例说明:第六章 分布式系统中的死锁 6.3 死锁的检测v分布式死锁检测 Knapp将分布式死锁检测算法分为以下四类: 1) 路径推动算法(path-pushing algorithm)。先在每个机器上建 立形式简单的全局等待图。每当进行死锁检测时,各个机 器就将等待图的拷贝送往一定数量的邻居节点。局部拷贝 更新后又被传播下去。这一过程重复进行直到某个节点获 得了足够的信息来构造一个等待图以便做出是否存在死锁 的结论。 2) 边跟踪算法(edge-chasing algorithm)。分布式网络结构图中 的回路可以通过沿图的边传播一种叫探测器的特殊信息来 检测。当

11、一个发起者得到一个与自己发送的探测器相匹配 的探测器时,它就知道它在图中的一个回路里。 第六章 分布式系统中的死锁 6.3 死锁的检测v分布式死锁检测 Knapp将分布式死锁检测算法分为以下四类: 3) 扩散计算(diffusing computation)。怀疑有死锁发生时,事 务管理器通过向依赖于它的进程发送查询启动一个扩散进 程。这里不会生成全局等待图。发送查询信息时,扩散计 算就增长;接收回答后,扩散计算就缩减。根据所得信息 ,发起者会检测到死锁的发生。 4) 全局状态检测(global state detection)。这个方法基于 Chandy和Lamport 的快照方法。可以通过

12、建立一个一致的 全局状态而无需暂停当前的计算来生成一个一致的全局等 待图。 第六章 分布式系统中的死锁 6.3 死锁的检测v层级式死锁检测 在层级式死锁检测算法中,站点被分层地放在一个树中。一个 站点的死锁检测只涉及到它的下一级站点。例如,设A、B和C 是控制器,而C是A和B的最低的公共祖先。假定节点Pi出现在 控制器A和B的局部等待图中,那么节点Pi也必定出现在如下控 制器的等待图中: (1) C控制器; (2) 所有位于从C到A的路径上的控制器; (3) 所有位于从C到B的路径上的控制器。 而且,如果Pi和Pj出现在控制器D的等待图中,并且在D的一个 下一级控制器(子控制器)的等待图中有一

13、条从Pi到Pj的路径,那 么边(Pi,Pj)一定存在于D的等待图中。 第六章 分布式系统中的死锁 6.3 死锁的检测v关于死锁检测和恢复的研究方向: 1) 算法正确性。严格证明死锁检测算法的正确性是困难的, 由于报文的传输延迟是不可预料的,所以得到一致的全局 状态是很困难的。 2) 算法性能。需要在信息流量(监测和恢复算法的复杂性)和 死锁持续时间(监测和恢复的速度)之间达成妥协。 3) 死锁解决。一个好而快的死锁检测算法可能并不能提供足 够的信息用于解决死锁。 4) 假死锁。一个检测程序不仅要满足前进要求,即必须在有 限的时间内发现死锁,还要满足安全要求。如果一个死锁 被发现,那么这个死锁应

14、该是确实存在的。 5) 死锁概率。检测和恢复算法的设计依赖于给定系统中死锁 发生的概率。 第六章 分布式系统中的死锁 6.3 死锁的检测v死锁检测的实例 1.AND模型下的Chandy-Misra-Hass算法 在Chandy-Misra-Hass算法中,分布式死锁检测算法使用一个 特殊的报文,在等待图中该报文从一个进程传递到另一个进 程,该报文称为探测报文(probe message)。如果报文回到发 起者,那么就有死锁存在。探测报文包含一个三元组(i,j,k), 表示该报文是一个由进程Pi发起的死锁检测报文,现在由进程 Pj所在的站点发往进程Pk所在的站点。 当一个进程接收到一个探测报文时

15、,它首先检查自己是否等 待某个(或某些)进程,如果它正在等待某个(或某些)进程,它 将向所有它等待的进程转发这个探测报文。 第六章 分布式系统中的死锁 6.3 死锁的检测v死锁检测的实例 1.AND模型下的Chandy-Misra-Hass算法图例说明: 第六章 分布式系统中的死锁 6.3 死锁的检测v死锁检测的实例 1.AND模型下的Chandy-Misra-Hass算法中打破死锁方法 : 1) 一种方法是由探测报文的发起者杀死自己,但是,当有多个 进程同时检测到同一个死锁时,与同一个死锁有关的多个进 程会被杀死,这样做的效率会很低。2) 另一种方法是每个收到探测报文的进程将自己的标识符附加

16、 到探测报文的后面,当探测报文回到发起者进程时,发起者 进程选取一个具有最大标识符号码的进程杀死,即使有多个 进程同时检测到同一个死锁,它们也会选择杀死同一个进程 。 第六章 分布式系统中的死锁 6.3 死锁的检测v死锁检测的实例 1.AND模型下的Mitchell-Merritt算法 1.Mitchell-Merritt算法与Chandy-Misra-Hass算法的区别: 2. 其限制是每个进程每次只能请求一个资源。 3. 探测报文在等待图中,沿等待方向的相反方向传送,这样的 图叫反向等待图(reversed wait-for graph)。 4. 每当进程收到探测报文时,它将自己的标识符和探测报文发 起者的标识符相比较,如果自己的标识符大于探测报文发起 者的标识符,它就用自己的标识符取代探测报文发起者的标 识符,自己变成探测报文的发起者。 5. 当几个进程同时发起死锁检测时,只有一个进程能够成为唯 一的探测者。第六章 分布式系统中的死锁 6.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号