分布式系统——分布式死锁的类型
死锁是一组进程被阻塞的情况,因为每个进程都持有一个资源并等待另一个被其他进程占用的资源。当这种情况出现时,它被称为死锁。
分布式系统是可以通过消息传递相互交换信息的机器网络。它非常有用,因为它有助于资源共享。在这样的环境中,如果分配给进程的资源顺序不受控制,可能会发生死锁。原则上,分布式系统中的死锁类似于集中式系统中的死锁。因此,上面对死锁的描述对集中式和分布式系统都适用。然而,分布式系统中的死锁处理比集中式系统更复杂,因为资源、进程和其他相关信息分散在系统的不同节点上。
处理死锁的三种常用策略如下:
- 避免:仔细分配资源以避免死锁。
- 预防:对进程请求资源的方式施加约束以防止死锁。
- 检测与恢复:允许发生死锁并使用检测算法来检测它们。检测到死锁后,通过一定的方式解决。
分布式死锁的类型:
分布式系统中有两种类型的死锁:
资源死锁:当两个或多个进程永久等待彼此持有的资源时,就会发生资源死锁。
- 需要某些资源才能执行的进程,并且在获得所有这些资源之前无法继续。
- 只有在获得所有必需的资源后,它才会继续执行。
- 它也可以使用AND条件表示,因为只有当它拥有所有必需的资源时才会执行该进程。
- 示例:进程 1 具有 R1、R2,并请求资源 R3。如果其中任何一个丢失,它将不会执行。只有当它获得所有请求的资源,即 R1、R2 和 R3 时,它才会继续。
通信死锁:另一方面,当一组进程被阻塞等待来自组中其他进程的消息以开始执行但它们之间没有消息在传输时,就会发生通信死锁。当集合中的任何一对进程之间没有消息在传输时,任何进程都不会收到消息。这意味着集合中的所有进程都处于死锁状态。通过使用 WFG 来指示哪些进程正在等待从其他进程接收消息,可以很容易地对通信死锁进行建模。因此,通信死锁的检测可以以与每种资源类型只有一个单元的系统相同的方式进行。
- 在通信模型中,进程需要资源来执行它,并在它至少获得了它所请求的资源之一时继续进行。
- 这里的资源代表要与之通信的进程。
- 在这里,一个进程等待与一组进程中的另一个进程通信。在集合中的每个进程都在等待与另一个进程通信的情况下,该进程本身也在等待与其他进程通信,这种情况称为通信死锁。
- 对于 2 个进程进行通信,每个进程都应该处于未阻塞状态。
- 它可以使用OR条件表示,因为它需要至少一种资源来继续其进程。
- 示例:在分布式系统网络中,进程 1 正在尝试与进程 2 通信,进程 2 正在尝试与进程 3 通信,而进程 3 正在尝试与进程 1 通信。在这种情况下,任何进程都不会被解除阻塞,并且发生通信死锁。