死锁检测算法(伪代码)

时间:2016-10-20 09:27:25

标签: algorithm operating-system deadlock

我正在阅读Silberschatz G. Gagne的操作系统概念,关于死锁的章节,有一个针对死锁检测的伪代码如下:

  
      
  1. 让工作和结束分别是长度为m和n的向量。 (有n个进程和m个资源。)

         

    初始化工作=可用。对于i = 0,1,...,n-1,如果分配[i]   != 0,然后Finish [i] = false; 否则,Finish [i] = true。

  2.   
  3. 查找索引i,使得Finish [i] == false&&请求[i]< =工作。

         

    如果不存在,请转到步骤4.

  4.   
  5. 工作=工作+分配[i]

         

    完成[i] = true;

         

    转到第2步。

  6.   
  7. 如果某些i的Finish [i] == false,则系统会死锁。此外,如果Finish [i] == false,则处理Pi死锁。

  8.   

这与银行家的算法非常相似。但是,上面的粗体声明略有不同。

如果操作系统没有为该进程安排任何资源,有人可以解释为什么算法会立即将Finish [i]设置为对于进程i为真。据我所知,这绝对不意味着它不会陷入僵局,因为第4步提到(不确定这是否正确)。谢谢!

1 个答案:

答案 0 :(得分:1)

运行此算法时,它会检测当前涉及死锁的进程(如果有)。

一个持有没有资源的进程可能正在等待死锁进程,但是它本身不能参与死锁,并且与算法的其余部分无关(它在步骤3中没有效果) ),因此通过设置Finish[i]=true

来忽略它

请注意,此算法仍无法正确识别死锁进程。在步骤4中标记的进程可能保留资源,并且可能被阻塞等待死锁进程,但可能没有死锁进程需要它拥有的资源,因此进程本身不会涉及死锁。