当前位置:文档之家› 第3章2死锁

第3章2死锁


指进程已获得的资源,在未使用完之前,不能被其 它进程强行抢占,只能在使用完时由自己释放。 指发生死锁时,资源分配图(resource allocation graph)中存在有向封闭环路。如下图所示。

循路等待条件(Circular wait)

请求边 资源结点
P1 S3 S1
分配边 进程结点
P3 S2
Need A ቤተ መጻሕፍቲ ባይዱ C
2 产生死锁的原因(P57)

(1)竞争临界资源(即系统资源不足)
当系统中供多个进程共享的临界资源(如打印机、公用 队列等)的数目不能满足诸进程的需要时,会引起诸进程对 资源的竞争而产生死锁。这个原因在多道程序系统中是无法
解除的。

(2)进程推进顺序不当
进程在运行过程中,请求和释放资源的顺序不当,也同 样会导致死锁的产生。这个原因在多道程序系统中是可以解 除的。
安全状态的例子:
例2.8 假定系统中三个进程P1、P2和P3共享12台磁带机。P1总共要求10 台,P2要4台,P3要9台。设在T0时刻,进程P1、P2和P3已经获得5台、 2台和2台,还有3台空闲没有分配(如下图所示)。问T0时刻安全吗?
进程 P1 P2 P3
最大需求 10 4 9
已分配 5 2 2
个进程分配其所需的资源,直至最大需求,使每个进程均可顺利完成。则
称此时系统的状态为安全状态,称这样的一个进程序列<P1,P2,…,Pn>为 安全序列。

2)不安全状态
若在某时刻,系统无法找到一个安全序列,则称系统处于不安全状态。

安全序列的实质是:序列中的每一个进程Pi(i=1,2,…,n)到以后运行完 成尚需要的资源量不超过系统当前剩余的资源量与所有在序列中排在它前 面的进程当前所占有的资源量之和。

磁带机可能坏掉)。另外,不少进程间有同步要求。

总之,死锁预防法过于严格,而死锁避免法更不实用。
(4)银行家算法之例

例2.9 假定系统中有五个进程{P1、P2、P3、P4、P5}和 三类资源{A,B,C},资源的数量分别为10、5、7,在T0 时刻的资源分配情况如下图所示:
资源 情况
进程
Max Allocation A B C A B C
优点:安全且资源利用率比静态资源分配法有所提高,因
为它实际是一种半动态的资源分配法。
缺点:实现较困难,不实用。因为很难给出合适的资源编
号,不便于系统增添新设备,不便于用户编程,且仍有一 定的资源浪费现象。
② 死锁的避免

死锁的避免是这样一种对付死锁的办法:系统在运行 过程中采取动态的资源分配策略,保证系统不进入可
的。其模型基于一个小城镇的银行家的放贷行为。该银行家准备向N
个客户贷款,他拥有的资金足以满足任一客户的最大资金需求,但不 能同时满足所有客户的最大需求。他要求每个客贷款前必须说明自己
所要的最大资金量,并且每次提出部分或全部(但不能同时提出全部)
资金量申请。他只给有信誉和能力并承诺到期还本付息的客户贷款。
锁办法主要是通过破坏“占有并请求条件”和“循环等
待条件”来实现的。
4 处理死锁的基本方法
① 预防死锁 ② 避免死锁(银行家算法) ③ 检测与解除死锁 ④ 置之不理(鸵鸟算法)
① 预防死锁


