持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情
今天就要结束处理机调度这一板块了,最重要的知识点在前面,这一篇了解掌握即可
死锁检测
- 允许死锁发生,操作系统不断监视系统进展情况,判断死锁是否发生
- 一旦死锁发生则采取专门的措施,解除死锁并以最小的代价恢复操作系统运行
检测时机
- 定时检测
- 当进程阻塞时检测死锁(缺点是系统的开销大)
- 系统资源利用率下降时检测死锁
检测方法:资源分配图法
- 一个二元组G=<V,E>
- V:结点集,分为P,R两部分 P={p1,p2,...,pn} R={r1,r2,...,rn}
- E:边的集合,他的元素是有序二元组<pi,rj>或者<rj,pi>
- 系统由若干类资源构成
- 一类资源称为一个资源类
- 每个资源类包含若干个同种资源,称为资源实例
结点的表示方法
- 资源类(资源的不同类型):用方框表示
- 资源实例(存在于每个资源类中);用方框中的黑圆点(圈)表示
- 进程:用圆圈中加进程名
边集中各边的含义
- 分配边 资源实例->进程的一条有向边 <rj,pi>
- 申请边 进程->资源类的一条有向边 <pi,rj>
死锁定理
- 如果资源分配图中没有环路,则系统中没有死锁,如果图中存在环路则系统可能存在死锁
- 如果每个资源类中只包含一个资源实例,则环路是死锁存在的充分必要条件。
资源分配图简化
- 找一个非孤立、只有分配边的进程结点,去掉分配边,将其变为孤立结点;
- 再把相应的资源分配给一个等待该资源的进程,即将某进程的申请边变为分配边;
- 重复以上步骤,若所有进程都可成为孤立结点,称该图是可完全简化的,否则称该图是不可完全简化的
死锁状态的充分条件是:资源分配图是不可完全简化的
有环有死锁
有环无死锁
死锁的解除
重要的是以最小的代价解除死锁,恢复系统运行。方法如下:
- 撤消所有的死锁进程
- 连续撤消死锁进程直至不再存在死锁
- 连续剥夺资源直到不再存在死锁
- 把每个死锁进程备份到前面定义的某个检查点,并重新启动所有进程
关于处理机调度和死锁的相关内容就是这些了,还是要打好基础,操作系统前后还是比较有关联,死锁是经常提到的一环,所以是很重要的。