版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章死锁与饥饿死锁与饥饿死锁:indefinitewait.可察觉饥饿:notnecessarilyinwaitstate.?死锁和饥饿都是由于进程竞争资源而引起的.5.1死锁的概念例子:r1和r2为可再用资源;P1:applyforr1;...applyforr2;...returnr1;...returnr2;P2:applyforr2;...applyforr1;...returnr1;...returnr2;12死锁定义一组进程中的每一个进程,均无限期地等待此组进程中某个其他进程占有的,因而永远无法得到的资源,这种现象称为进程死锁。定义死锁时刻:无限等待发生时;等待发生前(已注定死锁)。由定义得到的结论几个有用的结论:参与死琐的进程至少有二个;每个参与死锁的进程均等待资源;参与死锁的进程中至少有两个进程占有资源;死锁进程是系统中当前进程集合的一个子集。5.2死锁类型1.竞争资源引起的死锁(1)不同种资源(2)同种资源4台打印机,申请:a,释放aP1:aaaaaaaaP2:aaaaDBACW:直行E:左转S:左转5.2死锁类型(Cont.)2.进程通讯引起的死锁P1:receive(P2,M1);P2:receive(P3,M2);P3:receive(P1,M3);其它原因引起的死锁Afteryou/afteryou5.3死锁的条件Coffman条件(必要条件)资源独占(mutualexclusion)不可抢占(nonpreemption)保持申请(hold-while-applying)循环等待(circularwait)当每类资源只有一个实例时,充要条件。破坏上述任意一个条件可以消除死锁。5.4死锁的处理死锁预防(deadlockprevention)-静态死锁避免(deadlockavoidance)--动态死锁检测(deadlockdetection)死锁恢复(deadlockrecovery)5.5资源分配图定义:G=(V,E),V=PR,P={p1,p2,…,pn},R={r1,r2,…,rm},E={(pi,rj)}{(rj,pi)},piP,rjR.申请边(pi,rj):pi申请rj;分配边(rj,pi):rj分配pi;图示:进程:资源:申请边:由进程到资源类;分配边:由资源实例到进程。5.5资源分配图申请:pi申请rj中的一个资源实例,由pi向rj画一申请边,如可满足,改为分配边。释放:去掉分配边。例子(无环路,无死锁)例1.P={p1,p2,p3},R={r1(1),r2(2),r3(1),r4(3)}E={(p1,r1),(p2,r3),(r1,p2),(r2,p1),(r2,p2),(r3,p3)}p1p2p3r1r3r2r4例子(有环路,有死锁)p1p2p3r1r3r2r4增加边(p3,r2)例子(有环路,无死锁)p1p2p3p4r1r25.6死锁预防
对进程有关资源的活动加限制,所有进程遵循这种限制,即可保证没有死锁发生。优点:简单,系统不需要做什么。缺点:对进程的约束,违反约束仍可能死锁。预防方法:预先分配法;有序分配法。5.6.1预先分配法进程:运行前申请所需全部资源;系统:能够满足,全部分配,否则,一个也不分配。破坏“hold-and-wait”条件缺点:资源利用效率低;一次提出申请困难。5.6.2有序分配法资源集:R={r1,r2,…,rn}函数:F:RN例如:R={scanner,tape,printer}F(scanner)=1;F(tape)=2;F(printer)=3;进程pi可以申请资源rj中的实例rl,pi占有rl,F(rl)F(rj)r1r2rkrm......申请次序5.6.2有序分配法证明无死锁(deadlockfree):反证,假定死锁时刻t1:p1无限等待rk1中的资源实例,被p2占有;t2:p2无限等待rk2中的资源实例,被p3占有;…tn:pn无限等待rkn中的资源实例,被p1占有;根据有序申请假设:F(rk1)<F(rk2)<…<F(rkn)<F(rk1)矛盾。例子DBACW:直行E:左转S:左转死锁的可能性:情形1,情形2资源编号:F(D)=1;F(B)=2;F(A)=3;F(C)=4;VarS1,S2,S3,S4:semaphore;(1,1,1,1)例子ProcedureS:P(S1);
驶入D;P(S2);驶入B;V(S1);P(S3);驶入A;V(S2);驶出A;V(S3)ProcedureE:P(S2);
驶入B;P(S3);驶入A;V(S2);P(S4);驶入C;V(S3);驶出C;V(S4);ProcedureW:P(S1);P(S4);
驶入C;驶入D;V(S4);驶出D;V(S1);例子COBEGINS1:S;…;Sm:S;E1:E;…;En:E;W1:W;...;Wo:WCOEND;5.7死锁避免检测可满足请求分配不分配安全不安全系统处于安全状态:存在安全进程序列<p1,p2,…,pn>进程序列<p1,p2,…,pn>安全,p1,p2,…,pn可依次进行完。安全不安全死锁银行家算法(Cont.)Banker’salgorithm,E.W.Dijkstra.进程:事先申明所需资源最大量(并不分配)系统:对每个可满足的资源申请命令进行安全性检查。P={p1,p2,…,pn};R={r1,r2,…,rm};银行家算法(Cont.)数据结构:Available:array[1..m]ofinteger;//系统可用资源Claim:array[1..n,1..m]ofinteger;//进程最大需求Allocation:array[1..n,1..m]ofinteger;//当前分配Need:array[1..n,1..m]ofinteger;//尚需资源Request:array[1..n,1..m]ofinteger;//当前请求临时变量:Work:array[1..m]ofinteger;Finish:array[1..n]ofboolean;银行家算法(Cont.)设X,Y为下标1..l的一维数组:XYj(1jl),X[j]Y[j]X:=Yj(1jl),X[j]:=Y[j]X:=cj(1jl),X[j]:=cX±Yj(1jl),X[j]±Y[j]资源分配Pi请求资源Request[I]Need[I]请求超量,错返Request[I]Available不满足,等待Available:=Available-Request[I]Allocation[I]:=Allocation[I]+Request[I]Need[I]:=Need[I]-Request[I]安全确认,pi继续Available:=Available+Request[I]Allocation[I]:=Allocation[I]-Request[I]Need[I]:=Need[I]+Request[I]pi等待FTFTTF安全性检测算法FWork:=Available;Finish:=false;有满足条件的j:Finish[j]=falseNeed[j]WorkFinish[j]=true;Work:=Work+Allocation[j]Tj,finish[j]=trueTF安全不安全银行家算法例子R={A(10),B(5),C(7)}P={p0,p1,p2,p3,p4}Claim
Allocation
Need
Available
Work
FinishABCABCABCABCABC753010743332322200122902302600222211011433002431P0:p1:p2:p3:p4:安全进程序列:<p1,p3,p4,p2,p0>p1请求:Request[1]=(1,0,2)银行家算法例子Claim
Allocation
Need
Available
Work
FinishABCABCABCABCABC753010743230322302020902302600222211011433002431P0:p1:p2:p3:p4:假定分配:安全进程序列:<p1,p3,p4,p0,p2>p4请求:Request[4]=(3,3,0),不能满足,等待;p0请求:Request[0]=(0,2,0),不安全,等待。银行家算法的保守性例子:R={A,B},申请a,b;释放a,bP={p1,p2},p1:abab;p2:bbbaab
Claim
Allocation
Need
Available
Work
FinishABABABABABp1:11001111p2:110011Request[1]=(1,0),安全,分配。银行家算法的保守性Request[2]=(0,1),不安全,不分配,(分配不导致死锁)
Claim
Allocation
Need
Available
Work
FinishABABABABABp1:11100101p2:110011分配后:讨论Remarks1:银行家算法要求条件:进程所需资源最大量,这个信息对于充要性分析是不够的。Remarks2:假设:进程预先给出有关资源的命令序列,则可以给出死锁避免的充要性算法,复杂度(NPComplete)。Remarks3:预先给出进程有关资源的命令序列是困难的(程序的分枝和循环)。5.8死锁的检测数据结构:Available:array[1..m]ofinteger;Allocation:array[1..n,1..m]ofinteger;Request:array[1..n,1..m]ofinteger;临时变量:Work:array[1..m]ofinteger;Finish:array[1..n]ofboolean;5.8.1死锁检测算法Work:=Available;Finish:=false;有满足条件的i:Finish[i]=falseRequest[i]WorkFinish[i]=true;Work:=Work+Allocation[i]Ti,finish[i]=trueTFF无死锁死锁Finish[I]=trueforallocation[I]=0Remarks1.上述算法可以检测到参与死锁的全部进程,包括占有资源和不占有资源的进程。2.如果希望只检测占有资源的进程,初始化时:Finish[i]=true,forAllocation[I]=0死锁例子例子:R={A(7),B(2),C(6)};P={p0,p1,p2,p3,p4}
Allocation
Request
Available
Work
FinishABCABCABCABCp0:010000000p1:200202p2:303000p3:211100p4:002002未死锁。此时,Request[2]=(0,0,1),死锁,参与死锁进程{p1,p2,p3,p4}5.8.2死锁检测时刻考虑因素:死锁发生频度;死锁影响进程。1.等待时检测:发现早,恢复代价小,开销大(overhead)。2.定时检测:3.资源(eg.CPU)利用率下降时检测。5.9死锁的恢复1.重新启动简单,代价大,涉及未参与死锁的进程。2.终止进程(processtermination)环路上占有资源的进程。(1)一次性全部终止;(2)逐步终止(优先级,代价函数)3.剥夺资源(resourcepreemption)+进程回退(rollback)(1)selectavictim;(2)rollback.问题:(1)保存snapshot代价大;(2)消除影响困难;(3)starvation.5.10鸵鸟算法视而不见Pro:工程师观点(考虑死锁发生的频率,危害,处理代价)死锁发生频率<其它故障引起的系统瘫痪的频率死锁处理constantoverhead>危害Cont:数学家观点必须处理,无论代价如何目前系统实际如此Eg.UNIXproc结构(50andup)5.11有关问题的讨论关于充要性算法已知进程资源活动序列复杂度高(NPComplete)生灭资源问题消息消耗性资源与可重用资源并存5.12饥饿与饿死饥饿:没有时间上界的等待排队等待忙式等待饿死:等待时间超过极限(deadline)饿死vs死锁死锁进程处于等待状态,饿死不然死锁可以检测,饿死不然5.13死锁的例子过河问题:水流12n-1n…WestEastW-EE-WDeadlockprevention:onedirectionatanytime.过河问题Varwest_crossing,east_crossing:integer;(0,0)west_wait,east_wait:integer;(0,0);wq,eq:semaphore;mutex:semaphore;西面过河者活动:P(mutex);Ifeast_crossing>0ThenBeginwest_wait:=west_wait+1;V(mutex);P(wq)End;ElseBeginwest_crossing:=west_crossing+1;V(mutex)End;过河;P(mutex);west_crossing:=west_crossing-1;Ifwest_crossing=0ThenWhileeast_wait>0DoBegineast_wait:=east_wait-1;east_crossing:=east_crossing+1;V(eq);End;V(mutex);过河问题过河问题东面过河者活动:P(mutex);Ifwest_crossing>0ThenBegineast_wait:=east_wait+1;V(mutex);P(eq)EndElseBegineast_crossing:=east_crossing+1;V(mutex)End;过河问题过河;P(mutex);east_crossing:=east_crossing-1;Ifeast_crossing=0ThenWhilewest_wait>0DoBeginwest_wait:=west_wait-1;west_crossing:=west_crossing+1;V(wq);End;V(mutex);思考问题对于过河问题,考虑一个没有饿死情况的解法。例2.过河问题(2)水流WestEast126587341-2-3-4-6-55-6-7-8-2-1要求:(1)无死锁;(2)无饿死;(3)并行度高。WE:P(S);P(s1);走到1;P(s2);走到2;V(s1);P(s5);走到5;V(s2);P(s6);走到6;EW:P(S);P(s3);走到3;P(s4);走到4;V(s3);P(s7);走到7;V(s4);P(s8);走到8;V(s5);P(s3);P(s4);走到4;V(s6);走到3;V(s4);走到E;V(s3);V(S);V(s7);P(s1);P(s2);走到2;V(s8);走到1;V(s2);走到W;V(s1);V(S);VarS,s1,s2,s3,s4,s5,s6,s7,s8:semaphore;(5,1,1,1,1,1,1,1,1)5.14简单组合资源死锁的静态分析条件:已知各个进程有关资源的活动序列;判断:有无死锁可能性。步骤1:以每个进程占有资源,申请资源作为一个状态,记作:(pi:aj:ak1,…,akn)=(进程:请求:占有)步骤2:以每个状态为一个节点;步骤3:如s1所申请资源为s2所占有,则由s1向s2画一有向弧(相同进程间不画);步骤4:找出所有环路;步骤5:判断环路上状态是否能同时到达,如是有死锁可能性,否则无死锁可能性。(1)环路中有相同进程,不能到达;(2)环路中有相同被占有资源,不能到达。死锁分析例子R={A,B,C,D,E,F,G}p1:cdcabdabp2:dedbfebfp3:ceefaefa(p1:d:c)(p1:a:d)(p1:b:da)(p2:e:d)(p2:b:e)(p2:f:eb)(p3:e:c)(p3:f:c)(p3:a:cf)死锁分析例子R={A,B,C,D,E,F,G}p1:cdcabdabp2:d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 母婴护理顾问岗位服务考试试卷及答案
- 超声波测距报警装置制作指南课程设计
- 密室逃脱机关设计技师考试试卷及答案
- 美发美容营销推广专员岗位招聘考试试卷及答案
- 楼宇自控员岗位系统运维考试试卷及答案
- 2026年中秋节假期高中假期学习与休息平衡
- 2026年校园节水教育课件(专题深化版)
- 会议高效组织技巧
- 售后应急抢修方案范本
- 幼儿园简单组词造句教学
- JGJ52-2006 普通混凝土用砂、石质量及检验方法标准
- 电影与社会文化影响研究
- 屋顶光伏发电项目EPC总承包工程招标文件
- 渤海大学《大学物理》2018-2019期末试卷(C卷)
- 舞台用升降机械系统
- 房产测量作业指导书
- 学前儿童发展心理学PPT中职完整全套教学课件
- 金融专业英语PPT完整全套教学课件
- 新汉语水平考试HSK5级写作解题攻略
- RS1200软件操作手册(C-MARK)
- 绝缘子的污闪与防治
评论
0/150
提交评论