操作系统 使用RAG进行死锁检测
如果在资源分配图中形成了一个循环,并且所有的资源都只有一个实例,那么系统就会发生死锁。
对于具有多实例资源类型的资源分配图,循环是死锁的必要条件,但不是充分条件。
以下例子包含了三个进程P1,P2,P3和三个资源R2,R2,R3。每个资源都只有一个实例。
如果我们分析这个图表,我们可以发现在图表中形成了一个循环,因为系统满足死锁的所有四个条件。
分配矩阵
分配矩阵可以通过使用系统的资源分配图来形成。在分配矩阵中,每个被分配的资源都会有一个条目。例如,在下面的矩阵中,我们在P1前面和R3下面的位置做了一个条目,因为R3被分配给了P1。
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)
无论是系统中都没有可用的资源,也没有一个进程将要释放。每个进程至少需要一个资源才能完成,因此它们将持续保持住它们。
我们无法使用现有资源来满足至少一个进程的需求,因此系统已经发生了死锁,就像我们在图中检测到循环时一样。