死锁的检测和解除

#策略特点


  • 允许死锁发生
  • 死锁的检测和解除
  • 死锁检测:用与检测系统状态,确认是否发生死锁
  • 死锁解除:认定系统已经发生死锁,利用该算法将系统从死锁中解脱出来
  • #死锁的检测


  • 为了确认系统是否发生了死锁,必须:
  • 1.提供某种数据结构来保存资源的请求和分配信息
  • 2.提供一种算法,利用上述信息检测系统是否已经进入死锁
  • *数据结构:资源分配图*
  • 两种节点:
  • 进程节点:对应一个进程
  • 资源节点:对应一类资源,一类资源可能有多个
  • 两种边:
  • 进程节点-->资源节点:表示进程想申请几个资源(每条边代表一个)
  • 资源节点-->进程节点:表示已经为进程分配了几个资源(每条边代表一个)
  • Pasted image 20260707202920.png
  • 孩子们,看看数据结构第六章图
  • 尝试对上图进行消边操作
  • P1能向R2请求到资源,故消掉该边
  • P1能够全部运行,返回所有资源
  • R1资源足够,P2也成功请求到资源,故消掉该请求边
  • P2能全部运行,返回所有资源
  • 故,寻到安全序列,系统未发生死锁
  • 又称该图是*可完全简化的*,此时一定没有发生死锁
  • 若是发生死锁,则看下图
  • Pasted image 20260707204340.png
  • 自己分析一遍便是
  • 无法消除所有边,此时边发生了死锁
  • #死锁的解除


  • 一旦检测出死锁发生,就应该立刻解除死锁
  • 并非所有进程都是死锁状态,使用上述死锁检测简化资源分配图后,还连着边的进程就是死锁进程
  • 解除死锁的方法:
  • 1.**资源剥夺法
  • 挂起(暂时放入外存)某些死锁进程,抢占其资源,并分配这些资源给其他进程,但有可能导致挂起的进程产生饥饿
  • 2.撤销进程法(终止进程法)
  • 强制撤销部分,甚至全部死锁进程,并剥夺这些进程的资源。
  • 虽然简单,但可能代价巨大
  • 3.进程回退法
  • 让一个或多个死锁进程回退到足以避免死锁的地步
  • 要求系统记录进程历史信息,设置还原点
  • 不想写了,整个图,今天打了好多字TAT
  • Pasted image 20260707205358.png