计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月1第6章并发性:死锁和饥饿(资源管理)主要内容死锁的原理、预防、避免和检测管理资源的策略和方法死锁的综合策略哲学家就餐问题Unix、Linux、Solaris、Windows等主流操作系统的并发机制计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月2第一讲死锁死锁原理死锁(deadlock)概念资源、资源分配图与死锁定理死锁的条件死锁预防死锁避免进程启动拒绝资源分配拒绝(银行家算法)死锁检测与恢复综合策略6.1死锁原理计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月46.1.1死锁的概念死锁(deadlock):一个进程集合中的每个进程都在等待只能由该集合中的其他一个进程才能引发的事件(释放占有资源/进行某项操作)死锁是多个进程因竞争资源且推进顺序不合理而造成的一种僵局,若无外力作用,这些进程将永远不能再向前推进计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月5联合进程图联合进程图(jointprogressdiagram)是一种记录进程共享资源的历史和分析死锁的工具二个进程的联合进程图是一个二维网格,三个进程的联合进程图是一个三维网格,如此类推四种区域安全区域(白色)敏感区域(fatalregion,致命区域)(黑色)死锁区域(黑色)不可达区域(彩色)计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月6可能死锁的进程举例进程P:…获得A…获得B…释放A…释放B…进程Q:…获得B…获得A…释放B…释放A…计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月7联合进程图—死锁的例子P与Q想要AP与Q想要B死锁释放A获得A获得B释放B获得A获得B释放A释放BP的进展Q的进展123465P与Q想要A&B请求A请求B请求A请求B计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月8不会死锁的进程举例进程P:…获得A…释放A…获得B…释放B…进程Q:…获得B…获得A…释放B…释放A…计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月9联合进程图—无死锁的例子释放A获得A获得B释放B获得A获得B释放A释放BP的进展Q的进展123465请求A请求B请求A请求BP与Q想要BP与Q想要A计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月106.1.1可重用资源资源分类可重用资源(如图书)与可消费资源(如食物)可剥夺资源(如处理机、内存等)与不可剥夺资源(如打印机、表、队列、信号量等)永久性资源与临时性资源可重用资源(reusableresource)一次只能供一个进程安全地使用,且不会由于使用而耗尽(消失)的资源可以获得、使用和释放,能够再次被使用例子:处理器、I/O通道、主存和辅存、设备,文件、数据库、信号量等数据结构计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月11涉及可重用资源死锁的例子破坏环路等待条件计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月126.1.2可消费资源可消费/消耗资源(consumableresource)可以创建(生产)并且可以销毁(消费)的资源数目没有限制,当一个进程得到一个可消费资源时,这个资源就不再存在了例子:中断、信号、消息、I/O缓冲区中的信息计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月13涉及消耗性资源死锁的例子(消息)P1:…receive(P2);…send(P2,M1);…P2:…receive(P1);…send(P1,M2);…计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月操作系统检测、预防和避免死锁的方法原则资源分配策略不同的方案主要优点主要缺点预防保守,预提交(undercommits)资源一次性请求所有资源对执行单一突发行为的进程有效不需抢占低效延时进程的初始化进程必须知道未来的资源请求抢占便于用于状态易保存和恢复的资源过多的不必要抢占资源排序通过编译时检测可实施由于问题已在系统设计时解决,不需运行时再计算不允许增加资源请求避免位于检测和预防中间操纵以发现至少一条安全路径不需抢占OS必须知道未来的资源请求进程可能被长期阻塞检测非常自由;尽可能地准许请求的资源周期性地调用以测试死锁不会延时进程的初始化易于在线处理丢失固有抢占计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月156.1.3资源分配图resourceallocationgraph用有向图描述的进程死锁模型表示法资源类(资源的不同类型):方框资源实例(存在于每个资源类中):黑圆点进程:圆圈中加进程名分配边:资源实例指向进程的一条有向边申请边:进程指向资源类的一条有向边计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月16死锁定理如果资源分配图中没有环路,则系统中没有死锁,如果图中存在环路则系统中可能存在死锁如果每个资源类中只包含一个资源实例,则环路是死锁存在的充分必要条件计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月资源分配图例计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月186.1.4死锁的条件死锁的三个必要条件互斥条件指进程对所分配到的资源进行排他性使用,即在一段时间内某资源只由一个进程占有如果此时还有其他进程要求该资源,要求者只能阻塞,直至占有该资源的进程用毕释放占有且等待条件进程已经占有至少一个资源,但可以提出新的资源要求若该资源已被其它进程占有,则请求进程阻塞,同时对已经获得的其它资源保持不放不可剥夺/抢占(preemption)条件进程已获得的资源在未使用完之前不能被剥夺,只能在使用完时由自己释放计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月19死锁的条件(续)环路等待条件资源分配图中存在环路,即进程集合{P0,P1,P2,…,Pn}(n=2)中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源死锁的充分必要条件互斥占有且等待不可抢占循环等待计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月206.2死锁预防四类方法鸵鸟算法:对死锁视而不见预防死锁避免死锁检测死锁死锁预防(deadlockprevention)通过破坏产生死锁的四个条件中的一个或多个条件,保证不会发生死锁计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月216.2.1破坏互斥条件方法允许多个进程同时使用资源适用条件资源的固有特性允许多个进程同时使用(如文件允许多个进程同时读)借助特殊技术允许多个进程同时使用(如打印机借助Spooling技术)缺点不适用于绝大多数资源计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月226.2.2破坏占有且等待条件方法禁止已拥有资源的进程再申请其他资源,如要求所有进程在开始时一次性地申请在整个运行过程所需的全部资源;或申请资源时要先释放其占有资源后,再一次性申请所需全部资源优点简单、易于实现、安全缺点进程延迟运行资源严重浪费计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月236.2.3破坏不可剥夺条件方法一个已经占有了某些资源的进程,当它再提出新的资源请求而不能立即得到满足时,必须释放它已经占有的所有资源,待以后需要时再重新申请OS可以剥夺一个进程占有的资源,分配给其他进程适用条件资源的状态可以很容易地保存和恢复(如CPU)缺点实现复杂、代价大,反复申请/释放资源、系统开销大、降低系统吞吐量6.2.4破坏环路等待条件方法要求每个进程任何时刻只能占有一个资源,如果要申请第二个则必须先释放第一个(不现实)对所有资源按类型进行线性排队,进程申请资源必须严格按资源序号递增的顺序(可避免循环等待)缺点很难找到令每个人都满意的编号次序,类型序号的安排只能考虑一般作业的情况,限制了用户简单、自主地编程易造成资源的浪费(会不必要地拒绝对资源的访问)可能低效(会使进程的执行速度变慢)计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月25第二讲死锁避免拒绝启动进程策略拒绝资源请求策略——银行家算法死锁检测和恢复综合策略计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月266.3死锁避免deadlockavoidance不需事先采取限制措施破坏产生死锁的必要条件,而是在资源的动态分配过程中,采用某种策略防止系统进入不安全状态,从而避免发生死锁两种死锁避免的方法:不启动其资源请求会导致死锁的进程不允许会导致死锁的进程资源请求计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月276.3.1进程启动拒绝模型n个进程和m种资源系统资源(Resource)总量向量R=(R1,R2,…,Rm),Rj为第j种资源的总数系统当前可用(aVailable)资源总量向量V=(V1,V2,…,Vm),Vj为第j种资源的剩余数进程-资源需求(Claim)矩阵C,Cij=进程i对资源j的请求数进程-资源分配(Allocation)矩阵A,Aij=当前已经分配给进程i的资源j数C11,C12,…,C1mC21,C22,…,C2m…Cn1,Cn2,…,CnmA11,A12,…,A1mA21,A22,…,A2m…An1,An2,…,Anm计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月28进程启动拒绝系统正常状态下,模型有如下性质:Rj=Vj+(A1j+A2j+…+Anj),对所有的j=1,2,…,mCij≤Rj,对所有的i=1,2,…,n,j=1,2,…,mAij≤Cij,对所有的i=1,2,…,n,j=1,2,…,m进程启动拒绝策略若Rj≥Cn+1,j+(C1j+C2j+…+Cnj),j=1,2,…,m,则允许启动进程Pn+1否则系统不启动进程Pn+1本策略不能保证资源的最优使用率,但可以保证系统现有进程不会发生死锁计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月296.3.2资源分配拒绝资源分配拒绝策略是Dijkstra受银行资金借贷管理的启发于1965年提出的模型系统状态:由资源总量向量R=(R1,R2,…,Rm)、系统可用资源总量向量V=(V1,V2,…,Vm)、进程-资源需求矩阵C和进程-资源分配矩阵A表示安全状态:至少存在一个执行时序,使当前所有进程都能运行到结束状态不安全状态:不存在一个执行时序,使当前所有进程都能运行到结束状态计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月30安全状态举例R1R2R3R1R2R3R1R2R3R1R2R3R1R2R3P1P2P3P4P1P2P3P4P1P2P3P4需求矩阵C分配矩阵A矩阵C-A(a)初始状态资源向量R可用向量V322613314422100612211002222001103420936011计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月31安全状态举例(续)R1R2R3R1R2R3R1R2R3R1R2R3R1R2R3P1P2P3P4P1P2P3P4P1P2P3P4需求矩阵C分配矩阵A矩阵C-A(b)P2运行到完成+322000314422100000211002222000103420936623613010资源向量R可用向量V计算机科学系操作系统课程组李才伟&凌应标制作@2016年4月32安全状态举例(续)R1R2R3R1R2R3R1R2R3P1P2P3P4P1P2P3P4P1P2P3P4需求矩阵C分配矩阵A矩阵C-A(c)P1运行到完成资源向量R可用向量V00000031442200