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

文档序号:9872421阅读:416来源:国知局
一种适用于广义模型的死锁检测方法
【专利说明】
【技术领域】
[0001]本发明涉及分布式系统领域,尤其涉及一种适用于广义模型的死锁检测方法。【【背景技术】】
[0002]在分布式系统中,死锁是指一组进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。死锁的图论模型有等待图(WFG)和资源等待图两种,其中等待图只包含进程节点,而资源等待图还包括资源节点,并且资源等待图可以转化为等待图,如图1所示。分布式系统采用不同的请求模型时,锁的拓扑结构也将不同。当采用AND模型时,进程在取得所有所需资源时,才能继续执行,当等待图中存在回路时,即发生死锁。当采用OR模型时,进程得到至少一个所需资源就能继续执行,此时死锁条件是结(knot) ο 一个结K是一个节点集合,对于K中的任何节点a,a能到达K中的所有节点,并且只能到达K中的节点。当采用P-out-of-Q模型时,进程发出Q个资源请求,只需获得P个资源授权就可以恢复运行。这种模型也称为广义模型,系统中可能发生的死锁的拓扑结构也是结。此类死锁的检测相对于拓扑结构为“环”的死锁要复杂很多,因此如何高效检测并解决此类死锁显得十分重要。Kshemkalyani [A.D.Kshemkalyani and M.Singhal ,“Efficient Detect1n and Resolut1n of Generalized Distributed Deadlocks,,,IEEE Trans.Software Eng.,vol.20,n0.1 ,pp.43-54,Jan.1994.]提出了一个带有时间戮的结检测算法,该算法由根节点开始,各阻塞节点向其输出边发送或转发探针进行扩散计算。算法的特点是当探针到达时,如果中间节点也处于阻塞状态,则直接向初始点发送SHORT信息告知自己也在等待;如果中间节点没有阻塞,则向上一级节点发送ECHO信息,告知自己是叶。初始点通过对ECHO消息和SHORT消息的归约发现死锁结,并执行退出程序。这种算法使用了4e-2n+2L个消息和2d时间,其中e和η分别是WFG的边数和顶点数,L是叶节点的数目,d是直径。
[0003]Chen[S.Chen,Y.Deng,P.C.Attie,and W.Sun,“Optimal Deadlock Detect1n inDistributed Systems Based on Locally Constructed Wait-For Graphs,,,Proc.Int’IConf.Distributed Computing Systems,pp.613-619,May 1996.]提出一种集中归约算法,特点在于每个子节点在收到查询后向初始节点返回应答信息,应答消息中带有子节点的输出边消息,初始点收到应答后取出子节点的输出边,再向输出边的每个节点继续发送探针,如此递归进行下去,直到探针到达叶节点或初始点自身,此时返回的应答消息能够是初始点归约出等待图的成员,检测结束。这个算法需要2n的消息数目和2d时间,查询和应答消息可变长度。
[0004]Lee[S.Lee ,uFast,Centralized Detect1n and Resolut1n of DistributedDeadlocks in the Generalized Model /' IEEE Trans.Software Eng.,vol.30,n0.8,PP.561-573,Sept.2004.]提出了一种变形的Chen算法,算法中的每个探针都含有不同的权值,当返回消息的权值之和与发送出去的权值之和相等时检测过程结束。Lee的算法进一步将探针数目减小到小于2e,死锁检测延迟时间也减小到d+2。
[0005]现有技术中,集中归约算法具有较好的性能,但由于分布式系统中一个站点上通常存在多个进程或资源,所以这些进程可能会构成本地死锁,并且以两个进程构成的本地死锁为最多;而集中归约算法由初始点初始化,相关节点将信息直接发送给初始点,由初始点来检测所有死锁,并没有区别对待各个站点上的局部死锁;同时现有技术中的探针大多是变长的,这为探针的处理带来不便。

【发明内容】

[0006]为了解决现有技术中的问题,本发明提供了一种适用于广义模型的死锁检测方法,解决现有技术中分布式系统中站点上的进程构成本地死锁的问题。
[0007]本发明提供了一种适用于广义模型的死锁检测方法,包括以下步骤:(A)普通节点保存输出边信息;(B)普通节点检测并解决本地死锁并发送归约信息给初始点;(C)初始点归约检测全局死锁。
[0008]作为本发明的进一步改进:普通节点上保存一次算法执行中所涉及的进程的依赖关系。
[0009]作为本发明的进一步改进:所述步骤(B)中,资源管理节点RMr收到一个资源请求时,首先将发送这个请求的进程放入reqUest_Qr队列;如果资源管理节点将这个资源赋予这个进程,并向该进程发送grant (r)消息,该进程成为hoIder ;如果RMr收到来自hoIder的资源释放消息release,就将资源收回,然后从reqUest_Qr删除holder所代表的的进程,同时将资源赋予新的holder;如果它收到一个cancel消息,表示这个进程无法完成提交动作,不在排队等待资源分配,所以将直接在reqUest_Qr中删除这个进程请求。
[0010]作为本发明的进一步改进:在普通节点上,使用一个映射表,实现从算法实例编号η到该站点上所涉及进程的依赖关系集合的映射,其中算法实例编号是全局唯一的;当初始点等待超时时,就会启动检测算法,向它等待的进程发送探针;每个进程在首次接收到一个算法实例的探针时,就将当前的依赖关系保存在映射表中。
[0011]作为本发明的进一步改进:所述步骤(B)中,普通节点延迟发送依赖关系以得到本次算法执行中本站点各相关进程的依赖关系,并通过这个信息检测本地死锁。
[0012]作为本发明的进一步改进:所述探针为定长探针。
[0013]本发明的有益效果是:有效的降低了初始点的计算压力;同时一定程度上解决了常见本地死锁。
【【附图说明】】
[0014]图1是资源等待图到等待图的转化的示意图;
[0015]图2是本发明中死锁检测算法的主要执行流程;
[0016]图3是算法启动节点即初始点的执行流程,分为启动探针扩散、向各站点发送依赖关系请求、执行全局归约并解决全局死锁;
[0017]图4是普通节点的执行流程,主要表现为在接收探针时所做的处理;
[0018]图5是各站点上与映射表相关的操作,各站点接收到不同的消息时,会对映射表进行不同的操作,包括注册新的依赖关系、销毁映射表,以及用于本地死锁检测的局部归约;
[0019]图6是本发明实施例一中使用的模型的等待图,该等待图包含两个站点,站点I上有节点b、d、f、g,站点2上有节点a、c、e,其依赖关系如下:Fa = bAc、Fb = dAg、Fc = e Vb、Fd= f、Fe = c、Ff = d、Fg = Φ ο
【【具体实施方式】】
[0020]下面结合【附图说明】及【具体实施方式】对本发明进一步说明。
[0021 ] WFG ffait-for Gragh等待图
[0022]RM Resource Manager资源管理节点
[0023]—种适用于广义模型的死锁检测方法,包括以下步骤:(A)普通节点保存输出边信息;(B)普通节点检测并解决本地死锁并发送归约信息给初始点;(C)初始点归约检测全局死锁。
[0024]普通节点上保存一次算法执行中所涉及的进程的依赖关系。
[0025]所述步骤(B)中,资源管理节点RMr收到一个资源请求时,首先将发送这个请求的进程放入reqUest_Qr队列;如果资源管理节点将这个资源赋予这个进程,并向该进程发送grant (r)消息,该进程成为holder;如果RMr收到来自holder的资源释放消息release,就将资源收回,然后从requeSt_Qr删除holder所代表的的进程,同时将资源赋予新的holder;如果它收到一个cancel消息,表示这个进程无法完成提交动作,不在排队等待资源分配,所以将直接在request_Qr中删除这个进程请求。
[0026]在普通节点上,使用一个映射表,实现从算法实例编号η到该站点上所涉及进程的依赖关系集合的映射,其中算法实例编号是全局唯一的;当初始点等待超时时,就会启动检测算法,向它等待的进程发送探针;每个进程在首次接收到一个算法实例的探针时,就将当前的依赖关系保存在映射表中。
[0027]所述步骤(B)中,普通节点延迟发送依赖关系以得到本次算法执行中本站点各相关进程的依赖关系,并通过这个信息检测本地死锁。所述探针为定长探针。
[0028]在一实施例中
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1