本发明专利技术涉及程序中的死锁检测技术,尤其涉及通过锁图分析的方式来检测程序中的死锁的技术。本发明专利技术提供了一种用于死锁检测的方法,包括:获取程序中与上锁操作有关的锁信息;基于所获取的锁信息,生成第一锁图,其中第一锁图中的每个节点包括锁集合和程序位置集合,其中锁集合包括至少一个锁,并且程序位置集合包括至少一个程序位置;提取所述第一锁图中的强连通子图;将所述第一锁图中的强连通子图展开,以生成第二锁图,其中第二锁图中的每个节点包括单个锁;以及提取所述第二锁图中的强连通子图,所述第二锁图中的强连通子图指示程序中的死锁。
【技术实现步骤摘要】
本专利技术涉及程序中的死锁检测技术,尤其涉及通过锁图分析的方式来检测程序中的死锁的技术。
技术介绍
计算机程序中的进程(线程)死锁(deadlock)是一个非常致命的问题。进程(线程)死锁是指是指两个或两个以上的进程(线程)在执行过程中,因竞争共享资源而造成的一种互相等待的现象,除非发生死锁的某个进程(线程)放弃该共享资源,否则死锁中的两个或者多个事务都将无限期等待下去。进程(线程)死锁通常会导致整个系统瘫痪。触发进程(线程)死锁的因素很多,其中主要包括(1)有限的系统资源;(2)进程(线程)运行推进的顺序不合适;(3)资源分配不当。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。为了避免进程(线程)死锁对整个系统造成的重大危害,提高系统的稳定性,需要有一个有效的方法进行死锁检测,以便及时发现进程(线程)死锁,并采取适当的措施解除死锁,避免系统运行状况进一步恶化。目前存在一种基于图论的死锁检测方法。通过记录计算机程序执行过程中的锁事件来构建直观地表示死锁状况的图,例如锁图(Iockgraph)和资源分配图,在锁图中,节点表示为资源的锁,从一个节点指向另一个节点的有向边表示已获得某个资源的锁的进程正在请求获得另一个资源的锁,具体地说,有向边表示在特定的程序位置(例如程序代码的行)已获得某个资源的锁的进程将在下一个特定的程序位置获得另一个资源的锁。如果图中两个或多个节点之间的有向边构成闭合的有向环,或者说图中存在强连通子图,则说明程序中存在死锁,因此可以通过检查图中是否存在有向环来检测死锁。关于强连通子图的概念将在下文中进行介绍。上述现有技术中存在的基于图论的死锁检测方法存在下面的问题现在许多大型程序的代码量都很庞大,程序运行时所涉及的进程(线程)也很多,进程(线程)对资源的需求(锁)的数量也会很大。在这种情况下,所产生的锁图的节点(锁)的数量会很大,同时有向边的数量(已获得某个资源的锁的进程正在请求获得另一个资源的锁)的数量也会很大,从而使得生成锁图时会耗费大量的时间和系统资源,同时从所生成的极为复杂的锁图中检索或提取强连通子图或闭合环路的工作也会耗费大量的时间和系统资源,也就是说,要利用现有技术中的基于图论的死锁检测方法来检测目前通常存在的大型程序是极为耗时、耗资源并且很不经济的选择。
技术实现思路
考虑到上述存在的问题,本专利技术的目的之一在于提供一种能够简化锁图生成的用于死锁检测方法和系统。本专利技术的又一目的在于提供一种能够降低死锁检测过程中的耗时并节省死锁检测过程中的资源消耗的方法和系统。本专利技术的构思主要是基于下面的考虑由于目前大型程序的代码量和所涉及的进程(线程)的数量庞大导致锁图的节点数量以及有向边的数量都十分庞大,因此考虑改变现有技术中锁图节点的生成方式,将一个或多个锁以及一个或多个特定的程序位置(例如程序代码的行)合并成一个节点,从而降低锁图的节点数量以及有向边的数量,并进而能够基于该被简化的锁图而以耗费更少的时间和系统资源的方式来检测或提取其中的闭合环路(强连通子图)。此外,基于上述考虑,本专利技术将死锁检测的过程分成两个阶段,除了上述第一个阶段生成简化的锁图并检测其中的强连通子图外,还将所提取的强连通子图进一步展开成第二个阶段的锁图,并通过检测该第二阶段的锁图中的闭合环路(强连通子图)来最终确定程序中的死锁信息。上述两点考虑是相辅相成的,正是由于将死锁检测分成上述两个阶段进行,才能使得初始生成的锁图得以简化并使得检测锁图中的闭合环路(强连通子图)的过程得以简化。根据本专利技术的一个方面,提供了一种用于死锁检测的方法,包括获取程序中与上锁操作有关的锁信息;基于所获取的锁信息,生成第一锁图,其中第一锁图中的每个节点包括锁集合和程序位置集合,其中锁集合包括至少一个锁,并且程序位置集合包括至少一个程序位置;提取所述第一锁图中的强连通子图;将所述第一锁图中的强连通子图展开,以生成第二锁图,其中第二锁图中的每个节点包括单个锁;以及提取所述第二锁图中的强连通子图,所述第二锁图中的强连通子图指示程序中的死锁。根据本专利技术的一个实施方式,所述方法还包括判断所获取的锁信息中的上锁操作的信息所指示的锁以及对应于所述锁的程序位置是否已经被记录在所述第一锁图的预备节点中。根据本专利技术的另一方面,提供了一种用于的系统,包括锁信息获取装置,用于获取程序中与上锁操作有关的锁信息;第一锁图生成装置,用于基于所获取的锁信息,生成第一锁图,其中第一锁图中的每个节点包括锁集合和程序位置集合,其中锁集合包括至少一个锁,并且程序位置集合包括至少一个程序位置;第一强连通子图提取装置,用于提取所述第一锁图中的强连通子图;第二锁图生成装置,用于将所述第一锁图中的强连通子图展开, 以生成第二锁图,其中第二锁图中的每个节点包括单个锁;以及第二强连通子图提取装置, 用于提取所述第二锁图中的强连通子图,所述第二锁图中的强连通子图指示程序中的死锁。通过本专利技术的方法和系统,可以实现的技术效果。还可以实现降低死锁检测过程中的耗时并节省死锁检测过程中的资源的技术效果。附图说明通过对结合附图所示出的实施方式进行详细说明,本专利技术的上述以及其他特征将更加明显,本专利技术附图中相同的标号表示相同或相似的部件。在附图中,图1示出了现有技术中基于图论的死锁检测方法的实例示意图;图2示出了根据本专利技术一个实施例的用于死锁检测的方法的流程图;图3示出了根据本专利技术一个实施例的生成第一锁图的方法的流程图;;图4A至41示出了根据本专利技术的一个实施例的进行死锁检测的实例示意图;图5示出了根据本专利技术一个实施例的用于死锁检测的系统的结构图;图6示出了根据本专利技术一个实施例的生成第一锁图的系统的结构图。具体实施例方式在下文中,将参考附图通过实施方式对本专利技术提供的用于确定要被物化的节点的方法和系统进行详细地描述。图1示出了现有技术中基于图论的死锁检测方法的实例示意图(锁图)。假设某程序在运行一次后生成的日志文件中存储有下列九条锁信息。首先需要对锁信息的含义和可能的表达形式进行简要的介绍,具体而言锁信息可能是下面的形式T1 12 (Li)-15 (L4), 7(L8)-26(L3)。这个表达式的含义即为对于线程Tl而言,其在程序代码的第12行上Ll 锁,并且要求在程序的第15行上L4锁;该线程Tl还在程序代码的第7行上L8锁,并且要求在程序代码的第26行上L3锁。其中的Tl表示特定的线程(进程),12,15,7和26即表示特定的程序位置(程序代码的行),Li、L4、L8和L3即表示锁的名称或代号。假设九条锁信息分别是(1)T1:4L1-5L2;(2)T3:16L2-17L5 ;(3)T1:4L3-5L4 ; (4)T3:16L2-18L8 ; (5)Τ316L2-17L7 ; (6)Τ317L7-18L8 ; (7)Τ317L5-18L6 ; (8) T2:12L2-13L1 ;(9)T3:16L2-18L6。那么利用现有技术中基于图论进行死锁检测的方法,把每个锁作为一个节点,把每条锁信息中记录的特定线程在特定程序位置上锁的信息(锁操作信息)作为有向边,从而生成如图1所示的锁图。举例而言,本文档来自技高网...
【技术保护点】
1.一种用于程序死锁检测的方法,包括:获取程序中与上锁操作有关的锁信息;基于所获取的锁信息,生成第一锁图,其中第一锁图中的每个节点包括锁集合和程序位置集合,其中锁集合包括至少一个锁,并且程序位置集合包括至少一个程序位置;提取所述第一锁图中的强连通子图;将所述第一锁图中的强连通子图展开,以生成第二锁图,其中第二锁图中的每个节点包括单个锁;以及提取所述第二锁图中的强连通子图,所述第二锁图中的强连通子图指示程序中的死锁。
【技术特征摘要】
【专利技术属性】
技术研发人员:罗志达,齐尧,李威,
申请(专利权)人:国际商业机器公司,
类型:发明
国别省市:US
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。