死锁检测算法(伪代码)

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 步中标记的进程可能持有资源,并且可能在等待死锁进程时被阻塞,但可能没有死锁进程需要它持有的资源,因此该进程本身不会参与死锁。

【讨论】:

以上是关于死锁检测算法(伪代码)的主要内容,如果未能解决你的问题,请参考以下文章

SPFA算法的伪代码

Bellman-Ford算法的伪代码

论文伪代码怎么写

算法中的伪代码语法格式 - 算法实现表达利器

A*寻路算法伪代码

什么是伪代码?