- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* ?SUDA_徐云龙 为了能对系统中是否已发生了死锁继续检测,在系统中必须: ①保存有关资源的请求和分配信息; ②提供一种算法,以利用这些信息来检测系统是否已进入死锁状态。 3.8.1 死锁的检测 * * ?SUDA_徐云龙 系统死锁可利用资源分配图(Resource Allocation Graph)来描述。该图是由一组结点N和一组边E所组成的一个对偶G=(N,E),具有下述形式的定义和限制: (1)把N分为两个互斥的子集,一组进程结点P={P1,P2,…,Pn},一组资源结点R={R1,R2,…,Rn},N=P∪R。在图3-19所示的例子中,P={P1,P2},R={R1,R2},N={R1,R2}∪{P1,P2}。 (2)凡属于E中的一条边e∈E,都连接着P中的一个结点和R中的一个结点,e={Pi,Rj}是资源请求边,由进程Pi指向资源Rj,它表示进程Pi请求一个单位的Rj资源。E=(Rj,Pi)是资源分配边,由资源Rj指向进程Pi,它表示把一个单位的资源Rj分配给进程Pi。图3-19中示出了两个请求边和两个分配边,即E={(P1,R2),(R2,P2),(P2,R1),(R1,P1)}。 1. 资源分配图 * ?SUDA_徐云龙 图3-19 每类资源有多个时的情况 圆圈代表一个进程 方框代表一类资源 一种类型的资源可能有多个,用方框中的一个点,代表一类资源中的一个资源 请求边由进程指向方框中的Rj,而分配边则应始于方框中的一个点。 图3-19示出了一个资源分配图,图中,P1进程已分得了两个R1资源,并又请求一个R2资源;P2进程分得了一个R1和一个R2资源,并请求R1资源。 P1 P2 分配 请求 分配 分配 分配 请求 R1 R2 * * ?SUDA_徐云龙 利用把资源分配图加以简化的方法(图3-19),来检测系统处于S状态时,是否为死锁状态。简化方法如下: (1)在资源分配图中,找出一个既不阻塞又非孤立的进程结点Pi。在顺利的情况下,Pi可获得所需资源而继续运行,直至运行完毕,再释放其所占有的全部资源,这相当于消去Pi所有的请求边和分配边,使之成为孤立的结点。在图3-20(a) 中,将P1的两个分配边和一个请求边消去,便形成图(b)所示的情况。 (2)P1释放资源后,便可使P2获得资源而继续运行,直到P2完成后又释放出它所占有的全部资源,而形成图(c)所示的情况。 (3)在进行一系列的简化后,若能消去图中所有的边,使所有进程都成为孤立结点,则称该图是可完全简化的;若不能通过任何过程使该图完全简化,则称该图是不可完全简化的。 2. 死锁定理 * * ?SUDA_徐云龙 对于较复杂的资源分配图,可能有多个既未阻塞、又非孤立的进程结点,不同的简化顺序,是否会得到不同的简化图?有关文献已经证明,所有的简化顺序,都将得到相同的不可简化图。 同样可以证明:S为死锁状态的充要条件是:当且仅当S状态的资源分配图是不可完全简化的。该充要条件称为死锁定理。 2. 死锁定理 * ?SUDA_徐云龙 P1 P2 R1 R2 P1 P2 R1 R2 P1 P2 R1 R2 * 图3-20 资源分配图的简化 ?SUDA_徐云龙 P1 P2 R1 R2 P1 P2 R1 R2 P3 R4 R3 * * ?SUDA_徐云龙 死锁检测中的数据结构,类似于银行家算法中的数据结构: (1)可利用资源向量Available。它表示了m类资源中每一类资源的可用数目。 (2)把不占用资源的进程(向量Allocation=0)记入表L中,即Li∪L。 (3)从进程集合中找到一个Requesti≤Work的进程,做如下处理: ①将其资源分配图简化,释放出资源,增加工作向量Work=Work + Allocation。 ②将它记入L表中。 (4)若不能把所有进程都记入L表中,则表明系统状态S的资源分配图是不可完全简化的。因此,该系统状态将发生死锁。 3. 死锁检测中的数据结构 * * ?SUDA_徐云龙 Work=Available; L={Li│Allocationi=0∩Requesti=0} for (all Li ? L) { for all Requesti≤Work{ Work= Work + Allocationi; Li ∪ L; } } deadlock= ┐(L={P1,P2,…,Pn}); 3. 死锁检测中的数据结构 * * ?SUDA_徐云龙 如果利用死锁检测算法检测出在系统中已发生了死锁,则应立即采取相应的措施,以解除死
文档评论(0)