预防死锁:通过在资源分配中设置某些 限定条件,破坏产生死锁的四个必要条 件之一来实现。 但“互斥条件”和“不可剥夺条件”往 往由资源的性质决定,很难破坏。所以, 具体的预防死锁的方法主要有两种,分 别是通过破坏“占有并保持”条件以及 “循环等待”条件实现的。
静态资源分配法的优缺点:
优点:简单、安全、易实现。(Simple is beautiful) (DBMS中进程更新记录前用的两阶段上锁法似此) 缺点: (1)资源被严重浪费(因为一个进程一次获得其所需
的全部资源并且独占,其中有可能有些资源很少使用, 严重恶化了资源利用率)。
(2)进程延迟运行。(当且仅当进程获得其所需的全
Availablei=Availablei-Requesti;
Allocationi=Allocationi+Requesti;
Needi = Needi- Requesti; step4. 系统执行安全性检测子算法,检查如果实施此次资源 分配后,系统是否会处于安全状态。若安全,则完成此次 试分配,成功返回;否则,将撤消此次试分配,恢复step3 中改过的数据,让进程Pi等待。
可用 3
解:经分析可知,T0时刻系统是安全的,因为这时存在一个 安全序列<P2,P1,P3>。 注意:若把题中的12改为11,则T0时刻系统是不安全的, 因为这时系统中虽有2台可用设备,但不存在安全序列。当 然,若不按照安全序列分配资源,安全状态可能变为不安全 状态,如本题中若下一时刻P3获得1台磁带机的情况。
解:1.
进程
资源 情况
P0 P1 P2 P3 P4
进程 资源 情况
7 3 9 2 4
Max Allocation A B C A B C
5 2 0 2 3
3 2 2 2 3
0 2 3 2 0
1 0 0 1 0
0 0 2 1 2
7 1 6 0 4
Need A B C
4 2 0 1 3
3 2 0 1 1
思考题:(北大95研)

一个OS有20个进程,竞争使用65个同类资源,申请方式 是逐个进行的,一旦某个进程获得它所需要的全部资源, 则立即归还所有资源。每个进程最多使用三个资源。若仅 考虑这类资源,该系统有无可能产生死锁,为什么?

答:不可能。因为死锁产生的原因有两点:系统资源不足 或进程推进顺序不当,在本题中,进程所需的最大资源数 为60,而系统共有该类资源65个,其资源数已足够系统 内各进程使用。
(表示系统将处于安全状态);否则,返回逻辑假值(表示不安全)。
(3)银行家算法性能评价

从理论上讲,银行家算法能有效地避免死锁,而且还不需
要死锁预防法中加上的种种限制,如重新运行进程或有序
申请资源。但实际上,它缺乏实用价值。

因为银行家算法的执行有个前提条件,即要求进程预先提 出自己的最大资源请求,并且假设系统拥有的资源总量和 支持的进程个数是固定的,而且进程之间是“无关”的。 但很少有进程在运行前就知道其所需资源的最大量,而且 进程数也不是固定的,而是不断变化(如新用户登录或退 出),况且原本可用的资源也可能突然间变成不可用(如
Finish true true true true true
A B C 2 0 0 2 1 1 0 0 2 0 1 0 3 0 2
P1 P3 P4 P0 P2
由安检子算法知T0时刻存在安全序列:{P1, P3, P4, P0, P2},故系统是安全的。
2. P 发出资源请求request (1,0,2),系统按银行家算法进行检查: 1 1
Need A B C
Available A B C
P0 P1 P2 P3 P4
7 3 9 2 4
5 2 0 2 3
3 2 2 2 3
0 2 3 2 0
1 0 0 1 0
0 0 2 1 2
7 1 6 0 4
4 2 0 1 3
3 2 0 1 1
3 3 2
1.T0时刻是否安全? 2.Request1(1,0,2)能否响应? 3.Request4(3,3,0)能否响应? 4.Request0(0,2,0)能否响应?
①request1(1,0,2)≤ need1(1,2,2); ②request1(1,0,2)≤ available(3,3,2); ③系统先假定可为P1分配资源,并修改available、allocation1和 need1向量,结果资源试分配情况如下表所示:
资源 情况 进程
Max Allocation A B C A B C
3 产生死锁的必要条件
——Coffman, 1971(P57)

互斥条件(mutual exclusion)

指进程排他性地使用所获资源,即一个资源一次只 能被一个进程使用。 指进程保留已经得到的资源,还要求其它的资源。

请求和保持条件(Hold and wait)


不可剥夺条件(No preemption)
记录系统中各类资源的当前可用数目。
2)最大需求矩阵Max[n×m]
记录每个进程对各类资源的最大需求量。
3)分配矩阵Allocation[n×m]
记录系统给每个进程分配的各类资源数目。
4)需求矩阵Need[n×m]
记录每个进程尚需要的各类资源数目。 显然,Need=Max-Allocation。
5)请求向量Request[1×m]
记录某个进程当前对各类资源的申请量,它是银行家算 法的入口参数。
银行家算法描述(P60)
当Pi发出资源请求Requesti后,系统按下述步骤进行检查:
step1.如果Requesti > Needi,则出错。 step2.如果Requesti>Available,则Pi 阻塞;
step3.系统试探着把资源分配给进程Pi,并修改下面数据结 构中的数值:
⑴静态资源分配法(摒弃“请求和保持条件”)
系统规定每一个进程在开始运行前,都必须一
次性地申请其在整个运行过程所需的全部资源。 此时,若系统有足够的资源,便把进程想要的 全部资源一次性地分配给它;若不能全部满足 进程的资源请求,则一个资源也不分给它。这 样,进程在运行过程中就不会再提出资源请求, 从而破坏了请求和保持条件。
部资源后,才能开始运行,但有可能有些资源长期被其 他进程占用,致使需要该资源的进程迟迟不能运行)
相关主题