CN102063328A - 一种用于检测中断驱动型程序数据竞争的系统 - Google Patents
一种用于检测中断驱动型程序数据竞争的系统 Download PDFInfo
- Publication number
- CN102063328A CN102063328A CN 201010611695 CN201010611695A CN102063328A CN 102063328 A CN102063328 A CN 102063328A CN 201010611695 CN201010611695 CN 201010611695 CN 201010611695 A CN201010611695 A CN 201010611695A CN 102063328 A CN102063328 A CN 102063328A
- Authority
- CN
- China
- Prior art keywords
- function
- state
- node
- analysis
- interrupt
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种用于检测中断驱动型程序数据竞争的系统,该系统由前端处理器和数据竞争分析引擎组成;其中前端处理器包括:反汇编器、词法/语法分析器、控制流图构造器、函数调用关系图构造器;数据竞争分析引擎包括:中断优先级分析模块、中断状态分析模块、内存访问分析模块和竞争条件识别器。本发明采用静态检测方法,以源代码或汇编代码为输入,无需运行被测程序,能够在软件开发的早期阶段应用,自动化程度较高;对中断使能状态进行了迭代的过程间分析,其中,“迭代”能够最大限度地收集所有可能的中断切换情况,减少数据竞争检测的漏报;“过程间”考虑了函数调用以及中断进入对程序状态的影响,提高了检测的精确度和检测效率。
Description
技术领域
本发明涉及一种检测数据竞争的系统,特别是涉及一种用于检测中断驱动型程序数据竞争的系统,属于计算机软件测试与验证技术。
背景技术
数据竞争是并发程序中一种复杂的程序行为,它发生在多个并发执行流(如线程、任务、中断)对同一数据单元进行同时读写,且至少其中一个操作是写操作时。由于数据竞争中涉及的两次访问之间的次序不可确定,程序可能会因此产生异常行为,严重时甚至会导致软件或系统失效。然而,数据竞争具有小概率的特点,往往需要在特定的外部环境、执行流切换条件下才会发生,且难以复现,对其调试和测试都很困难。因而,数据竞争的自动检测方法和工具近年来一直都是业界的重要关注点。
值得注意的是,目前已知的数据竞争检测方法大都面向多线程程序,如微软公司的200510063733.0号专利“用于检测多线程程序中潜在竞争的方法和系统”、ACM Symposium on Operating Systems Principles(SOSP’2003)中Engler等人的“RacerX:Effective,static detection of race conditions and deadlocks”、ACMSIGSOFT 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,将1P寄存器状态更新为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的缓存记录则应用缓存,并取得缓存中记录的输出状态为S1,将IE寄存器状态更新为S1;如果不存在函数F的缓存记录则对函数F的控制流程图进行分析,根据分析结果得到函数F的输出状态S2,将IE寄存器状态更新为S2,并利用函数F的输出状态S2更新函数F的缓存记录,缓存中记录的是输入状态与输出状态的对应关系;
(e)根据结点N的IP状态以及IE状态判断该结点N是否允许中断,对于每个允许进入的中断I的控制流程图进行分析,根据分析结果得到中断I的输出状态为S3,IE寄存器状态更新为S=S∪S3;
内存访问分析模块,用于获取控制流图中每个结点处的数据读写情况,根据每个结点处的数据读写情况计算出每个中断处理程序的内存访问集合;每个中断处理程序内存访问集合的计算方法为:
(A)从中断处理程序A的入口处开始遍历控制流程图,设置A的内存访问集合R为空;
(B)将该节点的内存访问状态集合合并到R中;
(C)若该节点是函数调用,则把被调用函数的内存访问集合合并到R中;
(D)根据该节点的中断使能状态和中断优先级状态,将优先级大于A且中断使能允许的中断的内存访问集合合并到R;
竞争条件识别器,根据中断优先级分析模块、中断状态分析模块和的内存访问分析模块的分析结果,识别出每个被测程序结点处存在的数据竞争,并生成数据竞争检测报告。
本发明与现有技术相比的优点在于:本发明采用静态检测方法,以源代码或汇编代码为输入,无需运行被测程序,能够在软件开发的早期阶段应用,自动化程度较高;对中断使能状态进行了迭代的过程间分析,其中,“迭代”能够最大限度地收集所有可能的中断切换情况,减少数据竞争检测的漏报;“过程间”考虑了函数调用以及中断进入对程序状态的影响,在过程间分析中采用了状态缓存策略,避免在相同上下文条件下对同一函数的重复分析,提高了检测的精确度和检测效率。
附图说明
图1为本发明检测系统的组成结构框图;
图2为本发明检测系统的检测流程图;
图3为本发明中断状态分析模块的分析流程图。
具体实施方式
如图1所示,一种用于检测中断驱动型程序中数据竞争的系统,由前端处理器和数据竞争分析引擎组成;所述前端处理器包括:反汇编器、词法/语法分析器、控制流图构造器、函数调用关系图构造器;所述数据竞争分析引擎包括:中断优先级分析模块、中断状态分析模块、内存访问分析模块和竞争条件识别器
反汇编器:用于将被测目标程序进行反汇编并输出汇编代码;
词法/语法分析器:对被测程序的源代码或汇编代码进行词法分析、语法分析,输出抽象语法树和符号表;若用户给定的是被测程序的目标代码,则首先对其进行反汇编得到对应的汇编代码,作为下一步分析的输入代码;若用户给定的是源程序,则源程序作为输入代码;
控制流图构造器:利用抽象语法树和符号表,为被测程序中每个函数构造出控制流图;
函数调用关系图构造器:利用抽象语法树和符号表,为被测程序构造出函数调用关系图;调用关系图是一个有向图,其中每个结点代表一个函数,每条边代表边的两个顶点代表的函数之间存在调用关系;控制流图是程序中函数的一种中间表示,其与程序源代码等价,是一个有向图,其中每个结点表示一个语句或一个基本块(连续且没有分支跳转语句的语句序列),每条边表示程序执行过程中的可能选择,控制流图类似程序的一个流程图,将程序转化为图进行分析是程序静态分析领域的一种常规做法。
中断优先级分析模块,用于分析控制流图中每个结点处对应的中断优先级状态,中断优先级分析方法为:
(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的缓存记录则应用缓存,并取得缓存中记录的输出状态为S1,将IE寄存器状态更新为S1;如果不存在函数F的缓存记录则对函数F的控制流程图进行分析,根据分析结果得到函数F的输出状态S2,将IE寄存器状态更新为S2,并利用函数F的输出状态S2更新函数F的缓存记录,缓存中记录的是输入状态与输出状态的对应关系;
(e)根据结点N的IP状态以及IE状态判断该结点N是否允许中断,对于每个允许进入的中断I的控制流程图进行分析,根据分析结果得到中断I的输出状态为S3,IE寄存器状态更新为S=S∪S3;
内存访问分析模块,获取CFG中每个结点的数据读写情况,即对哪些共享数据进行了访问,是读操作还是写操作;用于获取控制流图中每个结点处的数据读写情况,根据每个结点处的数据读写情况计算出每个中断处理程序的内存访问集合;每个中断处理程序内存访问集合的计算方法为:
(A)从中断处理程序A的入口处开始遍历控制流程图,设置A的内存访问集合R为空;
(B)将该节点的内存访问状态集合合并到R中;
(C)若该节点是函数调用,则把被调用函数的内存访问集合合并到R中;
(D)根据该节点的中断使能状态和中断优先级状态,将优先级大于A且中断使能允许的中断的内存访问集合合并到R;
竞争条件识别器,根据中断优先级分析模块、中断状态分析模块和的内存访问分析模块的分析结果,识别出每个被测程序结点处存在的数据竞争,并生成数据竞争检测报告。例如,当前结点对内存单元或变量M进行访问时,若中断进入,也对M进行了访问,则根据表1可确定此次访问是否造成数据竞争。
正在访问 | 中断访问 | 是否竞争 |
读 | 读 | 否 |
读 | 写 | 是 |
写 | 读 | 是 |
写 | 写 | 是 |
表1
中断优先级分析模块、中断状态分析模块、内存访问分析模块都基于数据流分析,其中中断优先级分析与中断使能状态分析采用了过程间分析,包括下列的操作内容:
(1)设置程序状态的初始集合,从被测程序主程序的控制流图入口点处开始进行遍历与分析,在分析过程中记录每个CFG结点处的程序状态;
(2)当被分析结点不是函数调用时,根据其中的程序语句更新程序状态集;否则,根据此时的程序状态查询函数缓存记录,见步骤(3);
(3)如果在缓存中能够查找到可用的历史记录,则应用缓存结果,跳过对被调用函数的分析,如果缓存查询没有命中,则对被调用函数进行遍历分析,分析完毕后将此次分析的结果写入函数缓存记录中。
(4)根据被分析结点当前的中断使能状态以及中断优先级状态,将此处可能进入的中断当作一次隐式的函数调用,被调用的函数则为对应的中断处理程序,进行步骤(3)的操作。
在数据流分析中,过程间分析是一种提高分析精确度的分析特性,指在分析过程中考虑函数调用对程序状态的影响。当不采用过程间分析时,在遇到函数调用时,被调用函数对程序状态的影响将被忽略,导致分析结果不够精确。
在下面结合实例来进一步说明本发明的技术方案,在以下的实施方案中,将提供一种针对Intel MCS-51平台目标程序的数据竞争检测方法。Intel MCS-51系列处理器共有5或6个中断源,分为2个优先级。IE寄存器用来设置各个中断的使能标志,通过IE寄存器的值可以得出当前各个中断的使能状态。IP寄存器用来设置中断的优先级,通过IP寄存器的值可以得出当前各个中断的优先级状态。在中断使能的情况下,中断可以打断主程序,高优先级中断可以打断低优先级中断,反之则不然。在其他处理器体系中,也存在类似的中断机制。因此,可以了解,本发明方法并不局限于特定的平台,同时也不局限于目标程序。
附图2给出了本实施例的具体流程,如下:
步骤11,读取被测程序的目标程序,调用MCS-51处理器对应的反汇编器对目标程序进行反汇编,产生汇编代码,并保存为8051汇编程序文件。
步骤12,对步骤11产生的汇编程序文件进行词法分析和语法分析,构造出被测程序的抽象语法树AST。AST是与程序等价的一种树形数据结构,不同编程语言编写的程序AST的结构不同,AST的结构一般由语法分析器决定。
如果用户给定的是源代码,则无需进行步骤11,直接对源代码进行词法和语法分析,产生AST以及符号表。
步骤13,遍历AST,产生控制流图CFG和调用关系图。
对于一个被分析程序,存在若干控制流图CFG和一个调用关系图。一个CFG对应一个函数,是一个有向图,控制流图CFG具有一个入口、一个出口,从入口到出口之间的一条路径表示程序运行时一次可能的执行序列。对于MCS-51汇编程序,在语法上不存在明显的函数定义,我们采用下面的步骤进行控制流图CFG的构造:
●确定所有函数的入口。将中断处理程序视为函数,则中断处理程序的入口地址就是函数的入口地址;将LCALL、ACALL指令的操作数作为函数入口地址;将地址0000H作为主函数的入口。
●从每个函数的入口地址开始确定该函数的代码范围。对于中断处理程序,从入口地址的汇编代码开始向后遍历,当遇到RETI指令时,将该指令作为函数的结尾;对于其他函数,RET指令作为函数结尾的标志。
●对于每个函数,根据每条指令的语义,建立指令之间的前驱、后继关系,最后形成函数对应的CFG。
调用关系图的构造方法比较简单,对每条ACALL、LCALL指令,确定该指令在函数A范围内,其操作数为函数B的入口地址,则在调用图中创建边A->B。
步骤14,根据构造好的控制流图和调用关系图,对被测程序进行数据流分析,依次对中断优先级、中断使能状态和内存访问进行分析。
数据流分析采用的是KilDall在第一届ACM Symposium on Principles ofProgramming Languages(POPL’73)的“A unified approach to globalprogramming optimization”中提出的方法。在此方法基础上,通过对IP寄存器值的过程间分析完成中断优先级分析;对IE寄存器的值进行过程间分析,从而获得每个程序点处所有可能的中断使能状态;内存访问分析是获得每个结点处的内存读写情况,如,对于指令MOV 80H,#00H,其内存访问情况是:对内存80H进行了写操作。本发明中的过程间分析方法是针对中断驱动型程序提出的,是对KilDall方法的扩展。以中断使能状态为例,详细步骤见附图3:从主程序的CFG入口开始进行IE状态分析,遍历CFG的方式由数据流分析框架中采用的算法确定,这是一个迭代的过程,直到CFG中各个结点的程序状态不再改变。
对于遍历过程中遇到的每个结点N,完成以下步骤:
●设结点N当前的IE状态为S。
●如果结点N中的语句修改了IE的值,设值为X,则更新结点N的状态S={X}。
●如果结点N中包含函数调用,设被调用函数为F,则首先查找是否存在函数F的缓存记录,如果存在则应用缓存,并取得缓存中记录的输出状态为S1,更新S=S1;如果不存在则对函数F的控制流图CFG进行分析,经分析得到函数F将IE状态更新为S2,更新S=S2,并更新函数F的缓存,缓存中记录的是输入状态与输出状态的对应关系。
●根据结点N的IP状态以及IE状态,判断该结点N是否允许中断。对每个允许进入的中断I,对其控制流图CFG进行分析,过程与函数调用的处理类似,获得中断I的输出状态为S3,则更新S=S∪S3。
●完成对结点N的一次分析,继续对其余结点进行分析。
对于中断优先级分析和内存访问分析,操作步骤类似,所不同的是关注的程序状态不同,中断使能状态分析关注IE寄存器的值,中断优先级分析关注IP寄存器的值,内存访问分析关注所访问的内存地址。
步骤14获得了CFG中每个结点处的所有可能的中断优先级状态、中断使能状态和内存访问状态。在具体的实现中,这些状态都用集合表示。
步骤15,计算每个中断处理程序的内存访问集合,这是一个迭代的过程,具体步骤如下:
●从中断处理程序A的入口处开始遍历其CFG,设置A的内存访问集合R为空;
●将该节点的内存访问状态集合合并到R中;
●若该节点是函数调用,则把被调用函数的内存访问集合合并到R中;
●根据该节点的中断使能状态和中断优先级状态,将优先级大于A且中断使能允许的中断的内存访问集合合并到R。
步骤16,根据表1,对各个CFG中的每个结点进行竞争识别。例如,中断A中的某个结点N处的IE状态表明,此处中断B的使能是打开的,而根据此处的中断优先级状态,中断B的优先级大于A,这意味着中断B可能在程序运行到结点N处时进入。进一步分析,若N的内存访问集合与B的内存访问集合中都存在对内存单元M的访问,且至少有一次为写操作,则这两次访问之间存在竞争条件。
步骤17,根据步骤16得到的可能竞争集合,将集合中每次竞争的细节报告给用户,包括竞争发生在程序中的哪两处位置、此时的中断使能状态、中断优先级状态、竞争中访问的是哪个内存、竞争中的两次访问分别是读操作还是写操作。
根据上述过程,本发明设计了一种面向中断驱动型程序的数据竞争检测系统(RaceChecker),该系统能够实现对中断驱动型程序的数据竞争检测,适用于C语言程序和目标程序。
●反汇编器,对于本实施例,输入为目标程序,反汇编器负责将二进制的目标程序反汇编,并保存为可以阅读的汇编程序文件。
●词法/语法分析器,本实施例中的词法/语法分析器针对MCS-51汇编语言,将用MCS-51汇编语言编写的程序解析,输出抽象语法树AST和符号表。
●CFG构造器,遍历AST和符号表为每一个函数或中断处理程序生成对应的控制流图CFG。CFG是程序代码的等价表示形式,是数据流分析的基础。
●调用图构造器,通过遍历AST和符号表,根据程序中所有存在的函数调用关系构造出函数调用关系图。
数据竞争分析引擎是本发明中RaceChecker系统的关键部分,用于读取、遍历、分析前端处理器产生的AST、CFG和函数调用关系图,通过各种特定的分析算法,实现数据竞争检测的目的。具体又分为以下几个子模块:
数据流分析是完成中断状态分析、中断优先级分析以及内存访问分析的基础,负责实现了KilDall提出的迭代数据流分析算法。该算法能够有效地解决一类数据流分析问题,而本发明中涉及的中断状态分析、中断优先级分析以及内存访问分析都是该算法能够求解的实例问题。在数据流分析框架基础上求解上述问题能够避免系统构建中重复性的工作。
中断优先级分析模块,构建于数据流分析框架基础上,负责求解CFG中每个结点处的中断优先级状态,即IP寄存器可能的值的集合。
中断状态分析模块,构建于数据流分析框架基础上,负责求解CFG中每个结点处的中断使能状态集合,即IE寄存器可能的值的集合。
内存访问分析模块,构建于数据流分析框架基础上,负责计算CFG中每个结点处的内存访问情况,以及进一步获得每个中断服务程序的内存访问情况。
竞争条件识别器,遍历每个CFG中的每个结点,根据该结点处的内存访问集合、中断优先级状态、中断使能状态以及各处理程序的内存访问集合,计算出可能的数据竞争集合。
用户界面模块包含检测工程管理视图、代码编辑器、分析结果视图,用于提供用户使用的操作界面,呈现分析结果。本发明的RaceChecker系统已经进行了多次试验,列举如下:
1)对采用C51编写的某航天器应用软件进行了数据竞争检测,RaceChecker共报告96次数据竞争,经进一步分析发现,其中包含了1个可能严重影响航天器功能的软件缺陷。
2)对采用MCS-51汇编语言编写的某卫星RTU(远置终端单元,RemoteTerminal Unit)软件进行了数据竞争检测,复现了被其他测试手段发现的2个严重的数据竞争缺陷。
3)对采用C51编写的某卫星控制软件进行了数据竞争检测,RaceChecker发现了1个数据竞争缺陷,该缺陷最终通过使用约束避免。
上述试验中的检测过程花费时间均在5~60s范围内,且用户只需提供目标代码或源代码,即可自动完成检测。采用本发明方法的RaceChecker系统,由于采用了静态分析技术,无需搭建测试环境即可完成检测,相比其他技术手段,具有自动化程度高、检测快速等优点。
以上所述,仅为本发明的较佳实例而已,并非用于限定本发明的保护范围。
本发明未详细描述内容为本领域技术人员公知技术。
Claims (1)
1.一种用于检测中断驱动型程序数据竞争的系统,其特征在于:由前端处理器和数据竞争分析引擎组成;所述前端处理器包括:反汇编器、词法/语法分析器、控制流图构造器、函数调用关系图构造器;所述数据竞争分析引擎包括:中断优先级分析模块、中断状态分析模块、内存访问分析模块和竞争条件识别器;
反汇编器:用于将被测目标程序进行反汇编并输出汇编代码;
词法/语法分析器:对被测程序的源代码或汇编代码进行词法分析、语法分析,输出抽象语法树和符号表;
控制流图构造器:利用抽象语法树和符号表为被测程序中每个函数构造出控制流图;
函数调用关系图构造器:利用抽象语法树和符号表为被测程序构造出函数调用关系图;
中断优先级分析模块,用于分析控制流图中每个结点处对应的中断优先级状态,中断优先级分析方法为:
(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的缓存记录则应用缓存,并取得缓存中记录的输出状态为S1,将IE寄存器状态更新为S1;如果不存在函数F的缓存记录则对函数F的控制流程图进行分析,根据分析结果得到函数F的输出状态S2,将IE寄存器状态更新为S2,并利用函数F的输出状态S2更新函数F的缓存记录,缓存中记录的是输入状态与输出状态的对应关系;
(e)根据结点N的IP状态以及IE状态判断该结点N是否允许中断,对于每个允许进入的中断I的控制流程图进行分析,根据分析结果得到中断I的输出状态为S3,IE寄存器状态更新为S=S∪S3;
内存访问分析模块,用于获取控制流图中每个结点处的数据读写情况,根据每个结点处的数据读写情况计算出每个中断处理程序的内存访问集合;每个中断处理程序内存访问集合的计算方法为:
(A)从中断处理程序A的入口处开始遍历控制流程图,设置A的内存访问集合R为空;
(B)将该节点的内存访问状态集合合并到R中;
(C)若该节点是函数调用,则把被调用函数的内存访问集合合并到R中;
(D)根据该节点的中断使能状态和中断优先级状态,将优先级大于A且中断使能允许的中断的内存访问集合合并到R;
竞争条件识别器,根据中断优先级分析模块、中断状态分析模块和的内存访问分析模块的分析结果,识别出每个被测程序结点处存在的数据竞争,并生成数据竞争检测报告。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010611695 CN102063328B (zh) | 2010-12-17 | 2010-12-17 | 一种用于检测中断驱动型程序数据竞争的系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010611695 CN102063328B (zh) | 2010-12-17 | 2010-12-17 | 一种用于检测中断驱动型程序数据竞争的系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102063328A true CN102063328A (zh) | 2011-05-18 |
CN102063328B CN102063328B (zh) | 2012-12-26 |
Family
ID=43998614
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010611695 Active CN102063328B (zh) | 2010-12-17 | 2010-12-17 | 一种用于检测中断驱动型程序数据竞争的系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102063328B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103765390A (zh) * | 2011-09-02 | 2014-04-30 | 英特尔公司 | 利用改进的检测过滤的数据竞争分析 |
CN104077226A (zh) * | 2014-07-07 | 2014-10-01 | 西安交通大学 | 基于程序约束构建的多线程程序输出唯一性检测与证据生成方法 |
CN104090798A (zh) * | 2014-07-08 | 2014-10-08 | 南京大学 | 动静态结合的中断驱动程序数据竞争检测方法 |
CN107943481A (zh) * | 2017-05-23 | 2018-04-20 | 清华大学 | 基于多模型的c语言程序代码规范构造方法 |
CN107967213A (zh) * | 2017-12-07 | 2018-04-27 | 上海宇航系统工程研究所 | 一种航天软件临界资源访问冲突检测方法 |
CN108459963A (zh) * | 2018-02-26 | 2018-08-28 | 华东师范大学 | 一种基于中断控制流图的中断验证方法 |
CN108469987A (zh) * | 2018-02-26 | 2018-08-31 | 华东师范大学 | 一种基于中断控制流图的中断验证系统 |
CN111159022A (zh) * | 2019-12-20 | 2020-05-15 | 北京轩宇信息技术有限公司 | 基于单变量访问序模式的中断数据访问冲突检测方法及装置 |
CN111176785A (zh) * | 2019-12-02 | 2020-05-19 | 东巽科技(北京)有限公司 | 一种基于操作链接的机器指令码取词方法 |
CN112817787A (zh) * | 2021-01-28 | 2021-05-18 | 南京大学 | 中断驱动嵌入式系统数据竞争的自动检测方法 |
CN115033472A (zh) * | 2022-04-18 | 2022-09-09 | 大连理工大学 | 基于线程循环调度顺序化的中断驱动程序模型检测方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050216798A1 (en) * | 2004-03-24 | 2005-09-29 | Microsoft Corporation | Method and system for detecting potential races in multithreaded programs |
CN101534130A (zh) * | 2009-04-17 | 2009-09-16 | 华为技术有限公司 | 数据交织方法和装置、数据解交织方法和装置以及译码器 |
CN101593096A (zh) * | 2009-05-22 | 2009-12-02 | 西安交通大学 | 一种共享寄存器相关性消除的实现方法 |
-
2010
- 2010-12-17 CN CN 201010611695 patent/CN102063328B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050216798A1 (en) * | 2004-03-24 | 2005-09-29 | Microsoft Corporation | Method and system for detecting potential races in multithreaded programs |
CN101534130A (zh) * | 2009-04-17 | 2009-09-16 | 华为技术有限公司 | 数据交织方法和装置、数据解交织方法和装置以及译码器 |
CN101593096A (zh) * | 2009-05-22 | 2009-12-02 | 西安交通大学 | 一种共享寄存器相关性消除的实现方法 |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103765390A (zh) * | 2011-09-02 | 2014-04-30 | 英特尔公司 | 利用改进的检测过滤的数据竞争分析 |
US9471583B2 (en) | 2011-09-02 | 2016-10-18 | Intel Corporation | Data race analysis with improved detection filtering |
CN103765390B (zh) * | 2011-09-02 | 2017-05-24 | 英特尔公司 | 利用改进的检测过滤的数据竞争分析 |
CN104077226A (zh) * | 2014-07-07 | 2014-10-01 | 西安交通大学 | 基于程序约束构建的多线程程序输出唯一性检测与证据生成方法 |
WO2016004806A1 (zh) * | 2014-07-07 | 2016-01-14 | 西安交通大学 | 基于程序约束构建的多线程程序输出唯一性检测与证据生成方法 |
CN104090798A (zh) * | 2014-07-08 | 2014-10-08 | 南京大学 | 动静态结合的中断驱动程序数据竞争检测方法 |
CN104090798B (zh) * | 2014-07-08 | 2017-02-15 | 南京大学 | 动静态结合的中断驱动程序数据竞争检测方法 |
CN107943481A (zh) * | 2017-05-23 | 2018-04-20 | 清华大学 | 基于多模型的c语言程序代码规范构造方法 |
CN107967213A (zh) * | 2017-12-07 | 2018-04-27 | 上海宇航系统工程研究所 | 一种航天软件临界资源访问冲突检测方法 |
CN107967213B (zh) * | 2017-12-07 | 2021-06-04 | 上海宇航系统工程研究所 | 一种航天软件临界资源访问冲突检测方法 |
CN108469987A (zh) * | 2018-02-26 | 2018-08-31 | 华东师范大学 | 一种基于中断控制流图的中断验证系统 |
CN108469987B (zh) * | 2018-02-26 | 2020-12-29 | 华东师范大学 | 一种基于中断控制流图的中断验证系统 |
CN108459963B (zh) * | 2018-02-26 | 2021-04-02 | 华东师范大学 | 一种基于中断控制流图的中断验证方法 |
CN108459963A (zh) * | 2018-02-26 | 2018-08-28 | 华东师范大学 | 一种基于中断控制流图的中断验证方法 |
CN111176785A (zh) * | 2019-12-02 | 2020-05-19 | 东巽科技(北京)有限公司 | 一种基于操作链接的机器指令码取词方法 |
CN111176785B (zh) * | 2019-12-02 | 2023-08-29 | 东巽科技(北京)有限公司 | 一种基于操作链接的机器指令码取词方法 |
CN111159022A (zh) * | 2019-12-20 | 2020-05-15 | 北京轩宇信息技术有限公司 | 基于单变量访问序模式的中断数据访问冲突检测方法及装置 |
CN112817787A (zh) * | 2021-01-28 | 2021-05-18 | 南京大学 | 中断驱动嵌入式系统数据竞争的自动检测方法 |
CN112817787B (zh) * | 2021-01-28 | 2023-03-10 | 南京大学 | 中断驱动嵌入式系统数据竞争的自动检测方法 |
CN115033472A (zh) * | 2022-04-18 | 2022-09-09 | 大连理工大学 | 基于线程循环调度顺序化的中断驱动程序模型检测方法 |
CN115033472B (zh) * | 2022-04-18 | 2024-03-22 | 大连理工大学 | 基于线程循环调度顺序化的中断驱动程序模型检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102063328B (zh) | 2012-12-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102063328B (zh) | 一种用于检测中断驱动型程序数据竞争的系统 | |
US20050177775A1 (en) | Data race detection using sequential program analysis | |
US10664601B2 (en) | Method and system automatic buffer overflow warning inspection and bug repair | |
US7698690B2 (en) | Identifying code that wastes time performing redundant computation | |
CN111104335B (zh) | 一种基于多层次分析的c语言缺陷检测方法及装置 | |
CN101084485A (zh) | 用于改善片上仿真系统中高级语言的仿真速度的装置和方法 | |
US8898649B2 (en) | Application program analysis method, analysis system and recording medium for identifying a contributing factor for an invalid operation of an application program | |
Mancuso et al. | Light-PREM: Automated software refactoring for predictable execution on COTS embedded systems | |
US8141082B2 (en) | Node-based representation of multi-threaded computing environment tasks, and node-based data race evaluation | |
CN104375941A (zh) | 可执行程序测试用例集二进制代码覆盖率自动化评估方法 | |
US20150161030A1 (en) | Detecting method and system for concurrency bugs | |
CN104156311A (zh) | 一种基于cpu模拟器的嵌入式c语言目标码级单元测试方法 | |
CN103778062B (zh) | 基于抽象解释的多中断程序数据访问冲突检测方法 | |
KR102118236B1 (ko) | 컨트랙트에 대한 운영 체제 지원 기법 | |
EP3387536A1 (en) | Method and device for non-intrusively collecting function trace data | |
CN112817787A (zh) | 中断驱动嵌入式系统数据竞争的自动检测方法 | |
CN116305162A (zh) | 一种基于模糊测试和静态分析的并发程序漏洞检测方法 | |
CN106529304B (zh) | 一种安卓应用并发漏洞检测系统 | |
CN101493767A (zh) | 一种即时编译器辅助的垃圾收集中显式释放对象的插桩方法 | |
CN105550575B (zh) | 一种未导出的函数地址和数据结构偏移的获取方法及装置 | |
US7143394B1 (en) | Analyzing software behavior | |
CN115795489B (zh) | 一种基于硬件级进程跟踪的软件漏洞静态分析方法及装置 | |
Lee et al. | Interactive program debugging and optimization for directive-based, efficient gpu computing | |
CN111966578A (zh) | 一种安卓兼容性缺陷修复效果的自动化评估方法 | |
CN113836023B (zh) | 一种基于体系结构交叉检查的编译器安全性测试方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |