Alex_McAvoy

想要成为渔夫的猎手

死锁检测与死锁解除

【死锁检测】

死锁检测通过检测系统状态,以确定系统中是否发生死锁

为了能对系统中是否发生死锁进行检测,在系统中,必须满足:

  • 保存有关资源的请求与分配信息
  • 提供一种利用信息检测系统是否进入死锁的算法

资源分配图

资源分配图,是由点集 $V$ 与边集 $E$ 组成的一个图 $G(V,E)$,其定义为:

  • 将 $V$ 分为两个互斥的子集,一组是用圆圈表示的进程结点 $P$,一组是方框表示的资源结点 $R$
  • 凡属于 $E$ 中的一个边 $e$,都连接着 $P$ 中的一个结点与 $R$ 中的一个结点,$e= < P_i,R_i > $ 是资源请求边,$e= < R_i, P_i >$ 是资源分配边

死锁定理

利用资源分配图的简化来检测死锁,流程如下:

  1. 在资源分配图中找出一个既不阻塞又非独立的进程结点 $P_i$,在顺利的情况下运行完毕,释放其占有的全部资源
  2. 由于释放了资源,这样能使其它被阻塞的进程获得资源继续运行,从而消去了 $P_i$ 的边
  3. 经过一系列简化后,若能消去图中所有边,使结点都孤立,称该图是可完全简化的

因此,死锁定理内容为:当且仅当 $S$ 状态的资源分配图是不可完全简化的,$S$ 状态即为死锁状态

【死锁解除】

若利用死锁检测算法检测出系统中已发生死锁,那么应立即采取相应的措施,以解除死锁

常采用的解除死锁方法有三种:

  • 资源剥夺法:挂起某些死锁进程,并抢占其资源分配给其他死锁进程,需要防止被挂起的进程饥饿
  • 撤销进程法:强制终止部分甚至全部死锁进程,并剥夺资源,实现简单,但会使前一段工作失效
  • 进程回退法:让一或多个进程退回到可避免死锁的地步,要求系统记录进程历史信息,设置还原点
感谢您对我的支持,让我继续努力分享有用的技术与知识点!