📜  Chandy-Misra-Haas 的分布式死锁检测算法

📅  最后修改于: 2022-05-13 01:56:11.267000             🧑  作者: Mango

Chandy-Misra-Haas 的分布式死锁检测算法

Chandy-Misra-Haas 的分布式死锁检测算法是一种边缘追踪算法,用于检测分布式系统中的死锁。

在边缘追踪算法中,死锁检测使用了一种称为探测的特殊消息。探测器是一个三元组(i, j, k) ,它表示进程 P i已启动死锁检测,并且消息正由进程 P j的主站点发送到进程 P k的主站点。

探测消息沿 WFG 的边缘循环以检测循环。当一个被阻塞的进程收到探测消息时,它在 WFG 中沿着它的传出边缘转发探测消息。一种方法P I声明僵局如果进程P I返回到自身发起探测消息。

算法中使用的其他术语:

  1. 依赖进程:
    方法P I被认为是依赖于某些其他过程P j的,如果存在的过程P I,P I1,P I2,P I3 ...,P IM,P j的这样的一个序列,在该序列中,每个过程除P j被阻塞,除了P i之外的每个进程都持有一个资源,序列中的前一个进程正在等待该资源。
  2. 本地依赖进程:
    如果进程P i依赖于进程P j并且两者都在同一站点,则称该进程P i局部地依赖于某个其他进程P j 。

数据结构:
一个布尔数组,依赖于i 。最初,对于 i 和 j 的所有值,依赖i [j] 都是假的。如果进程 P j依赖于进程 P i,则依赖i [j]为真。



算法:

发送探针的过程:

1. 如果进程 P i局部依赖于自身,则声明一个死锁。

2. 否则对于所有 P j和 P k检查以下条件:

  • (一种)。进程 P i局部依赖进程 P j
  • (b)。进程 P j正在等待进程 P k
  • (C)。进程 P j和进程 P k位于不同的站点。

如果上述所有条件都为真,则向进程 P k的主站点发送探测 (i, j, k)。

在进程 P k 的主站点收到探测 (i, j, k) 时:

1. Process P k检查以下条件:

  • (一种)。进程 P k被阻塞。
  • (b)。依赖k [i] 是false
  • (C)。进程 P k还没有响应进程 P j 的所有请求

如果发现上述所有条件都为真,则:



1. 将相关k [i] 设置为 true。
2. 现在,如果 k == i 那么,声明 P i是死锁的。
3. 否则对于所有 P m和 P n检查以下条件:

  • (一种)。过程 P k局部依赖于过程 P m
  • (b)。进程 P m正在等待进程 P n并且
  • (C)。进程 P m和进程 P n位于不同的站点。

4. 如果满足上述条件,则向进程P n的主站点发送probe(i, m, n)。

因此,探测消息沿着事务等待 (TWF) 图的边缘传播,并且当探测消息返回到其启动过程时,就可以说已检测到死锁。

表现:

  • 算法最多需要交换m(n-1)/2 条消息来检测死锁。这里,m 是进程数,n 是站点数。
  • 检测死锁的延迟是O(n)

好处:

  • 不需要特殊的数据结构。在死锁检测过程中使用了一个非常小且仅涉及3个整数和一个二维布尔数组相关的探测消息。
  • 在每个站点,只需要很少的计算,开销也很低
  • 与其他死锁检测算法不同,该算法不需要构造任何图或传递,也不需要将图信息传递给其他站点。
  • 算法不会报告任何虚假死锁(也称为幻影死锁)。

缺点:
分布式检测算法的主要缺点是所有站点可能不知道死锁中涉及的进程,这使得解决变得困难。此外,算法更正的证明是困难的。