一种航天软件临界资源访问冲突检测方法技术

技术编号:17812643 阅读:60 留言:0更新日期:2018-04-28 05:27
本发明专利技术公开了一种航天软件临界资源访问冲突检测方法,由词法分析单元进行词法分析后,识别出词牌流,语法分析单元根据词牌流进行语法分析后生成全局变量表、函数表和语法树,语法树结合全局变量表进行分析后得出全局变量读写关系附表、结合函数表进行分析后得出函数读写关系附表和函数调用关系表,根据函数调用关系识别线程入口后对函数调用关系表进行线程着色,最后结合全局变量读写关系附表、函数读写关系附表和线程着色后的函数调用关系表分析检查得出全局变量读写冲突情况和写写冲突情况。使用本发明专利技术的检测方法可以开发相应的临界资源访问冲突检查工具,对快速、准确的识别软件中临界资源访问冲突的情况,从而提高软件可靠性。

【技术实现步骤摘要】
一种航天软件临界资源访问冲突检测方法
本专利技术涉及代码检查方法领域,特别涉及一种航天软件临界资源访问冲突检测方法。
技术介绍
临界资源访问冲突是导致航天型号软件运行异常最主要的原因之一,对临界资源访问冲突的检测是保证软件可靠性不可缺少的重要环节,通过临界资源访问冲突的检测可以在软件设计阶段发现临界资源读写冲突、写写冲突到导致数据错误带来的故障隐患,尽早采取保护措施,可以提高软件可靠性,并减少不必要的故障带来的严重后果,从而保证飞行任务成功。传统的临界资源访问冲突检测是通过组织软件设计师进行人工的方式对代码进行逐行走查,这种方法的检测效果依赖于参与走查的设计师的能力和经验,效率较低、工作量大、准确率不能保证。然而随着航天型号软件的不断增多,代码规模不断增大,人工走查方式无法满足需求,因此,有必要采用新技术研究自动化的软件临界资源访问冲突检查方法。
技术实现思路
为了克服现有技术中的不足,本专利技术提供一种航天软件临界资源访问冲突检测方法,使用该方法可以开发相应的临界资源访问冲突检查工具,对快速、准确的识别软件中临界资源访问冲突的情况,从而提高软件可靠性。为了达到上述专利技术目的,解决其技术问题所采用的技术方案如下:一种航天软件临界资源访问冲突检测方法,包括以下检测步骤:步骤1:由词法分析单元进行词法分析后,识别出词牌流;步骤2:语法分析单元根据词牌流进行语法分析后生成全局变量表、语法树和函数表;步骤3:语法树结合全局变量表进行分析后得出全局变量读写关系附表,语法树结合函数表进行分析后得出函数读写关系附表和函数调用关系表;步骤4:根据函数调用关系识别线程入口后对函数调用关系表进行线程着色;步骤5:结合全局变量读写关系附表、函数读写关系附表和线程着色后的函数调用关系表分析检查得出全局变量读写冲突情况和写写冲突情况。进一步的,步骤1中,所述词法分析单元根据源码文件和头文件生成词牌流。进一步的,步骤1中,所述词牌流的格式与GCC编译器预编译结果保持一致,所述词牌流用于所述语法分析单元进行语法分析。进一步的,步骤2中,所述全局变量表记录所有变量的变量名,并为每个变量分配一个唯一的编号。进一步的,步骤2中,所述函数表记录所有函数的函数名,并为每个函数分配一个唯一的编号。进一步的,步骤2中,所述语法树用于识别函数对全局变量的读写情况,所述语法树的识别代码中的语法操作,其格式与GCC编译器编译结果保持一致。进一步的,步骤3中,所述全局变量读写关系附表记录每个全局变量被函数表中的函数读写的情况。进一步的,步骤3中,所述函数读写关系附表记录每个函数对全局变量表中的变量读写的情况。进一步的,步骤3中,所述函数调用关系表根据语法树识别出的函数调用关系,记录每个函数调用其他函数的情况和被其他函数调用的情况。进一步的,步骤4中,所述识别线程入口是根据函数调用关系表识别调用图中入度为0并且出度不为0的节点编号,将该节点设置为线程入口,并分配唯一的线程编号。进一步的,步骤4中,所述线程着色是根据线程入口将该线程中每个被调用的函数进行线程标号,表示该被调函数属于当前线程,同一函数可以被多个线程着色。进一步的,步骤5中,所述读写冲突为不同线程函数对同一变量进行读写,导致读取数据不完整或数据异常的情况;所述写写冲突为不同线程函数对同一变量进行写,导致写数据失败或写数据错误的情况。本专利技术由于采用以上技术方案,使之与现有技术相比,具有以下的优点和积极效果:本专利技术通过对软件代码进行词法分析和语法分析,获取全局变量表和函数表,再进一步分析出函数调用关系、识别线程入口,将函数调用图进行线程着色后,通过遍历全局变量读写关系附表和函数读写关系附表,识别不同线程中对同一变量的读写冲突和写写冲突,发现资源访问冲突情况,从而提早发现软件故障隐患。可以降低人力资源成本,并且实施容易、易于复用,通过对软件源代码进行分析,自动识别出共享资源访问冲突的情况,极大的提高了检查的效率。该方法在某型号综合控制器CPU软件、某型号综合驱动控制器CPU软件上得到成功应用,有效的识别出共享资源访问冲突情况,并根据检查结果采取相应保护措施,提高了软件可靠性。附图说明为了更清楚地说明本专利技术实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图中:图1是本专利技术一种航天软件临界资源访问冲突检测方法的实现简图;图2是本专利技术一种航天软件临界资源访问冲突检测方法的数据结构示意图。具体实施方式以下将结合本专利技术的附图,对本专利技术实施例中的技术方案进行清楚、完整的描述和讨论,显然,这里所描述的仅仅是本专利技术的一部分实例,并不是全部的实例,基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本专利技术的保护范围。如图1和2所示,本专利技术公开了一种航天软件临界资源访问冲突检测方法,通过对软件代码进行词法分析和语法分析,获取全局变量表和函数表,再进一步分析出函数调用关系、识别线程入口,将函数调用图进行线程着色后,通过遍历全局变量读写关系附表和函数读写关系附表,识别不同线程中对同一变量的读写冲突和写写冲突,发现资源访问冲突情况,从而提早发现软件故障隐患。具体包括以下检测步骤:步骤1:由词法分析单元进行词法分析后,识别出词牌流;步骤2:语法分析单元根据词牌流进行语法分析后生成全局变量表、语法树和函数表;步骤3:语法树结合全局变量表进行分析后得出全局变量读写关系附表,语法树结合函数表进行分析后得出函数读写关系附表和函数调用关系表;步骤4:根据函数调用关系识别线程入口后对函数调用关系表进行线程着色;步骤5:结合全局变量读写关系附表、函数读写关系附表和线程着色后的函数调用关系表分析检查得出全局变量读写冲突情况和写写冲突情况。在步骤1中,所述词法分析单元根据源码文件和头文件生成词牌流。所述词牌流的格式与GCC编译器预编译结果保持一致,所述词牌流用于所述语法分析单元进行语法分析。在步骤2中,所述全局变量表记录所有变量的变量名,并为每个变量分配一个唯一的编号。所述函数表记录所有函数的函数名,并为每个函数分配一个唯一的编号。所述语法树用于识别函数对全局变量的读写情况,所述语法树的识别代码中的语法操作,其格式与GCC编译器编译结果保持一致。在步骤3中,所述全局变量读写关系附表记录每个全局变量被函数表中的函数读写的情况。所述函数读写关系附表记录每个函数对全局变量表中的变量读写的情况。所述函数调用关系表根据语法树识别出的函数调用关系,记录每个函数调用其他函数的情况和被其他函数调用的情况。在步骤4中,所述识别线程入口是根据函数调用关系表识别调用图中入度为0并且出度不为0的节点编号,将该节点设置为线程入口,并分配唯一的线程编号。所述线程着色是根据线程入口将该线程中每个被调用的函数进行线程标号,表示该被调函数属于当前线程,同一函数可以被多个线程着色。在步骤5中,所述读写冲突为不同线程函数对同一变量进行读写,导致读取数据不完整或数据异常的情况;所述写写冲突为不同线程函数对同一变量进行写,导致写数据失败或写数据错误的情况。本专利技术由于采用以上技术方案,本文档来自技高网...
一种航天软件临界资源访问冲突检测方法

