- 1、本文档共46页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
实例说明系统所处的安全或不安全状态(8)
系统若处在下面状态中,进程P4请求资源(3,3,0),由于可用资源不足,申请被系统拒绝;此时,系统能满足进程P0的资源请求(0,2,0);但可看出系统已处于不安全状态了。银行家算法的程序及简短说明(1)
typedefstructstate{/*全局数据结构*/ intresource[m]; intavailable[m]; intclaim[n][m]; intallocation[n][m];};银行家算法的程序及简短说明(2)
voidresource_allocation(){/*资源分配算法*/ if(allocation[i,*]+request[*]claim[i,*]) {error};/*申请量超过最大需求值*/ else{ if(request[*]available[*]) {suspendprocess.}; else{/*尝试分配,definenewstateby*/ allocation[i,*]=allocation[i,*]+request[*]; available[*]=available[*]-request[*];}}if(safe(newstate)) {carryoutallocation};else{ {restoreoriginalstate}; {suspendprocess}; }}银行家算法的程序及简短说明(3)
boolsafe(states){/*安全性测试算法*/ intcurrentavail[m]; setprocessrest; currentavail[*]=available[*]; rest={allprocess}; possible=true; while(possible){/*rest中找一个Pk,满足以下条件*/ claim[k,*]-allocation[k,*]=currentavail[*]; if(found){ currentavail[*]=currentavail[*]+allocation[k,*]; rest=rest–{Pk}; } else possible=false; } return(rest=null);}3.7.4死锁检测和解除资源分配图和死锁定理解决死锁问题的一条途径是死锁检测和解除,这种方法对资源的分配不加任何限制,也不采取死锁避免措施,但系统定时地运行一个“死锁检测”程序,判断系统内是否已出现死锁,如果检测到系统已发性了死锁,再采取措施解除它。进程-资源分配图约定Pi→Rj为请求边,表示进程Pi申请资源类Rj中的一个资源得不到满足而处于等待Rj类资源的状态,该有向边从进程开始指到方框的边缘,表示进程Pi申请Rj类中的一个资源。Rj→Pi为分配边,表示Rj类中的一个资源已被进程Pi占用,由于已把一个具体的资源分给了进程Pi,故该有向边从方框内的某个黑圆点出发指向进程。资源分配图的一个例子
R1R2....P1P2P3R3资源分配图的另一个例子R1R2P2P3P4P1资源分配图的另一个例子简化进程-资源分配图检测系统是否处于死锁状态(1)
(1)如果进程-资源分配图中无环路,则此时系统没有发生死锁。(2)如果进程-资源分配图中有环路,且每个资源类中仅有一个资源,则系统中发生了死锁,此时,环路是系统发生死锁的充要条件,环路中的进程便为死锁进程。(3)如果进程-资源分配图中有环路,且涉及的资源类中有多个资源,则环路的存在只是产生死锁的必要条件而不是充分条件。简化进程-资源分配图检测系统是否处于死锁状态(2)
如果能在进程-资源分配图中消去此进程的所有请求边和分配边,成为孤立结点。经一系列简化,使所有进程成为孤立结点,则该图是可完全简化的;否则则称该图是不可完全简化的。系统为死锁状态的充分条件是:当且仅当该状态的进程-资源分配图是不可完全简化的。该充分条件称为死锁定理。2死锁的检测和解除方法(1)(1)借助于死锁的安全性测试算法来实现。死锁检测算法与死锁避免算法是类似的,不同在于前者考虑了检查每个进程还需要的所有资源能否满足要求;而后者则仅要根据进程
您可能关注的文档
- 操作系统教程(第6版)课件6.2 并发进程的制约关系.pptx
- 操作系统教程(第6版)课件6.3 临界区.pptx
- 操作系统教程(第6版)课件6.5 临界区管理实现的硬件方式.pptx
- 操作系统教程(第6版)课件6.6 PV操作与进程互斥.pptx
- 操作系统教程(第6版)课件6.7 PV操作与进程同步.pptx
- 操作系统教程(第6版)课件6.8 生产者消费者问题探究.pptx
- 操作系统教程(第6版)课件6.9 管程概述.pptx
- 操作系统教程(第6版)课件6.11 霍尔管程的例.pptx
- 操作系统教程(第6版)课件6.12 进程通信.pptx
- 操作系统教程(第6版)课件6.15 死锁的防止.pptx
文档评论(0)