[发明专利]基于绝对地址汇聚的数据访问冲突检测方法有效
| 申请号: | 201310744736.5 | 申请日: | 2013-12-30 |
| 公开(公告)号: | CN103699388A | 公开(公告)日: | 2014-04-02 |
| 发明(设计)人: | 王政;綦艳霞;顾斌;董晓刚;陈睿;陈尧;赵雷;郭向英 | 申请(专利权)人: | 北京控制工程研究所 |
| 主分类号: | G06F9/44 | 分类号: | G06F9/44 |
| 代理公司: | 中国航天科技专利中心 11009 | 代理人: | 陈鹏 |
| 地址: | 100080 *** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 绝对 地址 汇聚 数据 访问 冲突 检测 方法 | ||
技术领域
本发明涉及一种针对航天嵌入式C程序中数据竞争检测的方法。
背景技术
航天嵌入式C程序一般采用任务—中断的架构。任务由控制周期定时调用。在任务执行过程中,如果出现中断信号,那么任务被挂起,转入相应的中断服务程序。一般来说,航天嵌入式C程序具有多重中断,这些中断的优先级不同。低优先级的中断对应的中断服务程序执行时,如果出现高优先级的中断信号,那么当前中断服务程序被挂起,转入高优先级的中断对应的中断服务程序。
任务和中断服务程序之间、不同的中断服务程序之间,都存在共享数据。如果对该共享数据进行写操作,那么就会发生数据竞争。航天嵌入式C程序一般通过绝对地址访问的方式与外部设备进行交互。这种方式的特点之一是对一处绝对地址进行写操作,可能改变从另一处绝对地址读取到的值。以某种串口设备为例,该串口设备提供两个可访问的绝对地址,分别表示数据缓冲区和缓冲区空余字节数。对前者的写操作,将影响对后者的读操作的结果。如图1所示,任务通过循环语句向串口发送数据,直至串口的缓冲区填满。中断服务程序则在串口的缓冲区有4个字节或4个字节以上的空余时,向串口发送4个字节的数据。如果中断信号发生在判断循环条件和执行循环体之间,且此时*PORT_SIZE的值为4,那么中断服务程序将向串口写入4个字节的数据。中断服务程序结束后,任务恢复,继续执行循环体。此时,串口的缓冲区已满,循环体中向串口写入1个字节的语句将导致串口的缓冲区溢出。由于中断服务程序和任务对*PORT_SIZE均为读操作,因此会无法判断,从而导致数据竞争。
现有的数据访问冲突检测方法主要是针对发生在共享变量之间的数据访问冲突,仅有少数方法能检测发生在绝对地址上的数据访问冲突。这些方法往往简单地将绝对地址视为共享变量的特殊形式,而没有考虑绝对地址之间的关联性。
发明内容
本发明的技术解决问题是:克服现有技术的不足,提供了一种基于绝对地址汇聚的数据访问冲突检测方法,可以降低C程序中数据竞争检测的漏报率。
本发明的技术解决方案是:基于绝对地址汇聚的数据访问冲突检测方法,步骤如下:
(1)对C源程序进行语法分析,构造源程序中使用的绝对地址集合;利用绝对地址集合,构造间接影响关系;所述的间接影响关系是一组绝对地址上的一一映射关系,具有一一映射关系的两个绝对地址中,对其中一个绝对地址的写操作会导致另一个绝对地址的读操作的结果发生变化;
(2)根据C源程序中的中断响应函数,寻找C源程序包括的所有中断上下文;
(3)对于步骤(2)中确定的每个中断上下文,进行下列检查:
(31)将C源程序的主程序中进行读操作的绝对地址构成的集合记作R1,写操作构成的集合记作W1,将C源程序的中断中进行读操作的绝对地址构成的集合记作R2,写操作构成的集合记作W2;
(32)令w1=closure(E,W1),w2=closure(E,W2),其中E为步骤(1)中的间接影响关系;wi=closure(E,Wi),i=1、2的计算步骤如下:
(321)令wi=Wi;
(322)对任意的d∈wi,令wi'=wiU{E(d)};其中E(d)为绝对地址d所处的间接影响关系对应的绝对地址;
(323)如果wi=wi'那么wi=closure(E,Wi)计算完毕,否则令wi=wi',并回到步骤(322);
(33)令A=(w1∩w2)U(w1∩R2)U(R1∩w2);如果A=,那么没有数据访问冲突;否则判定在集合A中的绝对地址处发生数据访问冲突。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京控制工程研究所,未经北京控制工程研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310744736.5/2.html,转载请声明来源钻瓜专利网。





