本发明专利技术公开了一种用于检测中断驱动型程序数据竞争的系统,该系统由前端处理器和数据竞争分析引擎组成;其中前端处理器包括:反汇编器、词法/语法分析器、控制流图构造器、函数调用关系图构造器;数据竞争分析引擎包括:中断优先级分析模块、中断状态分析模块、内存访问分析模块和竞争条件识别器。本发明专利技术采用静态检测方法,以源代码或汇编代码为输入,无需运行被测程序,能够在软件开发的早期阶段应用,自动化程度较高;对中断使能状态进行了迭代的过程间分析,其中,“迭代”能够最大限度地收集所有可能的中断切换情况,减少数据竞争检测的漏报;“过程间”考虑了函数调用以及中断进入对程序状态的影响,提高了检测的精确度和检测效率。
【技术实现步骤摘要】
本专利技术涉及一种检测数据竞争的系统,特别是涉及一种用于检测中断驱动型程序 数据竞争的系统,属于计算机软件测试与验证技术。
技术介绍
数据竞争是并发程序中一种复杂的程序行为,它发生在多个并发执行流(如线 程、任务、中断)对同一数据单元进行同时读写,且至少其中一个操作是写操作时。由于数 据竞争中涉及的两次访问之间的次序不可确定,程序可能会因此产生异常行为,严重时甚 至会导致软件或系统失效。然而,数据竞争具有小概率的特点,往往需要在特定的外部环 境、执行流切换条件下才会发生,且难以复现,对其调试和测试都很困难。因而,数据竞争的 自动检测方法和工具近年来一直都是业界的重要关注点。值得注意的是,目前已知的数据竞争检测方法大都面向多线程程序,如微软 公司的200510063733.0号专利“用于检测多线程程序中潜在竞争的方法和系统”、ACM Symposium on Operating Systems Principles (SOSP' 2003)中 Engler 等人的"RacerX : Effective, static detection of race conditions and deadlocks,,、ACMSIGS0FT Symposium on the Foundations of Software Engineering (FSE' 2007)中 Voung 等人的 "RELAY static race detection on millions of lines of code”,等等。这些针对多线 程程序的方法大多无法适用于中断驱动型程序的数据竞争检测,主要原因如下(1)中断的并发语义特征、同步、抢占关系与线程不同。具体来讲,对于中断驱动型 程序,程序编写者一般通过开关中断的方式保证操作不被中断,而对于多线程程序,程序编 写者一般采用特定的同步机制(如同步锁、信号量等)避免数据竞争;中断往往是由外界条 件触发,而线程则是由线程调度器按照一定的算法调度而获得执行权;中断的抢占关系是 非对称的,即高优先级的中断可以抢占低优先级中断,反之则不然,对于线程,这种关系是 对称的。(2)中断驱动型程序是典型嵌入式软件,与硬件交互频繁,运行环境特殊,程序的 执行状态易被外界改变,因此,在数据流分析等方面与传统程序不同。而另一方面,由于缺乏相应的自动分析工具,中断驱动型程序的开发者一般通过 传统的软件测试方法来试图发现数据竞争,即设计测试用例、执行测试用例、查看运行状态 的方式。这种手段针对性不强,只能依赖重复地执行软件并观察运行结果来检查数据竞争 是否存在,而且,即使在某次测试中发现了问题,也难以复现;由于测试是无法穷举所有程 序执行状态的,很多潜在的数据竞争也因此被遗漏掉,造成隐患;此外,嵌入式软件的运行 倚赖外部设备和环境,无法在软件开发的早期实施测试活动,导致数据竞争往往只能在后 期阶段被发现,此时缺陷修复的代价巨大。
技术实现思路
本专利技术的技术解决问题是克服现有技术的不足,提供一种用于检测中断驱动型程序数据竞争的系统,本专利技术基于静态分析技术,以被检测程序的目标代码或源代码为输 入,获取被检测程序的多种状态信息,在此基础上识别出程序中潜在的数据竞争,检测精确度尚。本专利技术的技术解决方案是一种用于检测中断驱动型程序数据竞争的系统,由前 端处理器和数据竞争分析引擎组成;所述前端处理器包括反汇编器、词法/语法分析器、 控制流图构造器、函数调用关系图构造器;所述数据竞争分析引擎包括中断优先级分析 模块、中断状态分析模块、内存访问分析模块和竞争条件识别器;反汇编器用于将被测目标程序进行反汇编并输出汇编代码;词法/语法分析器对被测程序的源代码或汇编代码进行词法分析、语法分析,输 出抽象语法树和符号表;控制流图构造器利用抽象语法树和符号表为被测程序中每个函数构造出控制流 图;函数调用关系图构造器利用抽象语法树和符号表为被测程序构造出函数调用关 系图;中断优先级分析模块,用于分析控制流图中每个结点处对应的中断优先级状态, 中断优先级分析方法为(1)从被测程序的控制流图入口点处开始进行遍历并记录每个控制流图结点处的 程序状态;(2)设结点N当前IP寄存器的状态为S ;(3)如果结点N中的语句修改了 IP寄存器的值,设值为X,则更新结点N的状态S ={X};(4)如果结点N中包含函数调用,设被调用函数为F,则首先查找是否存在函数F 的缓存记录,如果存在函数F的缓存记录则应用缓存,并取得缓存中记录的输出状态为S1, 将IP寄存器状态更新为S1 ;如果不存在函数F的缓存记录则对函数F的控制流程图进行分 析,根据分析结果得到函数F的输出状态S2,将IP寄存器状态更新为S2,并利用函数F的输 出状态&更新函数F的缓存记录,缓存中记录的是输入状态与输出状态的对应关系;(5)根据结点N的IP状态判断该结点N的优先级;中断状态分析模块,用于计算控制流图中每个结点处对应的中断使能状态;中断 状态分析的方法为(a)从被测程序的控制流图入口点处开始进行遍历并记录每个控制流图结点处的 程序状态;(b)设结点N当前IE寄存器的状态为S ;(c)如果结点N中的语句修改了 IE寄存器的值,设值为X,则更新结点N的状态S ={X};(d)如果结点N中包含函数调用,设被调用函数为F,则首先查找是否存在函数F 的缓存记录,如果存在函数F的缓存记录则应用缓存,并取得缓存中记录的输出状态为S1, 将IE寄存器状态更新为S1 ;如果不存在函数F的缓存记录则对函数F的控制流程图进行分 析,根据分析结果得到函数F的输出状态S2,将IE寄存器状态更新为S2,并利用函数F的输 出状态&更新函数F的缓存记录,缓存中记录的是输入状态与输出状态的对应关系;(e)根据结点N的IP状态以及IE状态判断该结点N是否允许中断,对于每个允许 进入的中断I的控制流程图进行分析,根据分析结果得到中断I的输出状态为s3,IE寄存 器状态更新为S = S U &;内存访问分析模块,用于获取控制流图中每个结点处的数据读写情况,根据每个 结点处的数据读写情况计算出每个中断处理程序的内存访问集合;每个中断处理程序内存 访问集合的计算方法为(A)从中断处理程序A的入口处开始遍历控制流程图,设置A的内存访问集合R为 空;(B)将该节点的内存访问状态集合合并到R中;(C)若该节点是函数调用,则把被调用函数的内存访问集合合并到R中;(D)根据该节点的中断使能状态和中断优先级状态,将优先级大于A且中断使能 允许的中断的内存访问集合合并到R ;竞争条件识别器,根据中断优先级分析模块、中断状态分析模块和的内存访问分 析模块的分析结果,识别出每个被测程序结点处存在的数据竞争,并生成数据竞争检测报生1=1 O本专利技术与现有技术相比的优点在于本专利技术采用静态检测方法,以源代码或汇编 代码为输入,无需运行被测程序,能够在软件开发的早期阶段应用,自动化程度较高;对中 断使能状态进行了迭代的过程间分析,其中,“迭代”能够最大限度地收集所有可能的中断 切换情况,减少数据竞争检测的漏报;“过程间”考虑了函数调用以及中断进入对程序状态 的影响,在过程间分析中采用了状态缓存策略,避免在相同上下文条件下本文档来自技高网...
【技术保护点】
一种用于检测中断驱动型程序数据竞争的系统,其特征在于:由前端处理器和数据竞争分析引擎组成;所述前端处理器包括:反汇编器、词法/语法分析器、控制流图构造器、函数调用关系图构造器;所述数据竞争分析引擎包括:中断优先级分析模块、中断状态分析模块、内存访问分析模块和竞争条件识别器;反汇编器:用于将被测目标程序进行反汇编并输出汇编代码;词法/语法分析器:对被测程序的源代码或汇编代码进行词法分析、语法分析,输出抽象语法树和符号表;控制流图构造器:利用抽象语法树和符号表为被测程序中每个函数构造出控制流图;函数调用关系图构造器:利用抽象语法树和符号表为被测程序构造出函数调用关系图;中断优先级分析模块,用于分析控制流图中每个结点处对应的中断优先级状态,中断优先级分析方法为:(1)从被测程序的控制流图入口点处开始进行遍历并记录每个控制流图结点处的程序状态;(2)设结点N当前IP寄存器的状态为S;(3)如果结点N中的语句修改了IP寄存器的值,设值为X,则更新结点N的状态S={X};(4)如果结点N中包含函数调用,设被调用函数为F,则首先查找是否存在函数F的缓存记录,如果存在函数F的缓存记录则应用缓存,并取得缓存中记录的输出状态为S1,将IP寄存器状态更新为S1;如果不存在函数F的缓存记录则对函数F的控制流程图进行分析,根据分析结果得到函数F的输出状态S2,将IP寄存器状态更新为S2,并利用函数F的输出状态S2更新函数F的缓存记录,缓存中记录的是输入状态与输出状态的对应关系;(5)根据结点N的IP状态判断该结点N的优先级;中断状态分析模块,用于计算控制流图中每个结点处对应的中断使能状态;中断状态分析的方法为:(a)从被测程序的控制流图入口点处开始进行遍历并记录每个控制流图结点处的程序状态;(b)设结点N当前IE寄存器的状态为S;(c)如果结点N中的语句修改了IE寄存器的值,设值为X,则更新结点N的状态S={X};(d)如果结点N中包含函数调用,设被调用函数为F,则首先查找是否存在函数F的缓存记录,如果存在函数F的缓存记录则应用缓存,并取得缓存中记录的输出状态为S↓[1],将IE寄存器状态更新为S1;如果不存在函数F的缓存记录则对函数F的控制流程图进行分析,根据分析结果得到函数F的输出状态S↓[2],将IE寄存器状态更新为S↓[2],并利用函数F的输出状态S↓[2]更新函数F的缓存记录,缓存中记录的是输入状态与输出状态的对应关系;(e)...
【技术特征摘要】
【专利技术属性】
技术研发人员:陈睿,郭向英,段永顥,张西超,侯成杰,董燕,于志杰,魏鹏,吴瑾,武占峰,张金巍,曾霞,左万娟,
申请(专利权)人:北京控制工程研究所,
类型:发明
国别省市:11[中国|北京]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。