死锁的检测和解除
#策略特点
允许死锁发生
死锁的检测和解除
死锁检测:用与检测系统状态,确认是否发生死锁
死锁解除:认定系统已经发生死锁,利用该算法将系统从死锁中解脱出来
#死锁的检测
为了确认系统是否发生了死锁,必须:
1.提供某种数据结构来保存资源的请求和分配信息
2.提供一种算法,利用上述信息检测系统是否已经进入死锁
*数据结构:资源分配图*
两种节点:
进程节点:对应一个进程
资源节点:对应一类资源,一类资源可能有多个
两种边:
进程节点-->资源节点:表示进程想申请几个资源(每条边代表一个)
资源节点-->进程节点:表示已经为进程分配了几个资源(每条边代表一个)
孩子们,看看数据结构第六章图
尝试对上图进行消边操作
P1能向R2请求到资源,故消掉该边
P1能够全部运行,返回所有资源
R1资源足够,P2也成功请求到资源,故消掉该请求边
P2能全部运行,返回所有资源
故,寻到安全序列,系统未发生死锁
又称该图是*可完全简化的*,此时一定没有发生死锁
若是发生死锁,则看下图
自己分析一遍便是
无法消除所有边,此时边发生了死锁
#死锁的解除
一旦检测出死锁发生,就应该立刻解除死锁
并非所有进程都是死锁状态,使用上述死锁检测简化资源分配图后,还连着边的进程就是死锁进程
解除死锁的方法:
1.**资源剥夺法
挂起(暂时放入外存)某些死锁进程,抢占其资源,并分配这些资源给其他进程,但有可能导致挂起的进程产生饥饿
2.撤销进程法(终止进程法)
强制撤销部分,甚至全部死锁进程,并剥夺这些进程的资源。
虽然简单,但可能代价巨大
3.进程回退法
让一个或多个死锁进程回退到足以避免死锁的地步
要求系统记录进程历史信息,设置还原点
不想写了,整个图,今天打了好多字TAT
