分布式系统中的资源死锁与通信死锁


操作系统中的死锁发生在当一个进程进入等待状态,而其他进程持有需要使用的资源时。这个问题通常发生在多处理环境、分布式系统和并行计算系统中。

在分布式系统中,死锁被认为是一个主要问题,其中进程请求的资源由于其他进程持有而不可用。分布式系统包含一组进程 p1、p2、p3…pn,它们不共享公共内存,并且通信仅通过网络传递消息进行。它没有用于即时访问和通信媒介的全局时钟。每个进程都有两种状态,例如运行状态,其中进程包含所有资源并准备执行,以及另一种状态阻塞状态,其中进程处于等待状态,需要一些资源。

以下是发生死锁需要满足的四个条件:

保持并等待 - 一个进程持有另一个进程需要使用的资源。

互斥 - 当一次只允许一个进程使用一个资源时。

不可抢占 - 任何进程都不能被抢占,直到它完成任务的执行。

循环等待 - 进程需要以循环方式等待所需的资源,其中队列中的最后一个进程等待第一个进程使用的资源。

资源死锁

资源死锁发生在当一个进程等待由另一个进程持有一组资源,并且它等待在解除阻塞之前接收所有请求的资源时。因此,等待资源的进程集被称为处于资源死锁状态。考虑一个例子,当两个进程 P1 和 P2 需要资源 X 和 Y 时。在这种情况下,P1 等待资源 Y,而 P2 持有资源 Y,而 P2 反过来等待资源 X,该资源必须由持有它的 P1 释放。因此,在

封闭的方式中,P1 需要资源 Y 并等待 P2 释放它,而 P2 需要 X,并等待 P2 释放它。

上图被称为处于资源死锁状态,因为每个进程都等待另一个进程获取所有需要的资源集。分布式死锁更难以处理,因为资源和输入进程是分布式的,并且不能在公共场所检测到。一些方法用于处理分布式死锁,例如检测、预防、避免和鸵鸟问题(避免)。

通信死锁

通信死锁发生在需要通信的进程之间,并且等待另一个进程完成其任务。处于等待状态的进程在收到组中其他进程的通信请求时可以解除其阻塞状态。当集合中的每个进程都等待另一个进程进行通信时,此时没有其他进程开始其他通信,直到它从初始进程收到进一步的通信。

考虑一种情况,进程 X 等待来自进程 Y 的消息,而进程 Y 反过来等待来自另一个称为 Z 的进程的消息。然后进程 Z 等待初始进程。当进程之间的通信被彼此锁定时,就会发生这种死锁。

下表定义了资源死锁和通信死锁之间的主要区别

差异依据

资源死锁

通信死锁

定义

进程等待由其他进程持有的多个资源

进程等待组中的另一个进程彼此发起通信

进程状态

等待所需资源的进程无法继续执行状态,直到获取所有资源。

进程在收到来自另一个进程的通信消息之前不会进入执行状态。

等待对象

进程等待资源来执行其任务。

进程等待来自另一个进程的消息。

事务

不知道事务之间的依赖关系

进程可以在开始事务之前识别要与哪个进程通信

死锁发生

当特定集合中的每个进程都需要来自另一个进程的多个资源,并且初始进程必须通过获取所需的资源来解除其阻塞状态时。然后这些进程集处于资源死锁状态

当组中的每个进程都等待来自另一个进程的通信,并且在此阶段,没有其他进程启动新的通信,直到它从所需进程收到相同的通信,这些进程现在处于死锁阶段。

示例

进程 P1 等待资源 X,而 P2 等待资源 Y,并且每个进程都持有并等待每个资源。

进程 X 等待来自进程 Y 的消息,而进程 Y 反过来等待进程 Z,而 Z 等待初始进程 X。

结论

分布式系统中死锁的发生是一个主要问题,因为资源不共享公共内存位置,并且它们分布在不同的进程之间。分布式系统中可能出现两种类型的死锁,即资源死锁和通信死锁,上面已经对它们进行了描述,以及它们之间的区别。

更新于: 2023-07-17

549 次查看

启动您的 职业生涯

通过完成课程获得认证

开始
广告