精确的中断驱动型嵌入式软件数据竞争动态检测方法
文献发布时间:2023-06-19 18:29:06
技术领域
本发明涉及软件缺陷检测技术领域,具体为精确的中断驱动型嵌入式软件数据竞争动态检测方法。
背景技术
中断驱动型程序广泛应用于航天、航空、汽车电子、医疗设备等安全关键领域。该类软件引入中断机制,以实时控制I/O设备响应外部任务。由于其绝大部分关键计算或功能都是通过中断发起或处理,在软件运行时会产生大量复杂的执行交错序列,极易出现数据竞争。当程序执行包含对同一内存位置的两次访问,其中有一次为写,且两次访问没有按照happens-before关系进行排序时,则会发生数据竞争。数据竞争会导致严重的并发缺陷,引起各类系统故障,甚至导致严重的安全问题。
目前检测数据竞争最常采用的策略是动态检测方法。动态竞争检测的传统方法一般通过反复执行程序,得到一些特定的执行交错以揭示缺陷。由于其基于真实的程序执行序列,往往具有较高的精确性。
已经存在很多针对多线程程序的数据竞争动态检测方法,但这些方法在中断驱动型程序中并不适用。由于中断程序中超过90%的同步都是使用标志变量进行自定义同步的,这与多线程程序截然不同。而同步是保证并发程序正确性与性能的基础。它们通常蕴含一种happens-before的关系,识别出同步操作,可以知道操作是否可以并发发生,不正确或者不完整的同步操作识别将严重限制并发程序分析工具的有效性。中断程序中的自定义同步很难识别,使程序中内存访问的happens-before关系更加复杂,导致检测结果存在大量误报。
发明内容
本发明的目的在于提供精确的中断驱动型嵌入式软件数据竞争动态检测方法,以解决上述背景技术中提出的现有方法不能识别中断程序中自定义同步操作,导致数据竞争检测存在大量误报的问题。
为实现上述目的,本发明提供如下技术方案:精确的中断驱动型嵌入式软件数据竞争动态检测方法,包括以下步骤:步骤一,获取候选同步操作集;步骤二,筛选候选同步操作;步骤三,验证同步操作的准确性;步骤四,检测程序中的数据竞争;
其中在上述步骤一中,基于中断驱动型程序中同步操作的特征,对待处理程序进行静态分析,识别候选同步操作,产生候选同步操作集;
其中在上述步骤二中,对待处理程序进行动态执行并收集执行序列,基于执行序列与候选同步操作集,进行无监督的推理,从而筛选候选同步操作;
其中在上述步骤三中,在步骤二中筛选后的候选同步操作前/后触发相应中断,并再次执行程序,以识别该候选操作是否为同步操作,从而验证同步操作的准确性,得到精确的同步操作;
其中在上述步骤四中,根据步骤三中识别出的同步操作,对执行序列中基于标志变量的同步、中断开关、中断出/入口三种同步进行标注;根据标注后的执行序列,对不同过程中的共享变量访问进行happens-before关系分析,并检测出程序中的数据竞争。
优选的,所述步骤一中,具体包括以下步骤:
1.1通过对各种粒度的共享数据访问进行内存建模保证了数据区域的精确访问,识别被主程序与中断访问和被两个不同中断访问的共享变量;
1.2识别嵌入式系统中的显示和隐式中断开关操作,对于显式操作,考虑标准的中断开关api,对于隐式操作,考虑寄存器实现的中断开关;
1.3基于中断同步特征,对程序进行候选标志变量识别,识别出仅被赋值为常数的共享变量,或仅被此类变量赋值的共享变量,作为候选标志变量;
1.4构建候选同步操作集合,该集合由中断开关、中断出口/入口与候选标志变量的读写构成。
优选的,所述步骤1.3中,中断同步特征为:
1)中断程序中基于标志变量的同步只通过常量读写实现,即中断程序中的标志变量一定为共享变量,其读/写访问一定针对常量进行,即总被赋值为常量,且总针对常量进行读访问;
2)标志变量的值可能会被传递给其它标志变量,这些变量共同实现在主程序-中断或中断-中断之间的共享资源访问同步。
优选的,所述步骤二中,具体包括以下步骤:
2.1对待处理程序进行动态执行,并收集程序执行序列;
2.2基于执行后产生的执行序列,构建同步窗口,即从执行日志中识别每一对冲突的访问,并为它们构建同步窗口,该同步窗口包含一个释放窗口与一个获取窗口;
2.3将同步窗口中的每个操作对象编码为一个变量,其概率取值表征其为同步操作的可能性,从而对步骤1.4中产生的候选同步操作集进行精化,筛选出候选满足推理规则的候选同步操作。
优选的,所述步骤2.1中,动态执行过程中根据测试用例设置如下信息:
1)设置第一轮程序执行时的中断发生条件;
2)设置程序断点位置,以实现精确的内存控制与监控;
3)设置测试输入,以达到覆盖效果,为同步推理与竞争检测提供充分的信息。
优选的,所述步骤2.1中,执行序列包括以下四类事件:
1)主程序和ISR的入口/出口;
2)中断开/关操作;
3)候选标志变量的读/写;
4)除候选标志变量外其余共享变量的读/写。
优选的,所述步骤2.3中,推理规则为:
1)写-释放/读-获取:对变量的写操作不会是获取,对变量的读操作不会是释放0;
2)exit-释放/entry-获取:中断的出口不会是获取,中断的入口不会是释放;
3)enable-释放/disable-获取:对中断的使能不会是获取,对中断的屏蔽不会是释放;
4)“冲突”访问对通常被同步操作保护:对于一对释放窗口与获取窗口,释放窗口中的操作为r1,r2,…rn,获取窗口中的操作为a1,a2,…am,释放窗口中大概率会存在一个释放操作,获取窗口中大概率会存在一个获取窗口,以保护该访问对不会冲突;
5)标志变量总是成对出现:基于标志变量的一次同步由同一个标志变量的读写对实现;对于基于标志变量的同步,如果某个标志变量的写用于释放,那么对应的获取也应该来自于该标志变量的读;即如果一个变量的操作只出现在一类窗口中,那么该变量不会是标志变量,其操作也不会是同步操作;
6)标志变量的取值差异性不会太大;为了实现基于标志变量的同步,其取值个数大概率为2,所以所有的候选标志变量中,取值个数越接近2的越有可能是标志变量;
7)同步操作不会频繁出现:同步操作只在必要的时候出现,程序中不会频繁出现同步操作。
优选的,所述步骤四中,三种同步具体为:
1)对于基于标志变量的同步,write(flag)标记为rel(flag),read(flag)标记为acq(flag);
2)对于中断开关,enable(i)标记为rel(i),disable(i)标记为acq(i);
3)对于中断出/入口,isri出口exit(i)标记为rel(i),rel(j1),rel(j2),…rel(jn),isri入口entry(i)标记为acq(i),acq(j1),acq(j2),…acq(jn),其中isrj1,isrj2,…,isrjn的优先级等于isri的优先级。
与现有技术相比,本发明的有益效果是:相较于现有的数据竞争动态检测方法,本发明通过识别中断程序中的同步操作,以精确检测程序中的数据竞争,解决了现有方法不能识别中断程序中自定义同步操作,导致数据竞争检测存在大量误报的问题,精化数据竞争检测结果,提高了中断驱动型嵌入式软件可信性;本发明通过采用动静结合的方式进行同步操作识别,有效地提高了中断程序数据竞争缺陷检测的准确率,提高了软件开发和测试效率,提升了软件的安全性。
附图说明
图1为本发明的步骤图;
图2为本发明的方法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1-2,本发明提供的一种实施例:精确的中断驱动型嵌入式软件数据竞争动态检测方法,包括以下步骤:步骤一,获取候选同步操作集;步骤二,筛选候选同步操作;步骤三,验证同步操作的准确性;步骤四,检测程序中的数据竞争;
其中在上述步骤一中,基于中断驱动型程序中同步操作的特征,对待处理程序进行静态分析,识别候选同步操作,产生候选同步操作集,具体包括以下步骤:
1.1通过对各种粒度的共享数据访问进行内存建模保证了数据区域的精确访问,识别被主程序与中断访问和被两个不同中断访问的共享变量;
1.2识别嵌入式系统中的显示和隐式中断开关操作,对于显式操作,考虑标准的中断开关api,如disable_isr(-1)/enable_isr(-1)控制所有中断的开关状态;对于隐式操作,考虑寄存器实现的中断开关,如在C51中使用中断允许寄存器IE对中断开放或关闭实现控制;
1.3基于中断同步特征,对程序进行候选标志变量识别,识别出仅被赋值为常数的共享变量,或仅被此类变量赋值的共享变量,作为候选标志变量;其中,中断同步特征为:
1)中断程序中基于标志变量的同步只通过常量读写实现,即中断程序中的标志变量一定为共享变量,其读/写访问一定针对常量进行,即总被赋值为常量,且总针对常量进行读访问;
2)标志变量的值可能会被传递给其它标志变量,这些变量共同实现在主程序-中断或中断-中断之间的共享资源访问同步;
1.4构建候选同步操作集合,该集合由中断开关、中断出口/入口与候选标志变量的读写构成;
其中在上述步骤二中,对待处理程序进行动态执行并收集执行序列,基于执行序列与候选同步操作集,进行无监督的推理,从而筛选候选同步操作;具体包括以下步骤:
2.1对待处理程序进行动态执行,并收集程序执行序列;其中,动态执行过程中根据测试用例设置如下信息:
1)设置第一轮程序执行时的中断发生条件;
2)设置程序断点位置,以实现精确的内存控制与监控;
3)设置测试输入,以达到覆盖效果,为同步推理与竞争检测提供充分的信息;
执行序列包括以下四类事件:
1)主程序和ISR的入口/出口;
2)中断开/关操作;
3)候选标志变量的读/写;
4)除候选标志变量外其余共享变量的读/写;
2.2基于执行后产生的执行序列,构建同步窗口,即从执行日志中识别每一对冲突的访问,并为它们构建同步窗口,该同步窗口包含一个释放窗口与一个获取窗口;如冲突访问S1与S2,其中S1在执行序列中发生于S2之前,S1发生于过程1,S2发生于过程2,执行序列中发生于S1与S2之间的操作里,属于过程1且包含于候选同步操作集合的操作构成释放窗口,属于过程2且包含于候选同步操作集合的操作构成获取窗口;
2.3将同步窗口中的每个操作对象编码为一个变量,其概率取值表征其为同步操作的可能性,从而对步骤1.4中产生的候选同步操作集进行精化,筛选出候选满足推理规则的候选同步操作;其中,推理规则为:
1)写-释放/读-获取:对变量的写操作不会是获取,对变量的读操作不会是释放0;
2)exit-释放/entry-获取:中断的出口不会是获取,中断的入口不会是释放;
3)enable-释放/disable-获取:对中断的使能不会是获取,对中断的屏蔽不会是释放;
4)“冲突”访问对通常被同步操作保护:对于一对释放窗口与获取窗口,释放窗口中的操作为r1,r2,…rn,获取窗口中的操作为a1,a2,…am,释放窗口中大概率会存在一个释放操作,获取窗口中大概率会存在一个获取窗口,以保护该访问对不会冲突;
5)标志变量总是成对出现:基于标志变量的一次同步由同一个标志变量的读写对实现;对于基于标志变量的同步,如果某个标志变量的写用于释放,那么对应的获取也应该来自于该标志变量的读;即如果一个变量的操作只出现在一类窗口中,那么该变量不会是标志变量,其操作也不会是同步操作;
6)标志变量的取值差异性不会太大:为了实现基于标志变量的同步,其取值个数大概率为2(例如0xaa和0x55),所以所有的候选标志变量中,取值个数越接近2的越有可能是标志变量;
7)同步操作不会频繁出现:同步操作只在必要的时候出现,程序中不会频繁出现同步操作;
其中在上述步骤三中,在步骤二中筛选后的候选同步操作前/后触发相应中断,并再次执行程序,以识别该候选操作是否为同步操作,从而验证同步操作的准确性,得到精确的同步操作;如第一轮执行收集到的观察结果推断R是冲突访问S1和S2之间最可能的释放操作,且R属于主程序/低优先级中断中,S2发生于中断isr中,则在第二次执行时,在R之前触发isr,若isr中S2仍然正常出现,则R并不是真正的释放操作;若isr中S2被推迟一个周期或者不再出现,则R是真正的释放操作;又如第一轮执行收集到的观察结果推断A是冲突访问S1和S2之间最可能的获取操作,且S1发生于中断isr中,A发生于主程序/低优先级中断中,则在第二次执行时,在A之后触发isr;若主程序中S2仍然正常出现,则A并不是真正的获取操作;若isr中S2被推迟一个周期或者不再出现,则A是真正的获取操作;
其中在上述步骤四中,根据步骤三中识别出的同步操作,对执行序列中基于标志变量的同步、中断开关、中断出/入口三种同步进行标注;根据标注后的执行序列,对不同过程中的共享变量访问进行happens-before关系分析,并检测出程序中的数据竞争,其中,三种同步具体为:
1)对于基于标志变量的同步,write(flag)标记为rel(flag),read(flag)标记为acq(flag);
2)对于中断开关,enable(i)标记为rel(i),disable(i)标记为acq(i);
3)对于中断出/入口,isri出口exit(i)标记为rel(i),rel(j1),rel(j2),…rel(jn),isri入口entry(i)标记为acq(i),acq(j1),acq(j2),…acq(jn),其中isrj1,isrj2,…,isrjn的优先级等于isri的优先级。
基于上述,本发明的优点在于,本发明首先通过动静结合的方法实现精确的同步操作识别,即通过一种轻量级的分析初步识别候选同步操作;收集并分析程序全部执行过程中所产生的信息,使用一种无监督的推理过程筛选候选同步操作;多次执行程序,并控制中断发生于疑似同步操作的前后,以观察冲突访问的变化情况,进一步精化同步操作识别的结果;然后,本发明基于识别出的同步操作,充分理解共享变量访问在主程序及其每个中断处理程序之间的happens-before关系,实现精确的中断程序数据竞争检测;本方法达到千行级程序无误报的效果,且可扩展到万行程序,可以满足航天领域中断程序检测要求,可以实现嵌入式软件虚拟动态测试过程中的自动化缺陷检测,若能按照预期实现一个能插件化的中断数据竞争动态检测原型,未来可以应用于动态测试流程中,提升自动缺陷检测能力,降低测试中并发缺陷的问题遗漏。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
- 一种无漏报的中断驱动型程序运行时错误检测方法和系统
- 一种用于检测中断驱动型程序数据竞争的系统
- 一种用于检测中断驱动型程序数据竞争的系统