【技术保护点】
一种航天软件临界资源访问冲突检测方法,其特征在于,包括以下检测步骤:步骤1:由词法分析单元进行词法分析后,识别出词牌流;步骤2:语法分析单元根据词牌流进行语法分析后生成全局变量表、语法树和函数表;步骤3:语法树结合全局变量表进行分析后得出全局变量读写关系附表,语法树结合函数表进行分析后得出函数读写关系附表和函数调用关系表;步骤4:根据函数调用关系识别线程入口后对函数调用关系表进行线程着色;步骤5:结合全局变量读写关系附表、函数读写关系附表和线程着色后的函数调用关系表分析检查得出全局变量读写冲突情况和写写冲突情况。

【技术特征摘要】
1.一种航天软件临界资源访问冲突检测方法,其特征在于,包括以下检测步骤:步骤1:由词法分析单元进行词法分析后,识别出词牌流;步骤2:语法分析单元根据词牌流进行语法分析后生成全局变量表、语法树和函数表;步骤3:语法树结合全局变量表进行分析后得出全局变量读写关系附表,语法树结合函数表进行分析后得出函数读写关系附表和函数调用关系表;步骤4:根据函数调用关系识别线程入口后对函数调用关系表进行线程着色;步骤5:结合全局变量读写关系附表、函数读写关系附表和线程着色后的函数调用关系表分析检查得出全局变量读写冲突情况和写写冲突情况。2.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤1中,所述词法分析单元根据源码文件和头文件生成词牌流。3.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤1中,所述词牌流的格式与GCC编译器预编译结果保持一致,所述词牌流用于所述语法分析单元进行语法分析。4.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤2中,所述全局变量表记录所有变量的变量名,并为每个变量分配一个唯一的编号。5.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤2中,所述函数表记录所有函数的函数名,并为每个函数分配一个唯一的编号。6.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤2中,所述语法树用于识别函数对全局...

【专利技术属性】
技术研发人员:刘博严云红徐峰程云龙金燕刘汉兵刘雄吴建桔康岭沈宗月朱波彭立章秦金彪吴旭东
申请(专利权)人:上海宇航系统工程研究所
类型:发明
国别省市:上海,31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1