一种适用于广义模型的死锁检测方法_2

文档序号:9872421阅读:来源:国知局
,资源管理节点RMr(Resource Manager)收到一个资源请求时,首先将发送这个请求的进程放入reqUest_Qr队列。如果资源管理节点将这个资源赋予这个进程,并向该进程发送grant(r)消息,该进程成为holder。如果RMr收到来自holder的资源释放消息release,就将资源收回,然后从request_Qr删除holder所代表的的进程,同时将资源赋予新的holder。如果它收到一个cancel消息,表示这个进程无法完成提交动作,不在排队等待资源分配,所以将直接在reqUest_Qr中删除这个进程请求。通过这种方式,一个进程知道它在等待哪些进程,并被哪些进程等待。进一步,一个进程i的依赖关系表达为它所等待的进程的与或表达式,如RCi = (P Aq) Vr,这表示当进程i从P和q各获得一个资源,或者从进程r获得一个资源,即可恢复运行。
[0029]为了检测死锁,本发明和以往技术一样使用探针技术,但在各个站点上保存一次算法执行中所涉及的进程的依赖关系。为此,在各个站点上,使用一个映射表,实现从算法实例编号η到该站点上所涉及进程的依赖关系集合的映射,其中算法实例编号是全局唯一的。当初始点等待超时时,就会启动检测算法,向它等待的进程发送探针。每个进程在首次接收到一个算法实例的探针时,就将当前的依赖关系保存在映射表中。
[0030]同时,为了算法能够终止,在探针中使用权重方法。当进程从非树边接收到探针或该进程是叶子节点时,就发送REPORT消息将探针的权重发送给初始点。初始点的累加权重达到I时,说明探针发送阶段已经结束。此时,初始点向各相关节点发送请求消息,各站点在归约后才将进程依赖关系发送至初始节点,初始节点进一步归约以完成全局死锁的检测。这种延迟发送进程依赖关系的方法使得可以得到本次算法执行中本站点各相关进程的依赖关系,可以利用这个信息检测本地死锁。本发明主要针对两个进程构成的本地死锁进行检测。
[0031]本发明的主要执行流程如图2所示。具体来说,对于WFG中的节点,可以分为初始点和普通节点,初始点即启动检测算法的节点,初始点和普通节点的执行流程分别如图3和图4所示。此外,各站点关于映射表的主要执行流程如图5所示。
[0032]在又一实施例中中,在图2中,8个进程位于两个站点上,各个进程等待关系如下:Fa = bAc、Fb = dAg、Fc = eVb、Fd = f、Fe = c、Ff = d、Fg=C>。进程 a 作为初始点,在启动检测算法后,执行流程如下:
[0033]1.进程&在站点2上注册后,向进程13、(3分别发送探针?1?(^(11,&,&,1/2),其中11为当前算法实例编号,具有唯一性。
[0034]2.当进程b收到来自进程a的探针后,由于第一次接收探针,所以注册自己的依赖关系,同时向进程d、g发送探针PR0BE(n,a,b,l/4)。
[0035]3.当进程d接收到来自进程b的探针时,注册并向进程f发送探针PR0BE(n,a,d,l/
4)0
[0036]4.当进程f接收到来自进程d的探针时,注册并向进程d发送探针PR0BE(n,a,f,l/
4)0
[0037]5.当进程d接收到来自进程f的探针时,由于进程d不是第一次接收探针,于是向初始点3发送报告1^01?1'(11,&,1上1/4),其中1表示该报告来自站点1。
[0038]6.当进程g接收到来自进程b的探针时,注册,同时由于g是非阻塞进程,所以向初始点 a 发送报告 REP0RT(n,a,l,g,l/4)。
[0039]7.当进程c接收到来自进程a的探针时,注册并向进程b、e发送探针PR0BE(n,a,c,1/4) ο
[0040]8.当进程13接收到来自进程(:的探针时,向初始点&发送报告1^?01?1'(11,&,1,13,1/
4)0
[0041]9.当进程e接收到来自进程c的探针时,注册并向进程c发送探针PR0BE(n,a,c,l/
4)0
[0042]10.当进程c接收到来自进程e的探针时,由于进程c不是第一次接收探针,于是向初始点a发送报告REPORT (η,a,2,c,I /4),其中2表示该报告来自站点2。
[0043]11.此时初始点接收到的REPORT的权重之和为I,于是向站点1、2发送请求,请求中包含算法实例编号η。
[0044]12.站点I接收到请求后,与算法实例编号相关的进程有b、d、f、g。经过检测,发现进程d、f相互强依赖,所以形成死锁。在选择一个进程作为牺牲者之后,死锁解决。假设d为牺牲者,令Fd= Φ,进一步归约,可得Fb = Fd = Ff = Fg= Φ。于是向初始点a发送该依赖关系O
[0045]13.站点2接收到请求后,与算法实例编号相关的进程有a、c、e。经过检测,虽然进程e强依赖于进程C,但进程c并不强依赖于进程e,所以没有由两个进程构成的本地死锁存在。所以向初始点发送的依赖关系仍为Fa = bAc、Fc = eVb、Fe = c。
[0046]14.初始点a接收到所有相关站点的回应,由于Fb= Φ,所以Fa = Fc= Φ,进一步Fe=Φ。由于所有进程的依赖关系都归约为空,因此没有死锁存在。实际上由进程d、f构成的死锁已经在之前解决了。
[0047]通过延迟发送依赖关系,使得可以使用定长的探针,并且最后发送给初始点的依赖关系集合也是归约后的结果,所以消息长度得到了缩短。其实,这相当于将初始点的归约任务分派给多个站点,从而降低了初始点的计算压力。另一方面,本发明在一定程度上解决了常见本地死锁,而不是将它们和全局死锁一样全部由初始点检测,这样也减少了由初始点向各站点发送的ABORT消息。通过延迟发送检测信息,达到先解决一些简单的本地死锁,再进一步解决复杂死锁的效果。这使得算法中使用的探针是定长探针,与以往技术中使用的非定长探针相比,可以大大加快探针的构造和解析速度。
[0048]以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
【主权项】
1.一种适用于广义模型的死锁检测方法,其特征在于:包括以下步骤:(A)普通节点保存输出边信息;(B)普通节点检测并解决本地死锁并发送归约信息给初始点;(C)初始点归约检测全局死锁。2.根据权利要求1所述的适用于广义模型的死锁检测方法,其特征在于:普通节点上保存一次算法执行中所涉及的进程的依赖关系。3.根据权利要求1所述的适用于广义模型的死锁检测方法,其特征在于:所述步骤(B)中,资源管理节点RMr收到一个资源请求时,首先将发送这个请求的进程放入request_Qr队列;如果资源管理节点将这个资源赋予这个进程,并向该进程发送grant(r)消息,该进程成为ho Ider ;如果RMr收到来自holder的资源释放消息re I ease,就将资源收回,然后从request_Qr删除ho Ider所代表的的进程,同时将资源赋予新的holder;如果它收到一个cancel消息,表示这个进程无法完成提交动作,不在排队等待资源分配,所以将直接在request_Qr中删除这个进程请求。4.根据权利要求2所述的适用于广义模型的死锁检测方法,其特征在于:在普通节点上,使用一个映射表,实现从算法实例编号η到该站点上所涉及进程的依赖关系集合的映射,其中算法实例编号是全局唯一的;当初始点等待超时时,就会启动检测算法,向它等待的进程发送探针;每个进程在首次接收到一个算法实例的探针时,就将当前的依赖关系保存在映射表中。5.根据权利要求2所述的适用于广义模型的死锁检测方法,其特征在于:所述步骤(B)中,普通节点延迟发送依赖关系以得到本次算法执行中本站点各相关进程的依赖关系,并通过这个信息检测本地死锁。6.根据权利要求4所述的适用于广义模型的死锁检测方法,其特征在于:所述探针为定长探针。
【专利摘要】本发明涉及分布式系统领域,其公开了适用于广义模型的死锁检测方法,包括以下步骤:(A)普通节点保存输出边信息;(B)普通节点检测并解决本地死锁并发送归约信息给初始点;(C)初始点归约检测全局死锁。本发明的有益效果是:有效的降低了初始点的计算压力;同时一定程度上解决了常见本地死锁。
【IPC分类】G06F9/52
【公开号】CN105637485
【申请号】CN201480037523
【发明人】李挥, 陶智, 汪允敏
【申请人】北京大学深圳研究生院
【公开日】2016年6月1日
【申请日】2014年12月16日
【公告号】WO2016058264A1
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1