【发布时间】: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,你没有在任何地方定义。 -
一个不需要分配任何资源的进程当然可以完成(即不能成为死锁的一部分)。
标签: algorithm operating-system deadlock