使用RAG检测死锁

17 Mar 2025 | 阅读 2 分钟

如果资源分配图中出现了一个循环,并且所有资源都有单个实例,则系统处于死锁状态。

在具有多实例资源类型的资源分配图中,循环是死锁的必要条件,但不是充分条件。

下面的例子包含三个进程P1、P2、P3和三个资源R1、R2、R3。所有资源都只有一个实例。


os Deadlock Detection using RAG

如果我们分析图,我们可以发现图中形成了一个循环,因为系统满足死锁的四种条件。

分配矩阵

分配矩阵可以使用系统的资源分配图来形成。在分配矩阵中,将为每个已分配的资源做一个条目。例如,在下面的矩阵中,在P1前面和R3下面有一个条目,因为R3被分配给了P1。

过程R1R2R3
P1001
P2100
P3010

请求矩阵

在请求矩阵中,将为每个请求的资源做一个条目。在下面的例子中,P1需要R1,因此在P1前面和R1下面有一个条目。

过程R1R2R3
P1100
P2010
P3001

可用 = (0,0,0)

系统中既没有可用资源,也没有即将释放的进程。每个进程至少需要一个资源才能完成,因此它们将持续持有其中一个资源。

我们无法使用可用资源满足至少一个进程的需求,因此系统处于死锁状态,这在我们之前检测到图中的循环时就已经确定了。