当前位置: 首页 > 专利查询>南京大学专利>正文

动静态结合的中断驱动程序数据竞争检测方法技术

技术编号:10509681 阅读:232 留言:0更新日期:2014-10-08 12:21
本发明专利技术设计一种动静态结合的中断驱动程序数据竞争检测方法,该方法通过共享资源的检测技术、控制流图生成技术、数据流分析技术、模拟器运行控制技术,利用静态方法来对源程序进行静态分析得到潜在的数据竞争序列,通过对静态分析的结果进行动态执行,验证潜在竞争的真实性,并根据潜在竞争的严重性进行排序,得到测试结果报告。通过本发明专利技术实现的工具对中断驱动程序的测试,可以有效地检测出真实的中断相关的竞争关系,并根据严重性提供一系列的潜在竞争关系作为指导,能够极大地促进测试人员的工作效率,突破解决了中断驱动的数据竞争检测问题,保障嵌入式系统的安全和稳定,可以为航天、医疗等高稳定性嵌入式程序需求的关键性安全领域提供可靠性保证。

【技术实现步骤摘要】
动静态结合的中断驱动程序数据竞争检测方法
本专利技术涉及中断驱动程序的测试方法,主要涉及中断引发的嵌入式系统中的数据竞争检测,属于软件工程、软件测试、嵌入式系统交叉

