第3章2死锁
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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
个进程分配其所需的资源,直至最大需求,使每个进程均可顺利完成。则
称此时系统的状态为安全状态,称这样的一个进程序列<P1,P2,…,Pn>为 安全序列。
2)不安全状态
若在某时刻,系统无法找到一个安全序列,则称系统处于不安全状态。
安全序列的实质是:序列中的每一个进程Pi(i=1,2,…,n)到以后运行完 成尚需要的资源量不超过系统当前剩余的资源量与所有在序列中排在它前 面的进程当前所占有的资源量之和。
该算法已扩充为多资源的银行家算法。
在这里,我们可将客户比作进程,银行家比作操作系统。银行家算法
就是动态地对每个客户进程每次的资源请求进行检查,看一下如果满 足它是否会引起不安全状态。假如是,则不满足该请求;否则就满足
它。
银行家算法所用的主要数据结构
1)可用资源向量Available[1×m]
思考题:(北大95研)
一个OS有20个进程,竞争使用65个同类资源,申请方式 是逐个进行的,一旦某个进程获得它所需要的全部资源, 则立即归还所有资源。每个进程最多使用三个资源。若仅 考虑这类资源,该系统有无可能产生死锁,为什么?
答:不可能。因为死锁产生的原因有两点:系统资源不足 或进程推进顺序不当,在本题中,进程所需的最大资源数 为60,而系统共有该类资源65个,其资源数已足够系统 内各进程使用。
P2
某时刻系统的资源分配图
死锁的必要条件的理论意义
死锁必要条件的逆否命题预防死锁的方法。
即只要死锁发生的四个必要条件之一不成立,则死锁
一定不会发生。
产生死锁的四个必要条件中,“互斥条件”由资源的
固有特性所决定的,不仅不能改变,相反还应加以保证。 实际上,“不剥夺条件”也很难破坏,故具体的预防死
磁带机可能坏掉)。另外,不少进程间有同步要求。
总之,死锁预防法过于严格,而死锁避免法更不实用。
(4)银行家算法之例
例2.9 假定系统中有五个进程{P1、P2、P3、P4、P5}和 三类资源{A,B,C},资源的数量分别为10、5、7,在T0 时刻的资源分配情况如下图所示:
资源 情况
进程
Max Allocation A B C A B C
可用 3
解:经分析可知,T0时刻系统是安全的,因为这时存在一个 安全序列<P2,P1,P3>。 注意:若把题中的12改为11,则T0时刻系统是不安全的, 因为这时系统中虽有2台可用设备,但不存在安全序列。当 然,若不按照安全序列分配资源,安全状态可能变为不安全 状态,如本题中若下一时刻P3获得1台磁带机的情况。
锁办法主要是通过破坏“占有并请求条件”和“循环等
待条件”来实现的。
4 处理死锁的基本方法
① 预防死锁 ② 避免死锁(银行家算法) ③ 检测与解除死锁 ④ 置之不理(鸵鸟算法)
① 预防死锁
预防死锁:通过在资源分配中设置某些 限定条件,破坏产生死锁的四个必要条 件之一来实现。 但“互斥条件”和“不可剥夺条件”往 往由资源的性质决定,很难破坏。所以, 具体的预防死锁的方法主要有两种,分 别是通过破坏“占有并保持”条件以及 “循环等待”条件实现的。
⑴静态资源分配法(摒弃“请求和保持条件”)
系统规定每一个进程在开始运行前,都必须一
次性地申请其在整个运行过程所需的全部资源。 此时,若系统有足够的资源,便把进程想要的 全部资源一次性地分配给它;若不能全部满足 进程的资源请求,则一个资源也不分给它。这 样,进程在运行过程中就不会再提出资源请求, 从而破坏了请求和保持条件。
记录系统中各类资源的当前可用数目。
2)最大需求矩阵Max[n×m]
记录每个进程对各类资源的最大需求量。
3)分配矩阵Allocation[n×m]
记录系统给每个进程分配的各类资源数目。
4)需求矩阵Need[n×m]
记录每个进程尚需要的各类资源数目。 显然,Need=Max-Allocation。
5)请求向量Request[1×m]
注意:
(1)系统在某一时刻的安全序列可能不唯一,但这不
影响对系统安全性的判断。
(2)安全状态是非死锁状态,而不安全状态并不一定
是死锁状态。即系统处于安全状态一定可以避免死锁, 而系统处于不安全状态则仅仅有可能进入死锁状态。
死锁状态 安全状态 不安全状态
(2)银行家算法
银行家算法是最有代表性的避免死锁算法,是Dijkstra (1965)提出
部资源后,才能开始运行,但有可能有些资源长期被其 他进程占用,致使需要该资源的进程迟迟不能运行)
⑵有序资源使用法(摒弃“环路等待条 件”)
系统中的所有资源按类都被赋予一个唯一的编号,每个进
程只能按编号的升序申请资源。即对同一个进程而言,它
一旦申请了一个编号为i的资源,就不允许再申请编号比i 小的资源了,因此,破坏了环路等待条件。
①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
能导致系统陷入死锁状态的所谓不安全状态,以避免
死锁发生。
常用的避免死锁的算法是“银行家算法”,系统采用 此法给进程分配资源时,需先判断“如果分配,系统 状态是否安全”,这很像银行家放贷前的思考过程。
(1)安全状态与安全序列
1)安全状态
若在某一时刻,系统能按某种进程顺序,如<P1,P2,…,Pn>,来为每
的。其模型基于一个小城镇的银行家的放贷行为。该银行家准备向N
个客户贷款,他拥有的资金足以满足任一客户的最大资金需求,但不 能同时满足所有客户的最大需求。他要求每个客贷款前必须说明自己
所要的最大资金量,并且每次提出部分或全部(但不能同时提出全部)
资金量申请。他只给有信誉和能力并承诺到期还本付息的客户贷款。
2 产生死锁的原因(P57)
(1)竞争临界资源(即系统资源不足)
当系统中供多个进程共享的临界资源(如打印机、公用 队列等)的数目不能满足诸进程的需要时,会引起诸进程对 资源的竞争而产生死锁。这个原因在多道程序系统中是无法
解除的。
(2)进程推进顺序不当
进程在运行过程中,请求和释放资源的顺序不当,也同 样会导致死锁的产生。这个原因在多道程序系统中是可以解 除的。
优点:安全且资源利用率比静态资源分配法有所提高,因
为它实际是一种半动态的资源分配法。
缺点:实现较困难,不实用。因为很难给出合适的资源编
号,不便于系统增添新设备,不便于用户编程,且仍有一 定的资源浪费现象。
② 死锁的避免
死锁的避免是这样一种对付死锁的办法:系统在运行 过程中采取动态的资源分配策略,保证系统不进入可
Availablei=Availablei-Requesti;
Allocationi=Allocationi+Requesti;
Needi = Needi- Requesti; step4. 系统执行安全性检测子算法,检查如果实施此次资源 分配后,系统是否会处于安全状态。若安全,则完成此次 试分配,成功返回;否则,将撤消此次试分配,恢复step3 中改过的数据,让进程Pi等待。
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)能否响应?
静态资源分配法的优缺点:
优点:简单、安全、易实现。(Simple is beautiful) (DBMS中进程更新记录前用的两阶段上锁法似此) 缺点: (1)资源被严重浪费(因为一个进程一次获得其所需
的全部资源并且独占,其中有可能有些资源很少使用, 严重恶化了资源利用率)。
(2)进程延迟运行。(当且仅当进程获得其所需的全
Need A B C
解: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
Available A B C
3 3 2
Work A B C 3 3 2 5 3 2 7 4 3 7 4 5 7 5 5
Need A B C 1 2 2 0 1 1 4 3 1 7 4 3 6 0 0
Allocation
Work' A B C 5 3 2 7 4 3 7 4 5 7 5 5 10 5 7
记录某个进程当前对各类资源的申请量,它是银行家算 法的入口参数。
银行家算法描述(P60)
当Pi发出资源请求Requesti后,系统按下述步骤进行检查:
step1.如果Requesti > Needi,则出错。 step2.如果Requesti>Available,则Pi 阻塞;
step3.系统试探着把资源分配给进程Pi,并修改下面数据结 构中的数值:
指进程已获得的资源,在未使用完之前,不能被其 它进程强行抢占,只能在使用完时由自己释放。 指发生死锁时,资源分配图(resource allocation graph)中存在有向封闭环路。如下图所示。
பைடு நூலகம்
循路等待条件(Circular wait)
请求边 资源结点
P1 S3 S1
分配边 进程结点
P3 S2
安全性检测子算法描述(P60)
——此法与死锁检测算法很相似,可对照理解
(1)初始化:work=available;/*work是available的影子变量 */ finish=false;
/* finish是进程可完成标志向量 */
(2)若按进程编号顺序找到了一个可加入安全序列的进程,
即:满足条件finishi=false且 needi≤work的进程Pi , 则①假设该进程不久将完成任务归还资源,于是置 work=work+allocationi; finishi=true; ②重复执行这一步,直至找不到一个这样的进程为止; (3)若所有进程的可完成标志finish为真,则返回逻辑真值
(表示系统将处于安全状态);否则,返回逻辑假值(表示不安全)。
(3)银行家算法性能评价
从理论上讲,银行家算法能有效地避免死锁,而且还不需
要死锁预防法中加上的种种限制,如重新运行进程或有序
申请资源。但实际上,它缺乏实用价值。
因为银行家算法的执行有个前提条件,即要求进程预先提 出自己的最大资源请求,并且假设系统拥有的资源总量和 支持的进程个数是固定的,而且进程之间是“无关”的。 但很少有进程在运行前就知道其所需资源的最大量,而且 进程数也不是固定的,而是不断变化(如新用户登录或退 出),况且原本可用的资源也可能突然间变成不可用(如
安全状态的例子:
例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
3 产生死锁的必要条件
——Coffman, 1971(P57)
互斥条件(mutual exclusion)
指进程排他性地使用所获资源,即一个资源一次只 能被一个进程使用。 指进程保留已经得到的资源,还要求其它的资源。
请求和保持条件(Hold and wait)
不可剥夺条件(No preemption)