饥饿和死锁(操作系统)

8

我知道死锁和饥饿的定义,但是以下几点仍然让我感到困惑(无法确定哪一个是正确的)

  • a) 死锁是饥饿的一种极端情况。
  • b) 死锁和饥饿是两个不相关的概念。
  • c) 饥饿只会导致死锁。
3个回答

13

死锁(Deadlock):指的是所有进程都无法访问资源,因为每个进程都在等待其他进程,并且存在一个循环。

饥饿(Starvation):是指低优先级进程无法访问所需的资源,因为高优先级进程正在访问这些资源。整个进程系统在这种情况下没有停止。


由于只有低优先级进程无法访问资源,而在死锁中,没有一个进程可以访问它们需要的资源,因此死锁是饥饿的一种极端情况,其极端度标准是无法访问资源的进程总数。


死锁和饥饿之间存在关联,因为两者都是进程无法访问资源的情况。


饥饿不会导致死锁,因为一个饥饿的低优先级进程一直等待,而其他高优先级进程则继续运行完成。

传言说,当MIT在1973年关闭IBM 7094时,他们发现一个1967年提交但尚未运行的低优先级进程。


在Abraham Silberschatz,Peter B. Galvin,Greg Gagne的《操作系统概念》一书中提到


2
我们可以说如果存在死锁,那么一定存在饥饿吗? - Mudit Kumar Saini
2
@MuditKumarSaini:当然可以!饥饿——低优先级进程无法获得所需资源。死锁——没有进程获得所需资源。 - displayName

0

死锁:如果两个线程互相等待并且永远等待下去,这种无限等待就被称为死锁。线程长时间等待而等待永远不会结束也被称为死锁。 饥饿:线程长时间等待,但在某个特定点等待结束,这被称为饥饿。 例如,低优先级线程必须等待所有高优先级线程完成,这可能是长时间的等待,但在某个特定点结束,这就是饥饿。


0

嗯,a是正确的。

饥饿可能会导致软锁定或次优性能(调度)。

由于死锁是饥饿的特例(所有竞争者都缺乏资源),它们并不无关。


谢谢回答。 我也这么认为... 但是 'c' 被给定为答案 如果我将 'c' 视为逻辑推理,那么 'c' 是选项 'a' 的超集 我使用选项 'c' 的维恩图表示来做到这一点。 - Mudit Kumar Saini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接