deadlock characteristics
necessary conditions
4个条件同时满足,引起死锁:
-
mutual exclusion
至少有一个资源处于非共享模式,一次只能有一个进程使用
-
hold and wait
占有至少一个资源,等待另一为其他进程所占资源
-
no preemption
资源不能被抢占
-
circular wait
resource-allocation graph
request edge : Pi->Rj
assignment edge : Rj->Pi
申请边只用指向矩形,但分配边必须从某个原点开始
资源分配图有环是死锁的必要条件。若每类资源只有一个实例,含环是充分必要条件。若同类资源数>1,不一定有死锁。
methods for handling deadlocks
1.预防或避免死锁
2.允许进入死锁,检测并恢复
3.忽视这个问题(为多数OS所用)
deadlock prevention: 确保至少一个必要条件不成立,通过限制如何申请资源
deadlock avoidance: 事先得到进程申请和使用资源的额外信息,系统可确定对于一个申请,进程是否等待(申请允许还是延迟),考虑可用、已分配、进程将来申请和释放的资源
deadlock prevention
确保4个必要条件至少1个不成立
-
mutual exclusion
通常不通过这个条件…
-
hold and wait
-
每个进程在执行前申请并获得所有资源
-
进程在没有资源时才可申请资源(申请更多资源前,先释放已分配的资源)
缺点:1.资源利用率低 2.starvation
-
-
no preemption
如果一个进程占有资源并申请另一个不能立即分配的资源,其现在已分配的资源都可被抢占(被隐式释放)。
进程申请资源时,不可用也不被其他等待进程占有时,等待
常应用于状态可以保存恢复的资源,如CPU寄存器和内存,不适用于打印机和磁带驱动器等。
-
circular wait
对所有资源类型进行完全排序。每个进程只按递增顺序申请资源。(只能申请编号比它大的)
deadlock avoidance
死锁避免比死锁预防要求低
deadlock prevention 低设备使用率和吞吐率
a system is in a safe state only if there exists a safe sequence
resource-allocation-graph algorithm
增加claim edge(需求边),虚线
当进程Pi开始执行时,所有需求边必须先处于资源分配图。(可放宽为只要与Pi有关的需求边)
只有在申请边Pi->Rj变成分配边Rj->Pi,而不会出现环时,才允许申请。环存在是unsafe state
cycle-detection algorithm
banker’s algorithm
自己看书做题去 P247
deadlock detection
不采用prevention和avoidance,应提供检查是否出现死锁&恢复算法。
每种资源类型单个实例
wait-for graph: Pi等待Pj释放一个Pi需要的资源
Pi->Pj iff 资源分配图中 Pi->Rq, Rq->Pj
图中有环 <-> 死锁
每种资源类型多个实例
detection algorithm
资源图消边法
PPT P45 + 看橘
recovery from deadlock
process termination
不管哪种进程终止方法,系统都会收回分配给终止进程的所有资源
- 终止所有死锁进程
- 一次终止一个,调用死锁检测,直到取消死锁循环
resource preemption
select a victim: which resources and which processes are to be preempted 代价因素 cost factors
rollback: 抢占资源后对进程做什么安排 roll back to some safe state. simplest: total rollback
starvation: 如何保证资源总是从一个进程抢占 在代价因素中加上回滚次数
最后修改于 2020-02-28