论文部分内容阅读
随着半导体技术和发热量的限制,处理器频率的发展已经不再适用于摩尔定律,处理器频率的提高越来越缓慢,因此通过增加处理器上面的核心数量来提高处理器性能是一个有效的方法。多核处理器的普及给程序的并发性提出了新的要求,多线程编程技术使用越来越广泛,并发程序的并发度越来越高,越来越复杂。现代商业竞争中,时间就是金钱,研究表明软件开发过程中投入在软件调试阶段的时间越来越多。数据竞争错误是一类严重的多线程程序并发错误,这类错误会使得多线程程序在运行时进入一种非预期状态。为了对这类错误进行检测,需要提供方便高效的调试工具,协助开发人员尽可能快速准确地找出软件中的错误,以提高系统的可靠性和稳定性。 本文针对数据竞争错误产生时一般会出现线程间同步失控的现象设计实现检测系统。系统运行在Linux桌面操作系统上。假定被检测多线程程序使用多C语言编写,使用的线程库是POSIX多线程库,用GCC编译器进行编译。 本文首先总体介绍了数据竞争检测系统,包括并发程序调试的总体框架以及并发程序的动态符号执行以及数据竞争检测算法在系统中的设计与实现。并发程序的动态符号执行设计与实现部分分析了并发程序的符号执行技术的挑战,介绍了记录与重放功能设计,详细介绍了符号执行技术的实现。数据竞争检测算法设计与实现部分说明的数据竞争在并发程序中的表现形式,介绍了数据竞争检测算法中的锁集合算法,详细介绍了锁集合算法的原理以及对它进行的改进。最后对系统进行了功能性测试,展示系统对并发程序实验用例中数据竞争错误的检测过程。