[发明专利]基于静态共享变量识别的动态数据竞争检测方法有效
申请号: | 201110103794.0 | 申请日: | 2011-04-25 |
公开(公告)号: | CN102760095A | 公开(公告)日: | 2012-10-31 |
发明(设计)人: | 郑纬民;盛田维;陈文光;蒋运韫 | 申请(专利权)人: | 清华大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王莹 |
地址: | 100084 北京市海*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 静态 共享 变量 识别 动态 数据 竞争 检测 方法 | ||
1.一种基于静态共享变量识别的动态数据竞争检测方法,其特征在于,包括以下步骤:
S1:识别待检测程序的共享变量;
S2:对所述待检测程序中包含共享变量的基本块进行数据竞争检测插装和采样,得到所述待检测程序经插装和采样后的二进制代码,所述基本块是指一个连续的程序语句序列,控制流从它的开始进入,并从它的末尾离开,中间没有中断或者分支;
S3:运行所述二进制代码动态检测所述待检测程序中的数据竞争。
2.如权利要求1所述的基于静态共享变量识别的动态数据竞争检测方法,其特征在于,所述步骤S1具体包括:
S1.1:读取所述待检测程序的源代码,为源代码中的每一个函数建立函数信息,对所有函数根据其调用关系建立一个不完整的函数调用图,不完整的函数调用关系图不包括函数中指针的调用关系;
S1.2:对函数进行上下文敏感的指针分析,并构建完整函数调用图,指针分析的结果为每一个函数建立一个指针别名图。指针别名图的结点代表该函数中可以访问的内存空间,边代表结点之间的指向关系,指针分析还需要建立函数调用者指针和被调用者指针的指向图之间的关系;
S1.3:采用自底向上的方式遍历线程间完整的函数调用图,识别出共享变量。
3.如权利要求2所述的基于静态共享变量识别的动态数据竞争检测方法,其特征在于,所述函数信息包括:符号表信息、中间表示结构。
4.如权利要求1所述的基于静态共享变量识别的动态数据竞争检测方法,其特征在于,所述步骤S2具体包括:
S2.1:遍历函数中间表示的过程中收集包含共享变量的基本块集合;
S2.2:复制每一个包含共享变量的基本块,并且在基本块中插入采样检查语句,进行基本块采样;
S2.3:编译并链接经插装和采样后的源代码,生成插装和采样后的可执行的二进制代码。
5.如权利要求4所述的基于静态共享变量识别的动态数据竞争检测方法,其特征在于,所述步骤S2.2中在复制基本块之前包括步骤S2.2.1:检查一个基本块是否属于某个循环,若是,则复制整个外层循环并插入采样检查语句。
6.如权利要求5所述的基于静态共享变量识别的动态数据竞争检测方法,其特征在于,所述步骤S2.2.1之前还包括步骤:比较包含共享变量的基本块数量和函数中总的基本块数量,若两者之间的比例小于预定阈值,则步骤S2.2中不执行步骤S2.2.1,也不复制基本块,而进行函数粒度的采样。
7.如权利要求6所述的基于静态共享变量识别的动态数据竞争检测方法,其特征在于,所述预定阈值为:10%。
8.如权利要求1~7中任一项所述的基于静态共享变量识别的动态数据竞争检测方法,其特征在于,所述采样方式采用软件采样、突发性采样、可适应的采样及线程敏感采样中的一种或几种。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于清华大学,未经清华大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110103794.0/1.html,转载请声明来源钻瓜专利网。
- 上一篇:扣件结构
- 下一篇:一种用于储存汽车的设备