[发明专利]一种基于偏序关系的通用并发缺陷检测方法及系统在审
申请号: | 202110265363.8 | 申请日: | 2021-03-11 |
公开(公告)号: | CN115080374A | 公开(公告)日: | 2022-09-20 |
发明(设计)人: | 蔡彦;云昊 | 申请(专利权)人: | 中国科学院软件研究所 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京君尚知识产权代理有限公司 11200 | 代理人: | 李文涛 |
地址: | 100190 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 关系 通用 并发 缺陷 检测 方法 系统 | ||
1.一种基于偏序关系的通用并发缺陷检测方法,其特征在于,包括以下步骤:
对待测程序插桩,收集内存访问事件、锁相关事件和分支事件,得到原始执行序列;
对原始执行序列进行过滤,得到精简执行序列;
根据精简执行序列和待测缺陷类别,查找可疑的事件对,生成具有潜在缺陷的待测序列;
根据精简执行序列和待测序列,确定事件集合和偏序集合;
将事件集合中的事件和偏序集合中的偏序关系,分别与有向图中的顶点和有向边一一对应,得到有向图,利用该有向图求解偏序闭包;如果图中无环路产生,那么断定待测序列能够真实发生,对应的事件对存在并发缺陷;如果图中产生环路,那么待测序列无法真实发生。
2.如权利要求1所述的方法,其特征在于,分支事件包括显示条件分支事件和面向对象编程中的隐式分支事件。
3.如权利要求1所述的方法,其特征在于,通过对原始执行序列中的局部变量和只读变量涉及的事件进行过滤,得到精简执行序列。
4.如权利要求1所述的方法,其特征在于,要检测的缺陷类别包括数据竞争、死锁、原子性违背、释放后再使用、空指针解引用和指针多次释放。
5.如权利要求4所述的方法,其特征在于,检测缺陷的方法包括:
数据竞争的检测方法为找到符合以下条件的待测事件对:两个事件处于不同线程,属于内存访问事件,至少一个是写事件,操作同一共享变量,持有的锁集不相交;将所述两个事件与在精简执行序列中与所述两个事件紧挨的前后各一个事件交叉排列,构成待测序列,并且所述两个事件之间不存在其他相关事件;如果待测序列能够真实发生,则为数据竞争;对于精简执行序列中包含至少三个线程时,通过邻接闭包确定邻接关系,以此确保两个事件之间不会出现其他相关事件;
死锁的检测方法为找到符合以下条件的待测事件对:两个事件处于不同线程,都是锁申请事件,持有的锁集不相交,相互持有对方正在申请的锁;将两个待测事件排到对应申请锁的获得事件后,构成待测序列,若待测序列能够真实发生,则为死锁;
原子性违背的检测方法为:对于两个原子执行的事件,找到其他与二者操作同一共享变量的事件,将这个事件排到两个原子事件之间,构成待测序列,若待测序列能够真实发生,则为原子性违背;
释放后再使用的检测方法为:将指针释放事件和指针使用事件构成待测序列,且要求两个事件之间不存在同一指针的相关事件;若待测序列能够真实发生,则为释放后再使用缺陷;
空指针解引用的检测方法为:将指针置空事件和指针使用事件构成待测序列,且要求两个事件之间不存在同一指针的相关事件;若待测序列能够真实发生,则为空指针解引用缺陷;
指针多次释放的检测方法为:将两个指针释放事件构成待测序列,且要求两个事件之间不存在同一指针的相关事件;若待测序列能够真实发生,则为指针多次释放缺陷。
6.如权利要求1所述的方法,其特征在于,偏序集合包括程序偏序、观察偏序、锁义偏序以及待测序列中的偏序。
7.如权利要求1所述的方法,其特征在于,如果待测序列中的事件持有相同的锁,那么在确定事件集合和偏序集合时,需要将对应的释放事件加入到事件集合中;同时在偏序集合中加入偏序使两个临界区互斥;根据事件集合找到各线程最后一个分支事件,其后的观察偏序不加入偏序集合。
8.如权利要求1所述的方法,其特征在于,在求解偏序闭包时,对于即将插入的一条边u,v,若有向图中存在v到u的路径,则产生环路,否则执行传递闭包、观察闭包和锁义闭包;对于额外要求事件之间不能存在其他相关事件的邻接关系,所述其他相关事件包括数据竞争、释放后再使用、空指针解引用、指针多次释放中的一个或多个缺陷对应的事件,还需要执行邻接闭包。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院软件研究所,未经中国科学院软件研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110265363.8/1.html,转载请声明来源钻瓜专利网。