CN103678136B - 一种基于控制流的数据竞争误报降低方法 - Google Patents
一种基于控制流的数据竞争误报降低方法 Download PDFInfo
- Publication number
- CN103678136B CN103678136B CN201310744664.4A CN201310744664A CN103678136B CN 103678136 B CN103678136 B CN 103678136B CN 201310744664 A CN201310744664 A CN 201310744664A CN 103678136 B CN103678136 B CN 103678136B
- Authority
- CN
- China
- Prior art keywords
- routine
- master routine
- interrupt service
- shared variable
- data
- 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.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
一种基于控制流的数据竞争误报降低方法,是一种针对航天嵌入式C程序数据竞争检测的改进方法,目的在于降低误报、提高分析准确度。一般认为,主程序和中断服务程序具有共享变量时,如果二者中至少一个对该共享变量进行了写操作,那么该变量可能会发生数据竞争。本发明以语法分析技术为基础,结合领域特征,识别无害的数据竞争,降低数据竞争检测的误报率。本发明提出的检查方法降低了数据竞争检测的误报率,有利于发现真正有害的数据竞争。
Description
技术领域
本发明涉及一种针对航天嵌入式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的写操作位于循环体中;
(G)主程序中将v1用于循环条件并且主程序中对v1的写操作是循环语句之后的第一个语句;
(4)将无害共享变量集合S2中的每个元素作为无害共享变量,并解出对无害共享变量的数据竞争报警。
本发明与现有技术相比的优点在于:(1)实现简单,不需要实际运行待检查的程序,即可降低数据竞争的误报;(2)相比于抽象解释、模型检查等技术,本发明方法的复杂度低,更适合于大规模程序;(3)可扩展性强,通过总结领域特征,可以修改本发明中列出的判断条件,从而实现方法的跨领域应用。
附图说明
图1为有害的数据竞争示例;
图2为无害的数据竞争示例;
图3为本发明方法的流程框图。
具体实施方式
通过对C程序的语法进行分析,构建C程序的中断上下文,识别共享变量。通过归纳总结,如果某共享变量同时满足下列条件,则认为与该共享变量有关的数据竞争均是无害的。
1、中断发生的频率低于主程序周期执行的频率,即该中断在每个周期最多发生一次;
2、共享变量在主程序和中断中的取值是两态的(例如,TRUE和FALSE);
3、中断服务程序中仅有一处对该变量的写操作,将该变量赋值为其中一态(例如,TRUE);
4、主程序中对该变量有一处读操作,一处写操作;
5、主程序中对该变量的读操作是if语句或循环语句的条件;
6、主程序中对该变量的写操作在if语句的分支内,或在循环语句的循环体内,或紧跟循环语句;
7、主程序中对该变量的写操作将该变量赋值为另一态(例如,FALSE);
其原因在于,航天嵌入式C程序一般采用主程序—中断的架构,为了保证程序的实时性,中断服务程序中一般不进行复杂的计算,而在主程序中实现将相应的计算。当中断信号来临时,中断服务程序往往只进行最基本的处理,而将其他大部分计算保留到主程序中进行。航天嵌入式C程序一般使用特殊的共享变量实现这一的机制。这种共享变量的取值是两态的(TRUE或FALSE),在中断响应程序中修改该变量的取值(例如,置为TRUE)。在主程序,判断该变量的取值,如果满足条件(例如,取值为TRUE),则进行特定的计算,并将该共享变量置为另一值(例如,置为FALSE)。本发明的意义在于总结了此类变量,并避免报告发生在此类变量的数据竞争。
如图3所示,本发明方法的步骤如下:
1、通过对C源程序进行语法分析,构建C程序的中断上下文;
2、令S为共享变量构成的集合;
3、对于S中的每个元素v,进行下列检查:
3.1如果(1)主程序和中断服务程序中对v的写操作均有且只有一处且
(2)分别赋值为不同的常量且
(3)中断服务程序中对v没有读操作且
(4)主程序中对v有且只有一处读操作
3.2.1那么如果(1)主程序中将v用于if条件且
(2)主程序中对v的写操作位于if的分支中
则认为与v有关的数据竞争均无害。
3.2.2如果(1)主程序中将v用于循环条件且
(2.1)主程序中对v的写操作位于循环体中或
(2.2)主程序中对v的写操作是循环语句之后的第一个语句
则认为与v有关的数据竞争均无害。
4、结束
本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。
Claims (1)
1.一种基于控制流的数据竞争误报降低方法,其特征在于步骤如下:
(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的写操作位于循环体中;
(G)主程序中将v1用于循环条件并且主程序中对v1的写操作是循环语句之后的第一个语句;
(4)将无害共享变量集合S2中的每个元素作为无害共享变量,并解除对无害共享变量的数据竞争报警。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310744664.4A CN103678136B (zh) | 2013-12-30 | 2013-12-30 | 一种基于控制流的数据竞争误报降低方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310744664.4A CN103678136B (zh) | 2013-12-30 | 2013-12-30 | 一种基于控制流的数据竞争误报降低方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103678136A CN103678136A (zh) | 2014-03-26 |
CN103678136B true CN103678136B (zh) | 2015-07-08 |
Family
ID=50315770
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310744664.4A Active CN103678136B (zh) | 2013-12-30 | 2013-12-30 | 一种基于控制流的数据竞争误报降低方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103678136B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104090798B (zh) * | 2014-07-08 | 2017-02-15 | 南京大学 | 动静态结合的中断驱动程序数据竞争检测方法 |
CN112631925A (zh) * | 2020-12-29 | 2021-04-09 | 北京轩宇信息技术有限公司 | 一种单变量原子违背缺陷的检测方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073589A (zh) * | 2010-12-29 | 2011-05-25 | 北京邮电大学 | 一种基于代码静态分析的数据竞争检测方法及系统 |
CN102760095A (zh) * | 2011-04-25 | 2012-10-31 | 清华大学 | 基于静态共享变量识别的动态数据竞争检测方法 |
-
2013
- 2013-12-30 CN CN201310744664.4A patent/CN103678136B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073589A (zh) * | 2010-12-29 | 2011-05-25 | 北京邮电大学 | 一种基于代码静态分析的数据竞争检测方法及系统 |
CN102760095A (zh) * | 2011-04-25 | 2012-10-31 | 清华大学 | 基于静态共享变量识别的动态数据竞争检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103678136A (zh) | 2014-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
López et al. | Beyond memoryless distributions: Model checking semi-Markov chains | |
CN1113279C (zh) | 自动诊断故障情况的方法 | |
CN112817787B (zh) | 中断驱动嵌入式系统数据竞争的自动检测方法 | |
CN102238021A (zh) | 报文序列查找方法、协议分析引擎和协议分析仪 | |
CN109816179A (zh) | 基于大数据的生态环境监测预警方法及系统 | |
CN109325193A (zh) | 基于机器学习的waf正常流量建模方法以及装置 | |
US11037301B2 (en) | Target object detection method, readable storage medium, and electronic device | |
CN103744772A (zh) | 一种检测任务运行性能的方法和系统 | |
CN103678136B (zh) | 一种基于控制流的数据竞争误报降低方法 | |
CN105652726A (zh) | 一种机器人安全控制装置 | |
JP2020123307A (ja) | セキュリティ装置、攻撃特定方法、及びプログラム | |
KR101565030B1 (ko) | 데이터 분석을 이용한 자동차의 오류 판단 시스템 및 그 방법 | |
CN111679657A (zh) | 一种基于工控设备信号的攻击检测方法及系统 | |
CN103761172A (zh) | 基于神经网络的硬件故障诊断系统 | |
CN103455362A (zh) | 一种硬件语言自动转换系统 | |
CN103902901A (zh) | 一种基于编译器识别的apt检测方法及系统 | |
CN104317707A (zh) | 一种基于程序结构影响感知的软件错误定位方法 | |
CN102930158B (zh) | 基于偏最小二乘的变量选择方法 | |
CN108681503A (zh) | 可编程控制器程序的安全检查方法、装置和设备 | |
CN112446384A (zh) | 快速实例分割 | |
CN102214141A (zh) | 基于实时堆栈的程序切片方法 | |
CN116882695A (zh) | 自动巡检方法、装置、计算机设备及存储介质 | |
CN109766028B (zh) | 一种红外触摸屏触控分管系统和方法 | |
CN108469987B (zh) | 一种基于中断控制流图的中断验证系统 | |
CN104951135A (zh) | 一种信息处理装置及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | 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 |