0%

死锁

死锁基本概念

定义:多个进程由于竞争资源而造成阻塞现象,若无外力作用,这些进程将无法继续前进
相似概念:饥饿: 等待时间过长以至于给进程推进和响应带来明显影响,但”饿而不死”
死锁产生原因:1.系统资源的竞争 2. 推进顺序非法
产生的必要条件

互斥条件:共享资源排他性访问
不剥夺条件:访问时该共享资源不会被剥夺
请求并保持条件:保持当前资源时请求另一资源
循环等待条件:存在共享资源的循环等待链

死锁的预防

1.破坏互斥条件
- 将只能互斥访问的资源改为同时共享访问
- 将独占锁改为共享锁
- 不是所有资源都能改成共享的

2.破坏剥夺条件
- 请求新资源无法满足时必须释放已有资源
- 由os协助强制剥夺某进程的资源
- 实现复杂代价高,此操作过多可能导致原进程无法推进

3.破坏请求等待条件
- 3.1 进程开始时一次性申请所需要的所有资源:资源浪费,进程饥饿
- 3.2 阶段性请求和释放资源:

4.破坏循环等等
- 对所有资源进行排序,按序号请求资源,请求时先低后高,释放时先高后低
- 对资源的编号相对稳定,限制了新设备增加
- 进程使用资源的顺序可能与系统编号的顺序不同,限制了用户编程

死锁避免

核心:安全性算法
系统安全状态

安全状态不一定会出现死锁
不安全状态可能会出现死锁

银行家算法

系统预判进程是否导致不安全状态
是则拒绝请求,否则答应请求

死锁检测

1.需要一种数据结构,保存相关资源请求和分配信息-资源分配图(G=(N,E))
2.需要一种算法,利用这些信息检测是否形成死锁-死锁定理(死锁状态充分条件)

资源分配图

两种资源
两种节点

死锁定理

当且仅当此状态下资源分配图是不可完全简化的
简化的过程类似于拓扑排序算法

死锁解除

1.资源剥夺

挂起死锁进程
剥夺其资源
将资源分配给其他(死锁)进程

2.撤销进程
3.进程回退

回退到避免死锁的地点
需要记录进程历史信息,设置回退点

-------------本文结束感谢您的阅读-------------