[发明专利]一种基于控制流的数据竞争误报降低方法有效
| 申请号: | 201310744664.4 | 申请日: | 2013-12-30 |
| 公开(公告)号: | CN103678136A | 公开(公告)日: | 2014-03-26 |
| 发明(设计)人: | 顾斌;王政;董晓刚;綦艳霞;陈尧;赵雷;陈睿 | 申请(专利权)人: | 北京控制工程研究所 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/46 |
| 代理公司: | 中国航天科技专利中心 11009 | 代理人: | 陈鹏 |
| 地址: | 100080 *** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 控制 数据 竞争 降低 方法 | ||
技术领域
本发明涉及一种针对航天嵌入式C程序数据竞争检测的方法,用于识别程序运行过程中无害的数据竞争,降低数据竞争检测的误报率。
背景技术
航天嵌入式C程序一般采用主程序—中断的架构。主程序由控制周期定时调用。在主程序执行过程中,如果出现中断信号,那么主程序被挂起,转入相应的中断服务程序。一般来说,航天嵌入式C程序具有多重中断,这些中断的优先级不同。低优先级的中断对应的中断服务程序执行时,如果出现高优先级的中断信号,那么当前中断服务程序被挂起,转入高优先级的中断对应的中断服务程序。
主程序和中断服务程序之间、不同的中断服务程序之间,均存在共享变量。如果对该共享变量进行写操作,那么就会发生数据竞争。如图1所示,Time.second和Time.Millisecond是主程序和中断服务程序的共享变量。主程序读这两个变量,并使用它们的值,计算变量StarTime。中断服务程序写这两个变量。如果在主程序读取Time.second和Time.Millisecond之间,发生中断,那么主程序将被挂起,转入中断服务程序。Time.second和Time.Millisecond的值在中断服务程序中被修改。中断服务程序结束后,继续执行主程序。主程序读取到的Time.Millisecond的值是刚才在中断服务程序中被修改的值。这样,主程序读取到的Time.second和Time.Millisecond的值不是同一次中断服务程序修改的值,可能导致StarTime计算错误。当共享变量较多,使用次数频繁时,数据竞争的场景会非常多,给用户带来判读困难。
航天嵌入式C程序的特点之一是主程序按照系统的周期反复执行。大部分中断发生的频率要低于主程序按周期执行的频率,即每次主程序执行过程中,大部分中断最多发生一次。作为一种实时软件,航天嵌入式C程序要求中断服务程序执行时间短。因此,中断服务程序往往不实现具体的计算过程,仅负责必要的数据读取,并修改相应的标志变量。待中断服务程序结束,主程序恢复之后,根据标志变量的取值,由主程序完成相应的计算。计算完成后,主程序修改标志变量的取值,避免下个周期重复计算。
这类标志变量是主程序和中断服务程序之间的共享变量,且主程序和中断服务程序均对这类变量进行了写操作,符合数据竞争的定义。因此,标准的数据竞争分析方法将报告大量的此类数据竞争。然而,这些数据竞争都是无害的。图2展示了此类无害数据竞争的一个例子。如果中断发生在图2中的if语句之前,那么共享变量flg被中断服务程序置为TRUE,中断服务程序结束后,主程序将进入if的真分支,flg被重新置为FALSE。如果中断发生在图中的if语句之后,那么共享变量flg被中断服务程序置为TRUE,中断服务程序结束后,主程序继续执行。下一个周期,主程序将进入if的真分支,flg被重新置为FALSE。如果中断发生在if语句的真分支之内,flg=FALSE之前,那么中断服务程序中对flg的修改将被主程序中的flg=FALSE覆盖。但是,这个场景实际上不可能发生。因为中断发生的频率低于主程序执行的频率。如果主程序能够进入if的真分支,那么说明在最近一个周期内,发生过该中断。因此,在if的真分支之内,不会再次发生该中断。
因此,大量的报告此类无害的数据竞争会大大增加分析C源程序正确性的代价,甚至掩盖了有害的数据竞争。
发明内容
本发明的技术解决问题是:克服现有技术的不足,提供了一种基于控制流的数据竞争误报降低方法,可以有效识别程序运行过程中无害的数据竞争,降低数据竞争检测的误报率。
本发明的技术解决方案是:一种基于控制流的数据竞争误报降低方法,步骤如下:
(1)对C源程序中的共享变量进行搜索,获得所有共享变量的集合S;
(2)对于S中的每个元素v,查找同时满足以下四个条件的元素v,构成检测共享变量集合S1;所述的四个条件为:
(A)C源程序的主程序和中断服务程序中对v的写操作均有且只有一处;
(B)主程序和中断服务程序分别对v赋值为不同的常量;
(C)中断服务程序中对v没有读操作;
(D)主程序中对v有且只有一处读操作;
(3)针对检测共享变量集合S1中的每个元素v1,查找满足以下三个条件中的任何一个条件的元素v1,构成无害共享变量集合S2;所述的三个条件为:
(E)主程序中将v1用于if条件并且主程序中对v1的写操作位于if的分支中;
(F)主程序中将v1用于循环条件并且主程序中对v1的写操作位于循环体中;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京控制工程研究所,未经北京控制工程研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310744664.4/2.html,转载请声明来源钻瓜专利网。
- 数据显示系统、数据中继设备、数据中继方法、数据系统、接收设备和数据读取方法
- 数据记录方法、数据记录装置、数据记录媒体、数据重播方法和数据重播装置
- 数据发送方法、数据发送系统、数据发送装置以及数据结构
- 数据显示系统、数据中继设备、数据中继方法及数据系统
- 数据嵌入装置、数据嵌入方法、数据提取装置及数据提取方法
- 数据管理装置、数据编辑装置、数据阅览装置、数据管理方法、数据编辑方法以及数据阅览方法
- 数据发送和数据接收设备、数据发送和数据接收方法
- 数据发送装置、数据接收装置、数据收发系统、数据发送方法、数据接收方法和数据收发方法
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置





