7 死锁的检测和解除
7.1 死锁检测
- 允许死锁发生,操作系统不断监视系统进展情况,判断死锁是否发生
- 一旦死锁发生则采取专门的措施,解除死锁并以最小的代价恢复操作系统运行
7.1.1 检测时机
- 定时检测
- 当进程阻塞时检测死锁(其缺点是系统的开销大)
- 系统资源利用率下降时检测死锁
7.1.2 检测方法(资源分配图法)
-
二元组G=
<V,E>
V:结点集,分为P,R两部分
P={p1,p2,…,pn}
R={r1,r2,…,rm}E:边的集合,其元素为有序二元组
<pi,rj> 或 <rj,pi>
图片叙述
- 系统由若干类资源构成
- 一类资源称为一个资源类
- 每个资源类包含若干个同种资源,称为资源实例
-
结点的表示法:
- 资源类(资源的不同类型) 用方框表示
- 资源实例(存在于每个资源类中) ,用方框中的黑圆点(圈)表示
- 进程 用圆圈中加进程名表示
-
边集中各边的含义:
- 分配边 资源实例–>进程 的一条有向边
<rj,pi>
- 申请边 进程–>资源类 的一条有向边
<pi,rj>
- 分配边 资源实例–>进程 的一条有向边
死锁定理:
- 如果资源分配图中没有环路,则系统中没有死锁,如果图中存在环路则系统中可能存在死锁。
- 如果每个资源类中只包含一个资源实例,则环路是死锁存在的充分必要条件。
资源分配图化简
- 找一个非孤立、只有分配边的进程结点,去掉分配边,将其变为孤立结点;
- 再把相应的资源分配给一个等待该资源的进程,即将某进程的申请边变为分配边;
- 重复以上步骤,若所有进程都可成为孤立结点,称该图是可完全简化的,否则称该图是不可完全简化的。
死锁状态的充分条件是:资源分配图是不可完全简化的
图例:
有环有死锁
有环无死锁
7.2 死锁的解除
重要的是以最小的代价解除死锁,恢复系统运行。方法如下:
- 撤消所有的死锁进程
- 连续撤消死锁进程直至不再存在死锁
- 连续剥夺资源直到不再存在死锁
- 把每个死锁进程备份到前面定义的某个检查点,并重新启动所有进程