死锁
2017-04-07 本文已影响2人
大海孤了岛
出现死锁的必要条件
- 互斥:任何时刻只能有一个进程使用一个资源实例
- 持有并等待:进程保持至少一个资源,并正在等等获取其他进程持有的资源
- 非抢占:资源只能在进程使用后自愿释放
- 循环等待:出现环形等待
死锁的处理方法
- ** 死锁预防:确保系统永远不会进入死锁状态**
预防是采用某种策略,限制并发进程对资源的请求,使系统在任何时刻都不满足死锁的必要条件
a. 互斥:
- 把互斥的共享资源封装为可同时访问
b. 持有并等待:
- 进程请求资源时,要求它不持有任何其他资源
- 仅允许进程在开始执行时,一次请求所有需要的资源
- 资源利用率低
c. 非抢占
- 如进程请求不能立即分配的资源,则释放已占有资源
- 只在能够同时获得所有需要资源时,才执行分配操作
d. 循环等待
-
对资源排序,要求进程按顺序请求资源
-
死锁避免:在使用前进行判断,只允许不会出现死锁的进程请求资源
利用额外的先验信息,在分配资源时判断是否会出现死锁,只在不会死锁时分配资源
-
a.要求进程声明需要资源的最大数目
-
b. 限定提供与分配的资源数量,确保满足进程的最大需求
-
c. 动态检查资源分配状态,确保不会出现环形等待
-
死锁检测和恢复:在检测到运行系统进入死锁状态后,进行恢复
-
通常操作系统会忽略死锁