并行程序的死锁检测方法和系统的制作方法

文档序号:6578194阅读:192来源:国知局
专利名称:并行程序的死锁检测方法和系统的制作方法
技术领域
本发明涉及并行程序,特别涉及并行程序的死锁检测方法和系统。
背景技术
随着计算机技术的飞速发展,单核处理器逐渐被多核处理器所取替。多核处理器 通过把多个执行内核集成到一个物理处理器,从而显著地增强计算机的处理能力和计算能 力,并把并行计算的优势充分发挥出来。所谓并行计算分为时间上的并行和空间上的并行, 时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。 通常用并行程序实现并行计算,在并行程序中,任务处理被分成多个部分(线程),这些线 程可并行地执行,并通过访问某些共享数据结构和使用合适的同步方法来彼此通信,以协 同并正确地工作。但是,并行程序中的进程(线程)死锁(deadlock)是一个非常致命的问题。进 程(线程)死锁是指是指两个或两个以上的进程(线程)在执行过程中,因竞争共享资源 而造成的一种互相等待的现象,除非发生死锁的某个进程(线程)放弃该共享资源,否则死 锁中的两个事务都将无限期等待下去。进程(线程)死锁通常会导致整个系统瘫痪。触发 进程(线程)死锁的因素很多,其中主要包括(1)有限的系统资源;(2)进程(线程)运 行推进的顺序不合适;(3)资源分配不当。如果系统资源充足,进程的资源请求都能够得到 满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行 推进顺序与速度不同,也可能产生死锁。为了避免进程(线程)死锁对整个系统造成的重 大危害,提高系统的稳定性,需要有一个有效的方法进行死锁检测,以便及时发现进程(线 程)死锁,并采取适当的措施解除死锁,避免系统运行状况进一步恶化。通常利用锁图(lock graph)来直观地表示死锁的状况,通过记录并行程序执行 过程中的锁操作,并在锁图中相应地增加节点和有向边来获得对应于并行程序过程中的锁 图,在锁图中,节点表示为资源的锁,从一个节点指向另一个节点的有向边表示已获得某个 资源的锁的进程正在请求获得另一个资源的锁。如果锁图中两个或多个节点之间的有向边 构成闭合的有向环,说明并行程序中存在死锁,因此可以通过检查锁图中是否存在有向环 来检测死锁。图1示出并行程序的死锁状态图,其中线程Tl已经获得资源Rl的锁,并请求 资源R2的锁,线程T2具有资源R2的锁,并请求资源Rl的锁,因为这两个线程都需要获得 对方已经拥有的资源才能继续执行,而Tl和T2拥有的资源又必须等到各自的线程继续执 行才会释放出来,所以陷入了死锁状态。然而,在实际中应用上述方法进行死锁检测并不十分有效,随着程序的运行,越来 越多的节点和边被添加到锁图中,图2示出一个并行程序的锁图实例,该锁图中有1014个 节点和3051条有向边,在锁图中检测有向环的操作非常慢,耗费掉大量的时间和计算资 源,极大地降低了死锁检测的效率。因此,需要一种改进的死锁检测方法以提高死锁检测的效率。

发明内容
基于上述问题,本发明提供一种并行程序的死锁检测方法和系统。根据本发明的一个方面,提供一种并行程序的死锁检测方法,包括在并行程序运 行过程中确定所述并行程序的锁不再被使用;从对应于所述并行程序运行过程的锁图中删 除与不再被使用的锁对应的节点以及与不再被使用的锁相关的边以获得更新的锁图,其中 所述锁图是根据所述并行程序的锁操作构建的;以及对所述更新的锁图进行死锁检测。根据本发明的一个方面,提供一种并行程序的死锁检测系统,包括确定装置,被 配置为在所述并行程序运行过程中确定所述并行程序的锁不再被使用;锁删除装置,被配 置为从对应于所述并行程序运行过程的锁图中删除与不再被使用的锁对应的节点以及与 不再被使用的锁相关的边以获得更新的锁图,其中所述锁图是根据所述并行程序的锁操作 构建的;以及死锁检测装置,被配置为对所述更新的锁图进行死锁检测。通过本发明提供的一种并行程序中死锁检测的方法和系统,及时将不再使用的锁 节点及其相关的边从并行程序的锁图中删除,从而有效降低了锁图的复杂性(减少大量节 点和边)。基于修剪之后的锁图进行有向环的检测以确定是否存在潜在的死锁,能够节约大 量时间和计算资源,极大地提高了死锁检测的效率。


