参考资料: 《现代操作系统 3th edtion》原书第六章 死锁
在 xmind 上记录
一、资源
定义
- 需要排他性使用的对象
- 资源就是随着时间的推移,必须能获得、使用以及释放的任何东西
分类
-
可抢占资源
- 可以从拥有它的进程中抢占而不会产生任何副作用,比如: 存储器
-
不可抢占资源
- 指在不引起相关的计算失败的情况下,无法把它从占有它的进程处抢占过来,比如: CD刻录机
使用
- 请求资源
- 使用资源
- 释放资源
二、资源死锁
定义: 进程的数量, 以及占有或者请求的资源数量和种类都是无关紧要的
产生的必要条件
- 互斥条件。每个资源要么已经分配给了一个进程,要么就是可用的
- 占有和等待条件。已经得到了某个资源的进程可以再请求新的资源
- 可抢占条件。已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放
- 环路等待条件。死锁发生时,系统中一定有由两个或两个以上的进程组成的一条环路,该环路中的每个进程都在等待着下一个进程所占有的资源
三、解决策略
1.鸵鸟算法: 忽略这个问题
- 从实现代价、发生频率考虑, 忽略也许并不是不能接受
2.检测死锁并恢复。让死锁发生,检测它们是否发生,一旦发生死锁,采取行动解决问题
-
每种类型一个资源
- 检查资源图中有没有环
-
每种类型多个资源
- 使用矩阵、向量的算法
-
如何恢复
-
利用抢占
- 缺点: 不太好操作
-
利用回滚
- 需要定时备份
-
杀死进程
- 最好杀死可以从头开始重新运行而且不会带来副作用的进程
-
3.仔细对资源进行分配,动态地避免死锁
(本质上不可能)
-
资源轨迹图
-
安全状态
- 指存在某种调度次序能够使得每一个进程运行完毕
-
单个资源的银行家算法
- 对每一个请求进行检查,检查这一请求是否会达到安全状态
-
多个资源的银行家算法
- 与单个资源的情况原理是类似的
4.通过破坏引起死锁的四个必要条件之一,防止死锁的产生
-
互斥
- 使用假脱机技术
-
占有和等待
- 一开始就请求全部资源
-
不可抢占
- 抢占资源
-
环路等待
- 资源按序编号
注1: 死锁的规范定义: 如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁的
注2: 书中指出银行家算法有理论意义,但是缺乏实践价值
注3: 上面提到的判断是否存在死锁、安全状态的判断应该是本节的重点,但是不太好总结,建议阅读相关书籍
XMind: ZEN - Trial Version