技术介绍
嵌入式系统被广泛应用在各个领域,包括汽车电子、航天电子、医疗电子等。这些领域往往对安全性和稳定性的要求特别高,任何的系统运行故障都会导致及其严重的后果,比如著名的Therac-25事件,就是在某些种特殊场景下的一次不小心的按键动作,导致了中断引发的数据竞争,最终了严重的医疗后果。中断驱动的嵌入式系统的稳定和安全具有很高的重要性,但嵌入式系统程序的错误,尤其是其并发性错误,被认为是极其难以检测、定位和修复的。这主要是因为并发错误对执行序列很敏感,即使是同一测试用例,每次的执行序列都有可能不同,最终造成无法预测程序的执行结果。因此,依赖传统的通过检查程序输出结果来判断程序错误的方法,无法检测出大多数的并发错误。此外,中断本身和硬件紧密相关,系统运行环境复杂,更加剧了对并发错误的检测、定位和修复的难度。如何设计一个较为完整的能够检测中断驱动的嵌入式系统中数据竞争的自动化方法,来有效、高效地帮助测试人员提供工作效率,保障安全性嵌入式系统的稳定性和鲁棒性,是我们一直在思考的问题。传统的解决方法有:通过将中断驱动程序转换成多线程程序,然后利用多线程中的数据检测工具找到竞争问题,然而,中断驱动程序和多线程程序在诸多方面的特性存在着本质的区别,二者的转换势必造成信息量的丢失,导致报告结果的误报;采用随机化调度、基于共享变量访问的调度等方法,通过对程序的插桩来动态执行程序,找到竞争问题,但是,由于其强制的路径执行方法造成了诸多误报,且大量的人工操作影响了工具的实用性,导致了该方法不具备可使用性;还有基于模拟器的方法,虽然能够一定程度上检测到数据竞争问题,却因为需要监控系统的全部状态,且需要进行多次重复运行,系统开销大,时间成本高。目前对中断驱动程序的数据竞争检测仍存在着两个瓶颈:一是结果的准确性问题,在避免误报的同时能够尽量避免漏报;二是实用性问题,其测试方法应该能够不依赖于具体的系统和平台,具有广泛的应用场景。本专利技术设计一种动静态结合的竞争检测方法,通过共享资源的检测技术,控制流图生成技术,数据流分析技术,模拟器运行控制技术,检测并验证出系统的竞争关系,突破了上述的两个瓶颈,解决了中断驱动的数据竞争检测问题,保障嵌入式系统的安全和稳定,为我国航天事业、医疗事业等高稳定性嵌入式程序需求的关键性安全领域提供可靠性保证。
技术实现思路
技术问题:本专利技术的目的是设计一种动静态结合的中断驱动程序数据竞争检测方法,以保障安全性嵌入式系统的稳定性和鲁棒性,解决中断驱动的嵌入式系统程序中存在的严重威胁系统安全和稳定性的数据竞争问题。技术方案:本专利技术提供一种动静态结合的中断驱动程序数据竞争检测方法,利用静态方法来对源程序进行静态分析得到潜在的数据竞争序列,通过对静态分析的结果进行动态执行,验证潜在竞争的真实性,并根据潜在竞争的严重性进行排序,得到测试结果报告。本专利技术的动静态结合的中断驱动程序数据竞争检测方法包含的步骤为:步骤1:用户指定受测试的中断驱动程序源文件,所述的中断驱动程序源文件包含若干个函数构成的主任务的源代码,以及该任务涉及到的中断所对应的中断处理程序的源代码;步骤2:用户指定测试的配置文件,所述配置文件是XML文件,XML的全称是可扩展标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言;所述的测试配置文件包括主函数的入口说明、各个中断处理程序的中断向量号和中断优先级;步骤3:对受测试的中断驱动程序源文件进行共享资源检测,得到共享资源列表;步骤4:对受测试的中断驱动程序源文件进行中断操作行为检测,得到中断操作列表;步骤5:对中断驱动程序源文件进行分析,得到简要控制流图RCFG,步骤6:将所有的RCFG互联起来,得到全局的中断互联控制流图IICFG;步骤7:对IICFG进行深度优先遍历,得到中断驱动源程序的静态分析结果;步骤8:在西米克斯Simics仿真平台中执行中断驱动程序源文件,验证PR中的所有静态分析结果,步骤9:对验证后的验证结果进行严重性排序,从而得到了对受测试的中断驱动程序源文件的竞争检测结果。所述步骤3具体过程如下:步骤31:设置共享资源列表,将该表初始化为空,所述的共享资源列表包含五个属性,分别是共享资源所在的函数名、该共享资源所在该函数中的行号、共享资源在该函数中的别名、该共享资源的全局的实质名称、该共享资源的读写访问类型;步骤32:打开中断驱动程序源文件,逐行读取源文件数据,每当读入源文件的一行数据时,通过语法分析该行数据中所包含的语句是否属于共享资源声明语句;所述的共享资源包括:可全局被访问的共享变量、可共享访问的端口号、寄存器地址、可全局被访问的文件句柄,以及上述所有的共享资源的有效的指针形式传播;如果该语句是共享资源声明语句,则将该语句中包含的共享资源的具体信息作为共享资源列表的一行,添入到共享资源列表中;共享资源的具体信息包括共享资源所在的函数名、该共享资源所在该函数中的行号、共享资源在该函数中的别名、该共享资源的全局的实质名称、该共享资源的读写访问类型。所述步骤4具体过程如下:步骤41:读取用户指定测试的配置文件,读入本次测试的函数主入口信息、各个中断处理程序的中断向量号、中断优先级,步骤42:设置中断操作列表,将该表初始化为空;所述的中断操作列表包含四个属性,分别是中断操作所在的函数名、该中断操作所在该函数中的行号、该中断的向量号、该中断操作的操作类型;步骤43:打开中断驱动程序源文件,逐行读取源文件数据,每当读入源文件的一行数据时,通过语法分析判断该行数据中包含的语句是否是中断控制语句,如果是,将该中断操作添入到中断操作列表中。所述步骤5具体过程如下:步骤51:使用编译器LLVM对源程序进行分析,得到每个函数和中断处理程序的控制流图CFG;步骤52:读取所有CFG,对每个CFG,依次读取其包含的每个结点;步骤53:对于CFG中的每个结点,根据前述得到的共享资源列表和中断操作列表,判断该结点是否包含有会影响共享资源的操作,即是否属于共享资源操作、中断开关操作、条件分支判断操作;如果是,则将当前结点从当前CFG中删除,如果否,则什么都不做,判断完当前结点后,继续往下判断下一个结点;步骤54:每遍历完成一个CFG,则得到了该CFG对应的RCFG。所述步骤6的具体过程如下:步骤61:设置一个变量INTB,将INTB初始化为0,所述INTB是用来记录当前中断的开关情况,步骤62:读取所有RCFG,对每个RCFG,进行深度优先遍历,所述深度优先遍历,是图的最普遍的搜索算法中的一种,它可以沿着树的深度依次遍历树的每个结点,尽可能深地探索到树的各个分支,步骤63:对于遍历到的每个结点,如果其中的语句包含函数调用操作,转到步骤64;如果其中的语句包含对共享变量的操作,转到步骤65;如果其中的语句包含中断开关操作,转到步骤66,否则,则什么都不做,回到步骤63继续往下遍历,步骤64:将进行函数调用的结点的指针指向当前被调用函数的RCFG的入口结点,回到步骤63继续往下遍历,步骤65:根本文档来自技高网
...
动静态结合的中断驱动程序数据竞争检测方法

