死锁(Deadlock)是指多个进程因竞争资源而造成的一种互相等待的僵局。

死锁产生的原因

  • 系统资源的竞争
  • 进程推进顺序非法

死锁产生的必要条件(缺一不可)

  • 互斥条件
  • 不剥夺条件
  • 请求并保持条件
  • 循环等待条件

死锁与「饥饿」的区别

  • 进入饥饿状态的进程可以只有一个,而死锁状态的进程必须大于等于两个
  • 饥饿状态的进程可以是就绪进程(如静态优先权调度时的低优先权进程),而死锁状态的进程必定是阻塞进程

死锁的处理策略

  • 死锁预防
  • 避免死锁
  • 死锁的检测及解除

死锁预防(静态策略)

  • 破坏互斥条件
  • 破坏不剥夺条件
  • 破坏请求并保持条件:预先静态分配方法,一次申请所有资源
  • 破坏循环等待条件:顺序资源分配法

死锁避免(动态策略)

系统安全状态:并非所有的不安全状态都是死锁状态,但处于不安全状态就有死锁的可能。

银行家算法

数据结构:

  • 最大需求矩阵 Max
  • 分配矩阵 Allocation
  • 需求矩阵 Need:Need = Max - Allocation

安全性算法使用工作向量 Work,逐个寻找能完成的进程并回收其资源,若能找出一个安全序列则系统处于安全状态。

死锁检测和解除

  • 资源分配图
  • 死锁定理:系统状态为死锁的充要条件是资源分配图不可完全简化
  • 死锁解除方法:
    • 资源剥夺法
    • 撤销进程法
    • 进程回退法