使用RAG进行死锁检测

如果在所有资源都具有单个实例的资源分配图中形成一个循环, 则系统将死锁。
在具有多实例资源类型的资源分配图的情况下, 循环是死锁的必要条件, 但不是充分条件。
以下示例包含三个进程P1, P2, P3和三个资源R2, R2, R3。所有资源均具有单个实例。

使用RAG进行死锁检测

文章图片
如果我们分析该图, 则可以发现在图中形成了一个循环, 因为该系统满足了所有四个死锁条件。
分配矩阵
可以通过使用系统的资源分配图来形成分配矩阵。在分配矩阵中, 将为分配的每个资源创建一个条目。例如, 在下面的矩阵中, 由于R3被分配给P1, 因此在P1的前面和R3的下面进行输入。
Process R1 R2 R3
P1 0 0 1
P2 1 0 0
P3 0 1 0
请求矩阵
在请求矩阵中, 将为每个请求的资源创建一个条目。如以下示例所示, P1需要R1, 因此将在P1的前面和R1的下面进行输入。
Process R1 R2 R3
P1 1 0 0
P2 0 1 0
P3 0 0 1
Avial =(0, 0, 0)
我们既没有系统中可用的任何资源, 也没有要发布的线程。每个线程至少需要一个资源才能完成, 因此它们将持续持有每个线程。
【使用RAG进行死锁检测】我们无法使用可用资源满足至少一个线程的需求, 因此, 如我们在图中检测到周期时所确定的那样, 系统陷入僵局。

    推荐阅读