我知道死锁和饥饿的定义,但是以下几点仍然让我感到困惑(无法确定哪一个是正确的)
- a) 死锁是饥饿的一种极端情况。
- b) 死锁和饥饿是两个不相关的概念。
- c) 饥饿只会导致死锁。
我知道死锁和饥饿的定义,但是以下几点仍然让我感到困惑(无法确定哪一个是正确的)
死锁(Deadlock):指的是所有进程都无法访问资源,因为每个进程都在等待其他进程,并且存在一个循环。
饥饿(Starvation):是指低优先级进程无法访问所需的资源,因为高优先级进程正在访问这些资源。整个进程系统在这种情况下没有停止。
由于只有低优先级进程无法访问资源,而在死锁中,没有一个进程可以访问它们需要的资源,因此死锁是饥饿的一种极端情况,其极端度标准是无法访问资源的进程总数。
死锁和饥饿之间存在关联,因为两者都是进程无法访问资源的情况。
饥饿不会导致死锁,因为一个饥饿的低优先级进程一直等待,而其他高优先级进程则继续运行完成。
传言说,当MIT在1973年关闭IBM 7094时,他们发现一个1967年提交但尚未运行的低优先级进程。‡
‡在Abraham Silberschatz,Peter B. Galvin,Greg Gagne的《操作系统概念》一书中提到
死锁:如果两个线程互相等待并且永远等待下去,这种无限等待就被称为死锁。线程长时间等待而等待永远不会结束也被称为死锁。 饥饿:线程长时间等待,但在某个特定点等待结束,这被称为饥饿。 例如,低优先级线程必须等待所有高优先级线程完成,这可能是长时间的等待,但在某个特定点结束,这就是饥饿。
嗯,a是正确的。
饥饿可能会导致软锁定或次优性能(调度)。
由于死锁是饥饿的特例(所有竞争者都缺乏资源),它们并不无关。