【技术实现步骤摘要】
一种针对并发程序数据竞争动态检测方法及系统
本专利技术属于并发程序软件测试研究领域,具体涉及一种针对并发程序数据竞争动态检测方法及系统
技术介绍
并发程序设计已成为现如今程序使用和设计的主流。并发程序在执行I/O操作时,线程处于阻塞状态,CPU切换至其他已就绪线程执行,不用像单线程模型一样一直等待I/O操作的结束,这种方式大大提升了CPU的利用率和程序整体执行效率。同时,并发程序的不同线程通过共享内存来达成临界区资源共享的目的。然而,并发程序存在线程调度随机性和共享内存访问隐蔽性的问题,在执行时会受到不同程序影响。这些问题加大了程序员编写程序的难度,很容易导致程序存在缺陷,这种缺陷在执行时产生,导致程序出错,甚至是宕机奔溃。并发程序的缺陷主要包括:数据竞争、死锁、原子性违背以及顺序违背。其中数据竞争缺陷对程序的危害最为严重,且具有隐蔽性较强,难以检测的特点,据研究,只要2-7%的数据竞争可被程序员直接通过源码发现。因此,对数据竞争缺陷的检测研究一直是热门且有价值的。目前已经提出的数据竞争检测方法主要分 ...
【技术保护点】
1.一种针对并发程序数据竞争动态检测方法,其特征在于,包括:/n步骤1、通过第一动态插桩代码调用插桩运行环境提供的插桩接口,在所述并发程序执行时监控可能造成数据竞争缺陷的第一事件,并在所述第一事件前后插入第一分析代码和调度代码,通过所述第一分析代码获取所述第一事件的信息,通过所述调度代码干扰线程的调度,达到增加线程调度的目的;/n步骤2、将所述可能造成数据竞争缺陷的第一事件作为输入,实现数据竞争检测算法,输出真正造成数据竞争缺陷的第二事件,生成数据竞争检测报告;/n步骤3、通过第二动态插桩代码跟踪所述数据竞争检测报告中的造成数据竞争缺陷的第二事件,并在所述第二事件前后插入第 ...
【技术特征摘要】
1.一种针对并发程序数据竞争动态检测方法,其特征在于,包括:
步骤1、通过第一动态插桩代码调用插桩运行环境提供的插桩接口,在所述并发程序执行时监控可能造成数据竞争缺陷的第一事件,并在所述第一事件前后插入第一分析代码和调度代码,通过所述第一分析代码获取所述第一事件的信息,通过所述调度代码干扰线程的调度,达到增加线程调度的目的;
步骤2、将所述可能造成数据竞争缺陷的第一事件作为输入,实现数据竞争检测算法,输出真正造成数据竞争缺陷的第二事件,生成数据竞争检测报告;
步骤3、通过第二动态插桩代码跟踪所述数据竞争检测报告中的造成数据竞争缺陷的第二事件,并在所述第二事件前后插入第二分析代码,通过所述第二分析代码获取所述第二事件的名称和所述第二事件当前所在的线程ID;
步骤4、将所述第二事件的名称和对应的线程ID作为输入,实现数据竞争验证算法,过滤所述数据竞争检测报告中不正确的第二事件,生成最终的数据竞争验证报告。
2.根据权利要求1所述的方法,其特征在于,所述步骤2中实现数据竞争验证算法的具体流程包括:
步骤2.1、对所述并发程序中每个共享变量v,初始化它的锁集C(v)={Locki}程序中所有的锁,其中,Locki为第i个锁变量,i=0,1,…n,n为所述并发程序中锁变量的个数;
步骤2.2、对于每个线程t,均维护一个锁集L(t)表明当前线程获得的锁;
步骤2.3、边执行所述并发程序边进行插桩;
步骤2.4、判断当前所述并发程序是否在执行访问共享变量v操作,若是执行步骤2.5,否则执行步骤2.3;
步骤2.5、更新C(v)为当前共享变量v获得的锁与当前执行线程获得的锁的交集,即C(v)=C(v)∩L(t);
步骤2.6、判断C(v)是否为空集,即若为空,执行步骤2.7,否则执行步骤2.3;
步骤2.7、报告数据竞争缺陷,返回步骤2.3;
重复上述步骤2.2-2.7,直至算法终止。
3.根据权利要求1所述的方法,其特征在于,所述步骤2中生成数据竞争检测报告的具体流程包括:
将步骤1所述的第一动态插桩代码和步骤2所述的数据竞争检测算法以动态链接的形式链接到所述并发程序,运行所述并发程序实现动态检测并输出造成数据竞争缺陷的事件,生成数据竞争检测报告。
4.根据权利要求1所述的方法,其特征在于,所述步骤4中的数据竞争验证算法的实现流程包括:
步骤4.1、持续跟踪所述并发程序中造成数据竞争缺陷的事件,为二元组<E1,E2>的形式,其中,E1和E2为构成数据竞争缺陷的两个事件;
步骤4.2、判断当前执行的线程中,是否有线程执行到事件E1,若有,执行步骤4.3,否...
【专利技术属性】
技术研发人员:杨金涛,刘远,郭镔,杨森,
申请(专利权)人:北京明略昭辉科技有限公司,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。