[发明专利]基于多线程程序约束构建的数据竞争检测与证据生成方法有效

专利信息
申请号: 201410320943.2 申请日: 2014-07-07
公开(公告)号: CN104077144A 公开(公告)日: 2014-10-01
发明(设计)人: 刘烃;张晓东;俞乐晨;刘沛;郑庆华 申请(专利权)人: 西安交通大学
主分类号: G06F9/44 分类号: G06F9/44
代理公司: 西安智大知识产权代理事务所 61215 代理人: 段俊涛
地址: 710049*** 国省代码: 陕西;61
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 基于 多线程 程序 约束 构建 数据 竞争 检测 证据 生成 方法
【说明书】:

技术领域

发明涉及可信软件及软件测试领域,特别涉及一种基于多线程程序约束构建的数据竞争检测与证据生成方法。

背景技术

随着处理器多核化的普及,多线程技术已经成为软件编程中提高CPU利用率不可或缺的技术。然而,由于线程之间交织的不确定性,多线程程序执行过程中可能会出现一些难以预料的行为导致程序出错,例如对临界区没有做好同步工作而导致的数据竞争问题。数据竞争是两个不同的线程在没有同步保护的情况同时访问一个内存,并且至少有一个写操作。数据竞争不一定导致程序错误,因为有些程序员故意让程序有数据竞争以提高运行的效率,但是有调查表明5-24%的数据竞争会对程序产生坏影响。数据竞争很难以被发现,因为它们经常发生在一些低概率出现的交织序列中,在现实中往往需要花很多时间去定位,其引起的错误如同“corner error”,即使在软件发布时也未必能够完全清除它们。因此,数据竞争检测是多线程程序测试领域最受关注的研究点之一。

过去几十年中数据竞争检测已有大量研究,设计出很多杰出的自动化检测工具,主要分为静态与动态分析技术。静态方法通过静态检测程序所有的路径来推断程序中的所有数据竞争,可以检测出大部分数据竞争;但由于使用大量假设,静态分析方法会产生无效的数据竞争,导致误报率较高。动态方法通过监控一次执行中内存与同步信息以确定是否存在数据竞争,能够提供较高精度的检测结果;但是动态分析方法受到交织与路径的影响,往往要通过多次执行来提高覆盖率。本文将静态代码分析与程序执行过程监测相结合,以提高覆盖率且尽可能消除误报。

现有的动态检测技术主要分为三种:基于lockset、基于happens-before与二者结合的方法。1)基于lockset的方法对线程交织不敏感,但是存在误报情况,即无效竞争。2)基于happens-before的方法只检测某特定交织序列上的数据竞争,检测结果虽可靠,但敏感于线程交织。3)混合方法结合了两者的优点,并且试图减小各自的缺点,但也面临如不能够搜索出隐藏的错误、lockset高误报引起的无效报警等问题。

发明内容

为了克服上述现有技术的缺点,本发明的目的在于提供一种基于多线程程序约束构建的数据竞争检测与证据生成方法,根据多线程程序语义构建约束表达式,将数据竞争检测问题转化为约束求解问题,采用约束求解器检测可能存在的数据竞争,并生成触发数据竞争的程序执行路径。

为了实现上述目的,本发明采用的技术方案是:

一种基于多线程程序约束构建的数据竞争检测与证据生成方法,包括如下步骤:

S1)在给定输入下,通过执行已插桩的待测程序以生成路径记录文件,且识别出执行路径中公有变量的访问点以便于约束构建;

S2)根据程序执行语义将执行路径中状态转移、线程交织关系转化为无量词一阶逻辑表达式,构建蕴含了所有可能的交织序列的多线程程序执行路径约束模型F;

S3)将路径中所有线程上可能发生数据竞争的两点视为数据竞争候选,收集所有候选并构建数据竞争候选集合DRCS,同时根据数据竞争的定义构建每个候选的竞争发生条件ρ;

S4)针对每一个候选竞争发生条件ρ,利用约束求解器验证F∧ρ是否有解;

S5)如果有解,则表示此竞争条件会触发真实的数据竞争;如果无解,则表示此候选不会触发数据竞争;

S6)当存在数据竞争时,输出该数据竞争的证据序列;

S7)对于数据竞争候选集合DRCS,如果遍历结束,则输出所有结果;否则,继续遍历下一个竞争候选;

S8)验证结束后,输出检测到的所有数据竞争以及对应的证据序列。

本发明进一步的改进在于:所述步骤S1)中插桩工作并非在源码或者二进制的层面上进行,而是在字节码的层面上完成,具体实施方法为:首先将待测多线程程序源码转化为中间字节码格式,即LLVM字节码;然后将具有监控功能的语句植入待测程序;最后将植入监控代码的字节码链接成可执行程序。

本发明进一步的改进在于:所述步骤S2)中多线程程序执行路径约束模型F蕴含了执行路径所有可能的交织序列,包括五种约束:路径表达式、内存模型约束、读写关系约束、偏序约束以及同步语义约束,定义分别如下:

1)路径表达式:描述线程内部的定义-使用链,以及控制线程内部状态转换;

2)内存模型约束:表示程序中语句、变量之间的关系,采用顺序一致性的语义,顺序一致性规定CPU按照代码中语句的顺序来执行程序;

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/201410320943.2/2.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top