【技术保护点】
一种动静态结合的中断驱动程序数据竞争检测方法,其特征在于该方法包含的步骤为: 步骤1:用户指定受测试的中断驱动程序源文件,所述的中断驱动程序源文件包含若干个函数构成的主任务的源代码,以及该任务涉及到的中断所对应的中断处理程序的源代码; 步骤2:用户指定测试的配置文件,所述配置文件是XML文件,XML的全称是可扩展标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言;所述的测试配置文件包括主函数的入口说明、各个中断处理程序的中断向量号和中断优先级; 步骤3:对受测试的中断驱动程序源文件进行共享资源检测,得到共享资源列表; 步骤4:对受测试的中断驱动程序源文件进行中断操作行为检测,得到中断操作列表; 步骤5:对中断驱动程序源文件进行分析,得到简要控制流图RCFG, 步骤6:将所有的RCFG互联起来,得到全局的中断互联控制流图IICFG; 步骤7:对IICFG进行深度优先遍历,得到中断驱动源程序的静态分析结果; 步骤8:在西米克斯Simics仿真平台中执行中断驱动程序源文件,验证PR中的所有静态分析结果, 步骤9:对验证后的验证结果进行严重性排序,从而得到了对受测试的中断驱动程序源文件的竞争检测结果。...

【技术特征摘要】
1.一种动静态结合的中断驱动程序数据竞争检测方法,其特征在于该方法包含的步骤为:步骤1:用户指定受测试的中断驱动程序源文件,所述的中断驱动程序源文件包含若干个函数构成的主任务的源代码,以及该任务涉及到的中断所对应的中断处理程序的源代码;步骤2:用户指定测试的配置文件,所述配置文件是XML文件,XML的全称是可扩展标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言;所述的测试配置文件包括主函数的入口说明、各个中断处理程序的中断向量号和中断优先级;步骤3:对受测试的中断驱动程序源文件进行共享资源检测,得到共享资源列表;步骤4:对受测试的中断驱动程序源文件进行中断操作行为检测,得到中断操作列表;步骤5:对中断驱动程序源文件进行分析,得到简要控制流图RCFG,步骤6:将所有的RCFG互联起来,得到全局的中断互联控制流图IICFG;步骤7:对IICFG进行深度优先遍历,得到中断驱动源程序的静态分析结果;步骤8:在西米克斯Simics仿真平台中执行中断驱动程序源文件,验证静态预测结果PR中的所有静态分析结果,步骤9:对验证后的验证结果进行严重性排序,从而得到了对受测试的中断驱动程序源文件的竞争检测结果。2.如权利要求1所述的动静态结合的中断驱动程序数据竞争检测方法,其特征在于所述步骤3具体过程如下:步骤31:设置共享资源列表,将该表初始化为空,所述的共享资源列表包含五个属性,分别是共享资源所在的函数名、该共享资源所在该函数中的行号、共享资源在该函数中的别名、该共享资源的全局的实质名称、该共享资源的读写访问类型;步骤32:打开中断驱动程序源文件,逐行读取源文件数据,每当读入源文件的一行数据时,通过语法分析该行数据中所包含的语句是否属于共享资源声明语句;所述的共享资源包括:可全局被访问的共享变量、可共享访问的端口号、寄存器地址、可全局被访问的文件句柄,以及上述所有的共享资源的有效的指针形式传播;如果该语句是共享资源声明语句,则将该语句中包含的共享资源的具体信息作为共享资源列表的一行,添入到共享资源列表中;共享资源的具体信息包括共享资源所在的函数名、该共享资源所在该函数中的行号、共享资源在该函数中的别名、该共享资源的全局的实质名称、该共享资源的读写访问类型。3.如权利要求1所述的动静态结合的中断驱动程序数据竞争检测方法,其特征在于所述步骤4具体过程如下:步骤41:读取用户指定测试的配置文件,读入本次测试的函数主入口信息、各个中断处理程序的中断向量号、中断优先级,步骤42:设置中断操作列表,将该表初始化为空;所述的中断操作列表包含四个属性,分别是中断操作所在的函数名、该中断操作所在该函数中的行号、该中断的向量号、该中断操作的操作类型;步骤43:打开中断驱动程序源文件,逐行读取源文件数据,每当读入源文件的一行数据时,通过语法分析判断该行数据中包含的语句是否是中断控制语句,如果是,将该中断操作添入到中断操作列表中。4.如权利要求1所述的动静态结合的中断驱动程序数据竞争检测方法,其特征在于所述步骤5具体过程如下:步骤51:使用编译器LLVM对源程序进行分析,得到每个函数和中断处理程序的控制流图CFG;步骤52:读取所有CFG,对每个CFG,依次读取其包含的每个结点;步骤53:对于CFG中的每个结点,根据前述得到的共享资源列表和中断操作列表,判断该结点是否包含有会影响共享资源的操作,即是否属于共享资源操作、中断开关操作、条件分支判断操作;如果是,则将当前结点从当前CFG中删除,如果否,则什么都不做,判断完当前结点后,继续往下判断下一个结点;步骤54:每遍历完成一个CFG,则得到了该CFG对应的RCFG。5.如权利要求1所述的动静态结合的中断驱动程序数据竞争检测方法,其特征在于所述步骤6的具体过程如下:步骤61:设置一个变量I...

【专利技术属性】
技术研发人员:王林章陈园军陈志李宣东
申请(专利权)人:南京大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1