死锁
死锁
多个进程因循环等待资源而造成无法执行的现象
死锁产生的必要条件
- 互斥使用
- 某一时间段内的某资源仅为一个进程所占有,其他进程请求该资源只能等待
- 不可抢占
- 资源不能被强行夺走,只能由拥有该资源的进程自行释放
- 请求和保持
- 进程至少占有一个资源,又提出了新的资源请求
- 循环等待
- 在资源分配图中存在一个环路
死锁处理方法
死锁预防
破坏死锁的必要条件
- 破坏互斥使用
- 资源的固有特性,通常无法破除
- 破除不可抢占
- 如果一个进程占有资源并申请另一个不能立即分配的资源,那么已分配资源就可被抢占
- 只对状态能保存和恢复的资源(如CPU,内存空间)有效,对打印机等外设不适用
- 破除请求和保持
- 在进程执行前,一次性申请所有需要的资源
- 破除循环等待
- 对资源类型排序,资源申请必须按序进行
死锁避免
- 判断此次请求是否造成死锁,若会造成死锁,则拒绝该请求
- 安全状态:系统中的所有进程存在一个可完成的执行序列P1, P2, …, Pn,则称系统处于安全状态
- 安全序列:上面的执行序列P1, P2, …, Pn
- 银行家算法
- 可利用资源矩阵Available
- 最大需求矩阵Max
- 分配矩阵Allocation
- 需求矩阵Need
- 工作向量work
死锁检测
- 只要可用资源足够,则分配,发现问题再处理
- 资源分配图
- 死锁定理
死锁恢复
- 资源剥夺法
- 挂起某些死锁进程,并抢占它们的资源
- 撤销进程法
- 强制撤销部分甚至全部死锁进程,并剥夺这些进程的资源
- 进程回退法
- 让一个进程回退到足以避免死锁的地步,进程回退时自愿释放资源而非被剥夺
死锁忽略
鸵鸟策略:出现死锁的概率很小,并且出现之后处理死锁会花费很大的代价,还不如不做处理,OS中这种置之不理的策略称之为鸵鸟策略,是平衡性能和复杂性而选择的一种方法
- 对死锁不在意,出现则重启OS
- 大多数操作系统使用它
This post is licensed under CC BY 4.0 by the author.