基于Petri网的多线程死锁检测研究

来源 :中国科学技术大学 | 被引量 : 0次 | 上传用户:zhangzhubin
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
随着多核处理器的发展和多线程程序的普及,多线程技术的应用越来越广泛。但是在多线程程序中,当多个线程之间运行推进顺序不合适时,就可能造成死锁。死锁会导致多线程程序无法运行,甚至软件系统崩溃。因此如何有效地检测多线程程序死锁是软件测试和开发领域的重要研究课题之一。目前主流的静态死锁检测方法主要包括基于并发模型分析和基于数据流分析。基于数据流分析的死锁检测结果因为保守分析容易造成误判,基于并发模型分析不能很好地支持多线程程序建模,并且大部分研究主要针对Java程序的死锁检测,对使用Posix线程库开发的C多线程程序研究不多。针对这些问题,本文基于Posix线程库开发的C多线程程序,在调研现有死锁检测技术的基础上,结合程序静态分析技术提出一种基于Petri网模型的多线程死锁检测方法,该方法适用于两个或者多个线程的死锁检测。论文的主要工作如下:1)对多线程程序进行指针别名分析。在Linux平台上使用GCC编译器对程序预处理,得到控制流图CFG、SSA形式的中间代码和函数依赖关系。然后基于SSA形式的中间代码进行指针别名分析,得到锁、函数指针的可能值和所有线程的函数调用图。2)描述多线程程序转换为Petri网模型的方法。在得到函数调用图的基础上对函数调用图进行优化,目的是减少程序Petri网的规模。优化过程包括删除与锁操作无关的函数、函数内的优化和使用lockset技术分析锁相关函数等。然后对锁操作函数和优化后的函数调用图进行Petri网建模,这样得到一个与源程序并发语义等价的Petri网模型。3)设计一种基于Petri网的死锁检测算法。首先根据多线程程序中锁的使用特点,定义一个用来描述互斥锁、自旋锁和读写锁操作的特殊Petri网。然后分析这个特殊Petri网的动态性质,并提出基于混合整数规划的死锁检测算法,通过求解该算法来检测程序是否存在死锁。最后从理论上证明算法是否有解与多线程程序是否死锁之间的等价关系。4)基于上述方法的实现,本文对Apache、OpenLDAP、FastDFS、SQLite和Pfscan等多线程程序进行测试,实验结果表明本文提出的死锁检测方法能够有效地检测多线程程序中潜在的死锁。与已有的死锁检测研究相比,该方法的时间开销更小,适合处理大规模的多线程程序。
其他文献
本文主要对无线传感器网络分簇算法,数据融合和恢复算法进行了研究。首先对无线传感器的网络概念内容进行介绍,讲解了重要的设计目标、挑战和特点,介绍应用领域和研究的热点
移动自组网(mobile ad-hoc networks,MANETs)是由移动节点组成的一个多跳临时性自治系统,它不依赖于预设的基础设施并能够快速组网。由于移动自组网本身的特殊性,如何设计一
步态识别是计算机视觉研究领域的重要课题之一,因其具有远距离身份识别的特点,成为近年来计算机视觉领域中备受关注的前沿方向。本文主要对人体运动的跟踪、运动人体轮廓提取
经典智能规划要求智能体对规划世界的知识是完全的,规划过程中动作的效果是确定的,但现实世界中得到的信息往往是不完全、不确定的。为了满足智能规划技术应用于实践中的目的
随着无线通信技术的发展,移动计算的应用越来越广泛。人们可以通过无线网络随时随地访问信息。然而,不同于传统的分布式计算环境,移动计算环境有其鲜明的特点:移动性、断接性
随着网络安全的不断深入,传统的网络安全技术暴露出很多问题,入侵检测技术作为一种积极主动的安全防御技术,越来越受到大家的重视。但是,入侵检测技术在发展中也存在很多问题
随着我国工业的不断发展,工厂废气产生的大气污染日益严重。污染扩散可视化将有助于大气污染的科学管理,为环保部门提供直观、科学的分析手段。然而,建立污染扩散可视化场景
近几十年来,随着计算机硬件和软件的迅速发展,尤其是Internet技术的快速进步,人们收集到的数据以令人吃惊的速度日益增加,数据挖掘已经成为研究的热点;尤其是对于其中的分类
随着网络和信息化技术的发展,越来越多的行业和部门开始借助于网络进行辅助管理。而高校作为社会发展的主要推动力之一,更要走在时代前列,推动教学网站的网络化建设,而教学资源库
随着现代科技的高速发展,报纸、书籍、科技文献等以文字为载体的信息大量涌现。尤其是在国际互联网络高速发展的带动下,每天都会有不断涌现的海量信息。为了能从这些海量的信