死锁

214 阅读3分钟

简介

死锁

如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,则该进程集合就是死锁的。

资源

着时间的推移,必须能获得、使用以及释放的任何东西。 资源分为两类:

  • 可抢占资源,可以从拥有它的进程中抢占而不会产生任何副作用。如内存
  • 不可抢占资源,在不引起相关计算失败的情况下,无法把它从占有它的进程处抢占过来。如蓝光刻录机。 使用一个资源所需要的时间顺序可以用抽象的形式表示:请求资源、使用资源和释放资源。

资源死锁的必要条件

  • 互斥条件:每个资源要么已经分配了一个进程,要么就是可用的
  • 占有和等待条件:已经得到了某个资源的进程可以再请求新的资源
  • 不可抢占条件:已经分配给一个进程的资源不能强制被抢占,只能被占有的进程显式释放
  • 环路等待条件:死锁发生时,系统中一定有由两个或两个以上的进程组成的一条环路,该环路中的每个进程都在等待着下一个进程所占有的资源。

处理死锁的策略

  • 忽略该问题。鸵鸟算法,如果死锁发生频率较低,大多数工程师不会以性能损失和可用性的代价去防止死锁。
  • 检测死锁并恢复
  • 仔细对资源进行分配,动态避免死锁
  • 通过破坏引起死锁的四个必要条件之一,防止死锁产生。

死锁检测和恢复

系统并不试图阻止死锁的产生,而是允许死锁发生,当检测到死锁发生后采取措施进行恢复。

死锁恢复方法

  • 利用抢占恢复,临时将某个资源从它的当前所有者那里转移给另一个进程,一般需要人工干预。
  • 利用回滚恢复,周期性地对进程进行检查点检查。一旦检测到死锁,为了进行恢复,将进行复位到一个它还没有取得所需的资源的状态,接着把该资源分配给一个死锁进程。
  • 通过杀死进程恢复,杀掉死锁环中的一个进程,或者杀掉死锁环外的一个进程,以打破死循环。

死锁预防

死锁避免在本质上来说是不可能的,因为它需要获知未来的请求。

  • 破坏互斥条件
  • 破坏占有并等待条件(所有进程在开始执行前请求所需全部资源)
  • 破坏不可抢占条件
  • 破坏环路等待条件
    • 保证每一个进程在任何时刻只能占用一个资源
    • 所有资源请求必须按照资源编号的顺序提出