结合附图,通过参考下列详细的示例性实施例的描述,将会更好地理解本发明本 身、优选的实施方式以及本发明的目的和优点,其中图1示出并行程序的死锁状态图;图2示出一个并行程序的锁图实例;图3示出根据本发明实施例的并行程序的死锁检测方法;图4a示出对应于第一实施例的多线程并行程序执行过程的锁图;图4b示出从图4a的锁图上删除互斥锁requestjnutex的节点以及与互斥锁 request_mutex相关的边后的锁图;图4c示出从图4b的锁图上删除互斥锁control_mutex的节点以及与互斥锁 control_mutex相关的边后的锁图;图5a示出对应于第二实施例的多线程并行程序执行过程的锁图;图5b示出从图5a的锁图上删除锁G的节点以及与锁G相关的边后的锁图;图5c示出从锁图5b上删除锁Ll的节点以及与锁Ll相关的边后的锁图;图6a示出对应于第三实施例的Java程序的字节码在JVM上运行过程的锁图;图6b示出从图6a上删除锁G的节点以及与锁G相关的边后更新的锁图;图6c示出从图6b上删除锁Ll的节点以及与锁Ll相关的边后更新的锁图;以及图7示出根据本发明实施例的并行程序的死锁检测系统的框图。
具体实施例方式以下结合附图描述根据本发明实施例的并行程序的死锁检测方法和系统。图3示 出根据本发明实施例的并行程序的死锁检测方法,包括在步骤S301,在并行程序运行过 程中确定所述并行程序的锁不再被使用;在步骤S302,从对应于所述并行程序运行过程的
5锁图中删除与不再被使用的锁对应的节点以及与不再被使用的锁相关的边以获得更新的 锁图,其中所述锁图是根据所述并行程序的锁操作构建的;以及在步骤S303,对所述更新 的锁图进行死锁检测。具体地,在步骤S301,其中在并行程序运行过程中确定所述并行程序的锁不再被 使用进一步包括响应于接收到所述并行程序的锁不再被使用的事件通知,确定所述并行程 序的锁不再被使用。在并行程序运行过程中确定所述并行程序的锁不再被使用进一步包括通过对所 述并行程序的代码进行扫描,对所述并行程序的锁的生命周期进行分析。根据本发明的一个实施例,对所述并行程序的锁的生命周期进行分析进一步包括 响应于检测到并行程序中存在显式的破坏锁的函数调用,从而识别出在并行程序运行过程 中所述并行程序的锁被最后使用的位置。在所述并行程序的锁被最后使用的位置附近添加 标记,所述标记用于在所述并行程序运行过程中触发所述并行程序的锁不再被使用的事件 通知。例如,在Linux上,多线程应用程序常使用的pthread库提供的互斥锁Mutex,其破坏 锁的函数为 intpthread_mutex_destroy(pthread_mutex_t * mutex);而多进程常用来实 现互斥的信号量semaphore也是一种特殊的锁,其破坏锁的函数为int semctl (int semid, int semnum, IPC_RMID,…)。根据本发明的一个实施例,对锁的生命周期进行分析进一步包括识别出并行程序 运行过程中所述并行程序的锁可能被最后使用的位置的集合,具体地,响应于未检测到并 行程序中存在破坏锁的函数调用,对所述并行程序进行数据流分析,确定所述并行程序的 锁被定义和被使用的位置,从而识别出所述并行程序运行过程中所述并行程序的锁可能被 最后使用的位置的集合。在并行程序的锁可能被最后使用的位置附近添加标记,所述标记 用于在并行程序运行过程中触发所述并行程序的锁可能不再被使用的事件通知,响应于接 收到所有所述标记触发的所述并行程序的锁可能不再被使用的事件通知,确定所述并行程 序的锁不再被使用。根据本发明的一个实施例,可以利用静态代码分析的方法实现对并行程序的锁的 生命周期进行分析,静态代码分析就是在不执行代码的情况下进行代码检查(例如进行源 代码检查、二进制代码检查或是字节码检查)。静态代码扫描是静态代码分析的首要步骤, 以下分别列举针对具有显式破坏锁的函数调用的多线程的并行程序和不具有显式破坏锁 的函数调用的多线程的并行程序进行静态代码分析的实例。为了易于理解,下述实施例均 采用对源代码进行静态分析的方式。第一实施例以下示出对具有显式破坏锁的函数调用的c语言程序examplel. c进行静态代码 分析的实例,c语言程序examplel. c中包含了 Linux的pthread库中的互斥锁Mutex,破坏 互斥锁 Mutex 的函数是intpthread_mutex_destroy (pthread_mutex_t ~k mutex),静态代 码分析需要在不执行代码的情况下对源代码examplel. c进行扫描,识别出与破坏互斥锁 Mutex的函数相匹配的函数代码,进而识别出并行程序运行过程中锁被最后使用的位置, 并在锁被最后使用的位置附近添加标记,以在并行程序运行过程中触发锁被破坏的事件通 知,从而在并行程序运行过程中发送锁不再被使用的事件通知。
权利要求
一种并行程序的死锁检测方法,包括在并行程序运行过程中确定所述并行程序的锁不再被使用;从对应于所述并行程序运行过程的锁图中删除与不再被使用的锁对应的节点以及与不再被使用的锁相关的边以获得更新的锁图,其中所述锁图是根据所述并行程序的锁操作构建的;以及对所述更新的锁图进行死锁检测。
2.根据权利要求1所述的死锁检测方法,其中在并行程序运行过程中确定所述并行程 序的锁不再被使用进一步包括响应于接收到所述并行程序的锁不再被使用的事件通知,确 定所述并行程序的锁不再被使用。
3.根据权利要求2所述的死锁检测方法,其中在所述并行程序运行过程中确定所述并 行程序的锁不再被使用进一步包括通过对所述并行程序的代码进行扫描,对所述并行程序 的锁的生命周期进行分析。
4.根据权利要求3所述的死锁检测方法,其中对所述并行程序的锁的生命周期进行分 析进一步包括识别出所述并行程序运行过程中所述并行程序的锁可能被最后使用的位置 的集合。
5.根据权利要求4所述的死锁检测方法,其中识别出所述并行程序运行过程中所述并 行程序的锁可能被最后使用的位置的集合进一步包括响应于未检测到所述并行程序中存 在破坏锁的函数调用,对所述并行程序进行数据流分析,确定所述并行程序的锁被定义和 被使用的位置,从而识别出所述并行程序运行过程中所述并行程序的锁可能被最后使用的 位置的集合。
6.根据权利要求5所述的死锁检测方法,进一步包括在所述并行程序的锁可能被最后 使用的位置附近添加标记,所述标记用于在所述并行程序运行过程中触发所述并行程序的 锁可能不再被使用的事件通知。
7.根据权利要求6所述的死锁检测方法,其中响应于接收到所述并行程序的锁不再被 使用的事件通知确定所述并行程序的锁不再被使用进一步包括响应于接收到所有所述标 记触发的所述并行程序的锁可能不再被使用的事件通知,确定所述并行程序的锁不再被使 用。
8.根据权利要求3所述的死锁检测方法,其中对所述并行程序的锁的生命周期进行分 析进一步包括响应于检测到所述并行程序中存在破坏锁的函数调用,确定出在所述并行程 序运行过程中所述并行程序的锁被最后使用的位置。
9.根据权利要求8所述的死锁检测方法,进一步包括在所述并行程序的锁被最后使用 的位置附近添加标记,所述标记用于在所述并行程序运行过程中触发所述并行程序的锁不 再被使用的事件通知。
10.根据权利要求1或4所述的死锁检测方法,其中在并行程序运行过程中确定所述并 行程序的锁不再被使用进一步包括响应于在所述并行程序运行过程中检测到所述并行程 序的锁被垃圾回收,确定出所述并行程序的锁不再被使用。
11.一种并行程序的死锁检测系统,包括确定装置,被配置为在所述并行程序运行过程中确定所述并行程序的锁不再被使用;锁删除装置,被配置为从对应于所述并行程序运行过程的锁图中删除与不再被使用的锁对应的节点以及与不再被使用的锁相关的边以获得更新的锁图,其中所述锁图是根据所 述并行程序的锁操作构建的;以及死锁检测装置,被配置为对所述更新的锁图进行死锁检测。
12.根据权利要求11所述的死锁检测系统,其中所述确定装置进一步被配置为响应于 接收到所述并行程序的锁不再被使用的事件通知,确定所述并行程序的锁不再被使用。
13.根据权利要求12所述的死锁检测系统,其中所述确定装置进一步包括锁的生命周 期分析装置,被配置为通过对所述并行程序的代码进行扫描,对所述并行程序的锁的生命 周期进行分析。
14.根据权利要求13所述的死锁检测系统,其中所述锁的生命周期分析装置进一步被 配置为识别出在所述并行程序运行过程中所述并行程序的锁可能被最后使用的位置的集合 O
15.根据权利要求14所述的死锁检测系统,其中所述锁的生命周期分析装置进一步被 配置为响应于未检测到所述并行程序中存在破坏锁的函数调用,对所述并行程序进行数据 流分析,确定所述并行程序的锁被定义和被使用的位置,从而找到在所述并行程序运行过 程中所述并行程序的锁可能被最后使用的位置的集合。
16.根据权利要求15所述的死锁检测系统,其中所述锁的生命周期分析装置进一步被 配置为在所述并行程序的锁可能被最后使用的位置附近添加标记,所述标记用于在所述并 行程序运行过程中触发所述并行程序的锁可能不再被使用的事件通知。
17.根据权利要求16所述的死锁检测系统,其中所述确定装置进一步被配置为响应于 接收到所有所述标记触发的所述并行程序的锁可能不再被使用的事件通知,确定所述并行 程序的锁不再被使用。
18.根据权利要求13所述的死锁检测方法,其中所述锁的生命周期分析装置进一步被 配置为响应于检测到所述并行程序中存在破坏锁的函数调用,确定出在所述并行程序运行 过程中所述并行程序的锁被最后使用的位置。
19.根据权利要求18所述的死锁检测系统,其中所述锁的生命周期分析装置进一步被 配置为在所述并行程序的锁被最后使用的位置附近添加标记,所述标记用于在所述并行程 序运行过程中触发所述并行程序的锁不再被使用的事件通知。
20.根据权利要求11或14所述的死锁检测系统,其中所述确定装置进一步被配置为响 应于在所述并行程序运行过程中检测到所述并行程序的锁被垃圾回收,确定出所述并行程 序的锁不再被使用。
全文摘要
本发明公开一种并行程序的死锁检测方法和系统,其中该方法包括在并行程序运行过程中确定所述并行程序的锁不再被使用;从对应于所述并行程序运行过程的锁图中删除与不再被使用的锁对应的节点以及与不再被使用的锁相关的边以获得更新的锁图,其中所述锁图是根据所述并行程序的锁操作构建的;以及对所述更新的锁图进行死锁检测。
文档编号G06F9/54GK101937365SQ20091013982
公开日2011年1月5日 申请日期2009年6月30日 优先权日2009年6月30日
发明者罗志达, 郑勇, 齐尧 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1