论文部分内容阅读
多线程编程广泛应用于当今多核、分布式系统中,是提高程序性能、充分利用并行体系结构硬件资源的一种重要手段。但是,多线程程序编程比较困难,容易引起并发错误,而这些并发错误具有难触发、难调试、难检测等特点。面对这一挑战,人们进行了广泛地研究并提出了多种重要的分析和检测方法。其中,自动分析检测多线程程序技术是近些年来多线程程序分析领域的研究热点。 本文针对多线程程序中的一种基础性问题—可能并行(MHP)分析问题,分别提出了5项多线程程序分析技术: 提出了一种基于静态调度的多线程程序模拟执行技术。该技术首次将操作系统的调度思想引入到静态多线程程序分析中,通过模拟多线程程序的动态执行方式,精确地获得多线程程序的行为特征。实验表明,该技术方案可以有效地提升多线程程序中同步源语的匹配率,为多种静态多线程程序分析奠定了基础。 提出了一种基于静态向量时间的MHP分析算法。与传统的向量时间不同,静态向量时间通过将“数字时钟”替换为“符号时钟”,并将每个维度扩展为“符号时钟”的集合,从而静态地表达复杂的多线程程序语句之间的关系。该方法扩展了向量时间的应用范围,提高了MHP分析计算的效率。实验表明,与现有的算法相比,该算法的计算性能能达到前者的1828倍,而内存消耗仅为前者的150分之一。 提出了一种需求驱动的MHP分析算法。该算法通过将MHP分析问题形式化为上下文无关语言(CFL)图可达问题,求解用户提交的任意一对语句之间的可能并行关系。据所知,这是第一个需求驱动的MHP分析算法,为MHP分析领域提供了一种新的求解思路。实验表明,该算法平均求解一对语句的时空开销仅有150ms/200KB。 设计并实现了一款静态数据竞争检测器LDruid。LDruid支持上下文不敏感和上下文敏感两种分析方式,集成了多种高效的静态分析技术,包括消除线程内变量的共享变量分析、确定临界区间的互斥锁分析以及基于静态向量时间的MHP分析。实验表明,静态数据竞争检测器LDruid可以有效地减少LockSmith数据竞争器检测结果的30%误报,而检测时间仅为后者的10%。 提出了一种基于动态调度的多线程测试方法以提高程序测试覆盖率。该方法利用静态分析技术获得能够影响分支条件变量的共享变量语句访问位置,通过判断这些访问位置是否可能并行执行,插桩代码,以达到在程序测试过程中控制这些访问位置的执行顺序的目的。实验表明,该研究方法可以有效地提高多线程程序测试的覆盖率,丰富了多线程程序测试的方法学。