[发明专利]基于多线程程序约束构建的数据竞争检测与证据生成方法有效
申请号: | 201410320943.2 | 申请日: | 2014-07-07 |
公开(公告)号: | CN104077144A | 公开(公告)日: | 2014-10-01 |
发明(设计)人: | 刘烃;张晓东;俞乐晨;刘沛;郑庆华 | 申请(专利权)人: | 西安交通大学 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 西安智大知识产权代理事务所 61215 | 代理人: | 段俊涛 |
地址: | 710049*** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 多线程 程序 约束 构建 数据 竞争 检测 证据 生成 方法 | ||
1.一种基于多线程程序约束构建的数据竞争检测与证据生成方法,其特征在于,包括如下步骤:
S1)在给定输入下,通过执行已插桩的待测程序以生成路径记录文件,且识别出执行路径中公有变量的访问点以便于约束构建;
S2)根据程序执行语义将执行路径中状态转移、线程交织关系转化为无量词一阶逻辑表达式,构建蕴含了所有可能的交织序列的多线程程序执行路径约束模型F;
S3)将路径中所有线程上可能发生数据竞争的两点视为数据竞争候选,收集所有候选并构建数据竞争候选集合DRCS,同时根据数据竞争的定义构建每个候选的竞争发生条件ρ;
S4)针对每一个候选竞争发生条件ρ,利用约束求解器验证F∧ρ是否有解;
S5)如果有解,则表示此竞争条件会触发真实的数据竞争;如果无解,则表示此候选不会触发数据竞争;
S6)当存在数据竞争时,输出该数据竞争的证据序列;
S7)对于数据竞争候选集合DRCS,如果遍历结束,则输出所有结果;否则,继续遍历下一个竞争候选;
S8)验证结束后,输出检测到的所有数据竞争以及对应的证据序列。
2.根据权利要求1所述基于多线程程序约束构建的数据竞争检测与证据生成方法,其特征在于,所述步骤S1)中插桩工作并非在源码或者二进制的层面上进行,而是在字节码的层面上完成,具体实施方法为:首先将待测多线程程序源码转化为中间字节码格式,即LLVM字节码;然后将具有监控功能的语句植入待测程序;最后将植入监控代码的字节码链接成可执行程序。
3.根据权利要求1所述基于多线程程序约束构建的数据竞争检测与证据生成方法,其特征在于,所述步骤S2)中多线程程序执行路径约束模型F蕴含了执行路径所有可能的交织序列,包括五种约束:路径表达式、内存模型约束、读写关系约束、偏序约束以及同步语义约束,定义分别如下:
1)路径表达式:描述线程内部的定义-使用链,以及控制线程内部状态转换;
2)内存模型约束:表示程序中语句、变量之间的关系,采用顺序一致性的语义,顺序一致性规定CPU按照代码中语句的顺序来执行程序;
3)读写关系约束:定义线程间的定义-使用链,规定共享变量所读取到的值,必须来自初始值以及最近的写值;
4)偏序约束:定义线程之间创建线程与终止线程操作语句于被操作线程语句之间的时序关系;
5)同步语义约束:定义线程之间同步控制操作语句之间的时序关系;
其中,定义-使用链为:将每一个线程序列转化为SSA格式,对于每一个SSA格式的执行序列,除去共享访问点都是一个完整的定义-使用链。
4.根据权利要求3所述基于多线程程序约束构建的数据竞争检测与证据生成方法,其特征在于,所述步骤S2)中多线程程序执行路径约束模型F的构建方法包括以下操作:
1)计算路径表达式,以控制线程内部状态转移;
2)计算内存模型约束,以线程内限制语句之间的关系;
3)计算读写关系约束,以建立线程间的定义-使用链;
4)计算同步语义约束,以定义线程间同步关系;
5)计算偏序约束,以描述线程创建与终止的语义;
最后,结合以上五种约束,构成约束模型F。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410320943.2/1.html,转载请声明来源钻瓜专利网。