您好,欢迎访问三七文档
第八章死锁本章考核知识点:1、死锁的产生2、死锁的防止3、死锁的避免4、死锁的检测本章自学要求:理解“死锁”影响系统的可靠性。死锁的产生与进程对资源的需求、进程的执行速度、资源的分配策略有关。系统应采用一定的策略实现资源分配以保证系统的安全。本章重点是:死锁的防止和避免。一、死锁的产生(领会)1、什么叫死锁:若系统中存在一组进程(两个或多个进程),它们中的每一个进程都占用了某种资源而又都在等待其中另一个进程所占用的资源,这种等待永远不能结束,则说系统出现了“死锁”。或说这组进程处于“死锁”状态。2、引起死锁的因素:死锁的出现除了与资源的分配策略有关外,也与并发进程的执行速度有关,即操作系统对资源管理不得当或没有顾及进程并发执行时可能出现的情况,则就可能形成死锁。话说狼GG和狼MM面对面走上一根独木桥。狼GG说:呵呵,小MM,我已经占领了这座桥的一半,你不如退出去让我先过去吧。狼MM说,哼哼,老兄,我也占了这座桥的一半,你咋不让给我?狼GG和狼MM互不相让,都在等对方先让步。结果两个都过不了河。等着猎人来处理后事了。二、死锁的防止(简单应用)我们把桥的一半看作一个资源的话,那么,当狼MM占用了其中一个资源后,狼GG就只好等待了。狼GG狼MM各自占有了一段资源又在等另外的资源,又不肯放弃自己占有的资源。他们又不能把对方踢下河去,把另一段资源抢过来自己用。只好互相等待了。1、系统出现死锁必然同时保持的四个必要条件:1)互斥使用资源2)占有并等待资源3)不可抢夺资源4)循环等待资源这4个条件是必要条件而不是充分条件,意思是,只要发生死锁,那么这四个条件必然都成立。反之则不然,有时候即使四个条件都满足,那也不一定发生死锁。(从资源分配图中可以分析得到,即使形成循环等待资源,也不一定形成死锁。)2、死锁的防止策略:要防止死锁形成,只要采用的资源分配策略能使上述4个条件中有一个条件不成立就可以了。1)破坏互斥使用资源的条件经常是行不通的。因为资源本身特性就是互斥使用的。2)要破坏“占有并等待条件”则可以采取两种办法:静态分配和释放已占资源。静态分配也称为预分配资源,要求每一个进程在开始执行前就申请它所需要的全部资源,仅当系统能满足进程的资源申请要求且把资源分配给进程后,该进程才能开始执行。释放已占资源就是指进程申请资源时必须没有占用资源,如果已经占用了资源就要先归还所占的资源再申请。3)实现可抢夺式分配:如果一个进程已经占有了某些资源又要申请新资源,而新资源不能满足(已被其它进程占用)必须等待时,系统可以抢夺该进程已占有的资源。4)实现按序分配:把系统中所有资源排一个顺序,对每一个资源给一个确定的编号,规定任何一个进程申请两个以上的资源时,总是先申请编号小的资源,再申请编号大的资源。三、死锁的避免(简单应用)死锁的避免不同于死锁的防止,死锁的防止是采用某种分配策略后,系统就不会产生死锁,这好比是你打过了某种预防针,再也不会得那种病。而死锁的避免是没有打预防针,但是通过其他办法,避免得病。因此有“安全状态”的说法,对应的,当然也有不安全状态。就像人都有得病的可能,不必任何病都打预防针。只要注意防病,仍然可以安全健康的生活。1、安全状态:如果操作系统能保证所有的进程在有限的时间内得到需要的全部资源,则称系统处于“安全状态”。2、区分死锁的避免与死锁的防止:当采用了防止死锁的资源分配策略后,系统中就不会形成死锁。但是可以防止死锁的资源分配策略中,有的只适用于对某些资源的分配,有的会影响资源的使用效率。这时可用使用死锁的避免。死锁的避免是解决死锁的另一种方法,它不同于死锁的防止。在系统中不采用防止死锁的资源分配策略,而是估计到可能有死锁发生时避免死锁的发生。3、银行算法是怎样避免死锁的:银行家算法是这样的:1)当一个用户对资金的最大的需求量不超过银行家现有的资金时就可以接纳该用户。2)用户可以分期贷款,但贷款的总数不能超过最大需求量。3)当银行家现有的资金不能满足用户的尚需贷款时,对用户的贷款可推迟支付,但总能使用户在有限的时间里得到贷款。4)当用户得到所需的全部资金后,一定能在有限的时间里归还所有资金。我们把操作系统看作是银行家,操作系统管理的资源相当于是银行家管理的资金,则银行家算法就是:1)当一个进程首次申请资源时,测试该进程对资源的最大的需求量,如果不超过系统现存资源时就可以按他的当前申请量为其分配资源。否则推迟分配。2)进程执行中继续申请资源时,测试该进程占用资源和本次申请资源总数有没有超过最大需求量。超过就不分配,没超过则再测试现存资源是否满足进程还需要的最大资源量,满足则按当前申请量分配,否则也推迟分配。总之,银行家算法要保证分配资源时系统现存资源一定能满足至少一个进程所需的全部资源。这样就可以保证所有进程都能在有限时间内得到需要的全部资源。这就是安全状态。四、死锁的检测(领会)死锁的检测就是既不打预防针,也不去避免得病,而是经常去体检,如果发现有病了就治疗。这是一种事后解决的办法,也算是解决死锁问题的一条途径。但这毕竟要付出较大代价.1、什么是死锁的检测:对资源的申请和分配不加限制,只要有剩余的资源就可把资源分配给申请者。这样可能会出现死锁,系统定时运行一个“死锁检测程序”,如果检测到死锁发生,则必须先解除死锁再继续工作。2、怎样实现死锁的检测:1、每个资源当用中只有一个资源2、资源类中含有若干个资源。3、死锁的解除:一般采用两种方式来解除死锁,一种是终止一个或几个进程的执行以破坏循环等待;另一种是从涉及死锁的进程中抢夺资源。检测死锁和解除死锁都要付出很大代价。所以用死锁检测的方法解决死锁问题只适用于不经常发生死锁的系统中。复习题1、防止死锁的方法,通常是打破四个必要条件之一,但一般不采用破坏()条件。A、占有并等待B、互斥C、不抢夺D、循环等待2、产生系统死锁的原因可能是由于()。A、进程释放资源B、一个进程进入死循环C、多个进程竞争,资源出现循环等待D、多个进程竞争共享型设备3、若系统中有五台绘图仪,有多个进程均需要使用两台,规定每个进程一次仅允许申请一台,则至多允许()个进程参与竞争,而不会发生死锁。A、5B、2C、3D、44、操作系统讨论的死锁是与()有关。A、某个进程申请的资源不存在B、进程并发执行的进度和资源分配的策略C、进程并发执行的速度D、某个进程申请的资源数多于系统的资源数5、死锁检测必须解决两个问题,一是怎样_______________死锁。二是当有死锁发生时怎样_________死锁。6、如果操作系统能够保证所有的进程在有限时间内得到需要的全部资源,则称系统处于____________。7、什么叫死锁,引起死锁的原因是什么?8、试说明资源的静态分配能防止死锁的原因。9、某系统中有10台打印机,有三个进程P1,P2,P3分别需要8台、7台和4台。若P1,P2,P3已申请到4台,2台和2台。试问银行家算法能安全分配吗?请说明分配过程。1、B2、C3、D4、B5、判断系统是否出现解除6、安全状态7、若系统中存在一组进程(两个或两个以上进程),其中的每一个进程都占用了某种资源又都在等待其中的另一个进程所占用的资源,这种等待永远不能结束,我们说系统发生了死锁。引起死锁的原因主要有两个,一是与资源的分配策略有关,二是与并发进程的执行速度有关。8、资源静态分配策略要求每个进程在开始执行前申请所需的全部资源,仅在系统为之分配了所需的全部资源后,该进程才开始执行。这样,进程在执行过程中不再申请资源,从而破坏了死锁的四个必要条件之一“占有并等待条件”,从而防止死锁的发生。9、系统能为进程P3分配二台打印机。因为尽管此时10台打印机已分配给进程P14台,P22台和P34台,全部分配完,但P3已分配到所需要的全部4台打印机,它不会对打印机再提出申请,所以它能顺利运行下去,能释放占用的4台打印机,使进程P1,P2均可能获得剩余的要求4台和5台,按银行家算法是安全的。
本文标题:第八章死锁
链接地址:https://www.777doc.com/doc-4303085 .html