饥饿和死锁


饥饿和死锁是当需要资源的进程被延迟很长时间时发生的情况。但是它们是截然不同的概念。

关于饥饿和死锁的详细信息如下所示:

饥饿

如果一个进程被无限期地推迟,就会发生饥饿。如果进程需要一个执行所需的资源,但从未分配给它,或者由于某种原因从未为该进程提供处理器,则可能会发生这种情况。

饥饿的一些常见原因如下:

  • 如果由于资源分配决策错误,一个进程从未获得执行所需的资源,则可能发生饥饿。
  • 如果高优先级进程持续独占处理器,则低优先级进程可能永远等待。
  • 如果资源不足以满足每个进程的需求,则可能发生饥饿。
  • 如果使用随机进程选择,则由于未被选中,一个进程可能会等待很长时间。

可以在系统中实现的一些用于处理饥饿的解决方案如下:

  • 可以使用独立的管理器来分配资源。此资源管理器公平地分配资源并试图避免饥饿。
  • 应避免随机选择进程进行资源分配或处理器分配,因为它们会助长饥饿。
  • 资源分配的优先级方案应包含诸如老化之类的概念,其中进程的优先级随着其等待时间的增加而增加。这可以避免饥饿。

死锁

当两个或多个进程需要某些资源来完成其执行,而这些资源被其他进程持有时,就会发生死锁。

Deadlock in OS

在上图中,进程 1 持有资源 1 并需要获取资源 2。同样,进程 2 持有资源 2 并需要获取资源 1。进程 1 和进程 2 处于死锁状态,因为它们各自都需要对方的资源才能完成其执行,但它们都不愿意释放其资源。

只有当四个 Coffman 条件都成立时,才会发生死锁。这些条件不一定是互斥的。它们如下所示:

  • 互斥

    互斥意味着应该有一个资源,一次只能由一个进程持有。这意味着资源应该是不可共享的。

  • 持有并等待

    一个进程可以持有多个资源,并且仍然可以向持有这些资源的其他进程请求更多资源。

  • 不可抢占

    资源不能被强制从进程中抢占。进程只能自愿释放资源。

  • 循环等待

    一个进程正在等待第二个进程持有的资源,而第二个进程正在等待第三个进程持有的资源,依此类推,直到最后一个进程正在等待第一个进程持有的资源。这形成了一个循环链。

更新于:2020年1月31日

6K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告