死锁检测算法(伪代码)
Posted
技术标签:
【中文标题】死锁检测算法(伪代码)【英文标题】:Deadlock detection algorithm (pseudocode) 【发布时间】:2016-10-20 09:27:25 【问题描述】:我正在阅读 Silberschatz G. Gagne 的操作系统概念,在关于死锁的章节中,有一个用于死锁检测的伪代码如下:
令 Work 和 Finish 分别是长度为 m 和 n 的向量。 (有n个进程,m个资源。)
初始化工作 = 可用。对于 i = 0, 1, ..., n-1,如果 Allocation[i] != 0, 然后 Finish[i] = false; 否则,Finish[i] = true。
找到索引 i 使得 Finish[i] == false && Request[i]
如果不存在这样的 i,则转到步骤 4。
工作 = 工作 + 分配[i]
完成[i] = true;
转到第 2 步。
如果某些 i 的 Finish[i] == false,则系统死锁。此外,如果 Finish[i] == false,那么进程 Pi 就会死锁。
这与银行家算法非常相似。但是,上面的粗体声明略有不同。
如果操作系统没有为进程 i 安排任何资源,为什么算法会立即为进程 i 设置 Finish[i] 为真。据我所知,这绝对不意味着它不会像第 4 步提到的那样陷入僵局(不确定这是否正确)。谢谢!
【问题讨论】:
你的问题是基于Allocation
,你没有在任何地方定义。
一个不需要分配任何资源的进程当然可以完成(即不能成为死锁的一部分)。
【参考方案1】:
当该算法运行时,它会检测当前涉及哪些进程(如果有)陷入死锁。
一个没有资源的进程可能正在等待一个死锁的进程,但它本身不能参与死锁,并且与算法的其余部分无关(它在步骤 3 中没有影响),所以通过设置Finish[i]=true
来忽略它
请注意,此算法仍然不能完全正确地识别死锁进程。在第 4 步中标记的进程可能持有资源,并且可能在等待死锁进程时被阻塞,但可能没有死锁进程需要它持有的资源,因此该进程本身不会参与死锁。
【讨论】:
以上是关于死锁检测算法(伪代码)的主要内容,如果未能解决你的问题,请参考以下文章