CN103678136B - 一种基于控制流的数据竞争误报降低方法 - Google Patents

一种基于控制流的数据竞争误报降低方法 Download PDF

Info

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
Application number
CN201310744664.4A
Other languages
English (en)
Other versions
CN103678136A (zh
Inventor
顾斌
王政
董晓刚
綦艳霞
陈尧
赵雷
陈睿
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Institute of Control Engineering
Original Assignee
Beijing Institute of Control Engineering
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Institute of Control Engineering filed Critical Beijing Institute of Control Engineering
Priority to CN201310744664.4A priority Critical patent/CN103678136B/zh
Publication of CN103678136A publication Critical patent/CN103678136A/zh
Application granted granted Critical
Publication of CN103678136B publication Critical patent/CN103678136B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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中的每个元素作为无害共享变量,并解除对无害共享变量的数据竞争报警。
CN201310744664.4A 2013-12-30 2013-12-30 一种基于控制流的数据竞争误报降低方法 Active CN103678136B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073589A (zh) * 2010-12-29 2011-05-25 北京邮电大学 一种基于代码静态分析的数据竞争检测方法及系统
CN102760095A (zh) * 2011-04-25 2012-10-31 清华大学 基于静态共享变量识别的动态数据竞争检测方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
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