死锁
当某进程提出资源申请后使得系统中一些进程处于无休止的阻塞状态,再无外力作用下永远不能再继续前进。
原因:
- 对系统资源的竞争
- 进程的推进顺序非法
- 必要条件
条件:
- 互斥条件:某段时间内某资源只能有一个进程使用
- 不剥夺条件:资源在未使用完前,不能被强占,由使用进程释放
- 请求和保持条件:进程因请求资源而阻塞时,对已分配给他的资源保持不释放
- 循环等待条件:发生死锁时,有向图必构成环路
处理策略:
-
预防
- 破坏不剥夺条件:在允许进程动态申请资源的情况下规定,一个进程在申请新的资源不能立即得到满足而变为等待状态之前,必须释放已占有的全部资源,若需要再重新申请
- 破坏请求和保持条件:要求每个进程在运行前必须一次性申请它所需要的全部资源,且仅当所要资源均可满足时才给予一次性分配
- 破坏循环等待条件:采用资源有序分配法,把系统中所有资源编号,进程在申请资源时必须严格按照资源编号的递增次序进行,否则系统不予分配。
-
避免
-
银行家算法:max=allocation+need
例:假定系统有4个进程P1P2P3P4,3种类型的资源R1R2R3分别9、3、6个,在T0时刻分配情况如下,问- (1)T0是否安全
- (2)T0时刻后P2发出资源请求Request2(1,0,1)系统能否把资源分配给他
- (3)在P2申请资源后若P1发出资源请求Request1(1,0,1)系统能否分配资源给他
- (4)在P1申请资源后,若P3发出资源请求Request3(0,0,1)系统能否将资源分配给他
进程 max allocation need available — R1 R2 R3 R1 R2 R3 R1 R2 R3 R1 R2 R3 P1 3 2 2 1 0 0 2 2 2 1 1 2 P2 6 1 3 5 1 1 1 0 2 P3 3 1 4 2 1 1 1 0 3 P4 4 2 2 0 0 2 4 2 0 看available能满足哪个进程need就执行它
(1)
work即当前剩余可工作资源
work+available即当前进程执行完释放后剩余可工作资源进程 work allocation need work+available — R1 R2 R3 R1 R2 R3 R1 R2 R3 R1 R2 R3 P2 1 1 2 5 1 1 1 0 2 6 2 3 P1 6 2 3 1 0 0 2 2 2 7 2 3 P3 7 2 3 2 1 1 1 0 3 9 3 4 P4 9 3 4 0 0 2 4 2 0 9 3 6 存在一个安全序列P2P1P3P4故T0安全
(2)
Request2(101)<need(102)
Request2(101)<available(112)进程 max allocation need available — R1 R2 R3 R1 R2 R3 R1 R2 R3 R1 R2 R3 P1 3 2 2 1 0 0 2 2 2 0 1 1 P2 6 1 3 6 1 2 0 0 1 P3 3 1 4 2 1 1 1 0 3 P4 4 2 2 0 0 2 4 2 0 进程 work allocation need work+available — R1 R2 R3 R1 R2 R3 R1 R2 R3 R1 R2 R3 P2 0 1 1 6 1 2 0 0 1 6 2 3 P1 6 2 3 1 0 0 2 2 2 7 2 3 P3 7 2 3 2 1 1 1 0 3 9 3 4 P4 9 3 4 0 0 2 4 2 0 9 3 6 存在一个安全序列P2P1P3P4
(3)
Request1(101)<need(222)
Request1(101)>available(011)
可用资源不足,不能分配
(4)
Request3(001)<need(103)
Request3(001)<available(011)进程 max allocation need available — R1 R2 R3 R1 R2 R3 R1 R2 R3 R1 R2 R3 P1 3 2 2 1 0 0 2 2 2 0 1 0 P2 6 1 3 6 1 2 0 0 1 P3 3 1 4 2 1 2 1 0 2 P4 4 2 2 0 0 2 4 2 0 010不能满足任何进程需求,故进程会进入不安全状态,不能分配
-
-
检测并恢复
- 死锁的检测:资源分配图不可完全化简(死锁定理)
- 资源状态图:用圆圈代表一个进程,方框代表一类资源,由于一种类型的资源可能有多个,方框中的一个小圆圈代表一类资源中的一个资源,资源请求边由进程指向方框中的一个资源,分配边始于方框中的一个资源
- 资源状态图化简:根据图找空闲的资源为起点执行,一直到请求/分配箭头完全消失
- 死锁的解除:
- 资源剥夺法:从其他进程剥夺足够数量的资源给死锁进程
- 撤销进程法:撤销全部死锁进程
例题:系统中有数量为M的独占性资源,有N个进程竞争该类资源,各进程对该类资源的最大需求量为W,死锁条件为
N(W-1)+1<=M
例题:R1R2两类资源各2,1个单位被P1P2两个进程共享,P1P2以以下顺序申请使用资源,问可能的死锁点
申请R1申请R2申请R1释放R1释放R2释放R1 - 死锁的检测:资源分配图不可完全化简(死锁定理)
-
忽略