一种适用于多任务软件进程堆栈使用深度检测的方法技术

技术编号:13421324 阅读:61 留言:0更新日期:2016-07-28 12:47
一种适用于多任务软件进程堆栈使用深度检测的方法,首先在地面生成堆栈深度检测指令,创建多个进程并分配堆栈区、进程控制块,将所有进程堆栈区均初始化为特定标识,然后执行各个进程,并令应用软件执行最大运行路径测试。同时将堆栈深度检测指令上注至任务软件运行的SRAM中,最后检测得到各个进程中首个不为特定标识的地址,进而计算得到第i个进程堆栈区的使用深度比,并通过测控信道下传到地面。本发明专利技术方法与现有技术相比,通过在地面生成堆栈深度检测指令,解决了一般堆栈深度检测需要安装专业检测软件或借助专门硬件的缺点,具有简单易用的优点。

【技术实现步骤摘要】
一种适用于多任务软件进程堆栈使用深度检测的方法
本专利技术涉及软件测试领域,特别是一种适用于多任务软件进程堆栈使用深度检测的方法。
技术介绍
航天器中央处理单元软件(或综合处理单元软件)通常为大型嵌入式软件,由操作系统软件和应用软件两部分组成,其中,应用软件运行在操作系统软件之上,而操作系统软件为应用软件提供硬件管理、中断管理、进程管理等功能,星载操作系统软件广泛采用RTEMS系统或VxWorks系统。在轨航天器或卫星受硬件水平限制,星载设备计算机的内存资源一般只有几兆字节,分配方法使用静态分配,以避免内存泄露的危险,同时,为保证软件的可靠性和安全性,通常要求内存使用余量大于20%。软件启动后在内存中运行时,内存空间主要被文本段、数据段、进程堆栈区所占用,其中,文本段和数据段的大小由编译后的软件代码决定,内容和长度是固定的。大型航天器星载软件通常是多进程软件,每个进程拥有自己独立的堆栈空间,这部分空间占用了相当大部分的内存。进程堆栈的大小是在应用软件启动之初创建各个进程时配置的,之后不能再更改,因此在软件代码不变的情况下,进程堆栈的大小决定了内存资源的可用余量。随着航天技术的发展,星载软件功能愈加复杂、内存使用量越来越大,需要合理分配进程堆栈大小,既要确保进程堆栈不会溢出,同时尽量避免不必要的浪费。合理分配进程堆栈大小的关键在于要对进程堆栈使用深度进行准确测量,堆栈使用深度的检测手段有多种,主要分为静态测试和动态测试两类。静态测试技术指的是不依赖于程序的运行就能检测出堆栈溢出的错误,其堆栈使用情况是通过理论分析得到的。静态测试的缺点是难以检测递归调用,因为函数的递归次数在静态下是一个不可确定的参数,因此只能检测部分的堆栈溢出情况。另外,静态分析工具通常都会产生大量错误的警告信息,实际上会加重分析人员的负担。动态测试技术指的是检测过程必须依赖于程序的动态运行,一般需要在程序中插桩或者修改一些指令来检测堆栈溢出。动态测试技术的最主要缺点在于只能检测出真正发生动态溢出的代码。实际上只有极少量的代码能够触发堆栈溢出,因此动态测试技术并不能检测出所有可能的堆栈溢出代码,其测试到的堆栈深度往往会小于等于堆栈的实际最大深度。另外上述这些测试手段一般需要借助专门的工具,测试和分析也比较复杂,并不一定适用于航天器应用软件。例如,德国Absint公司开发的StackAnalyzer工具采用静态测试方法,可以自动分析应用程序中最差情况下的堆栈使用情况,分析结果以标注的形式在调用关系图和控制流图中显示。上海创景公司的RTInsight嵌入式平台测试工具通过结合LDRA公司的代码自动插桩技术,通过硬件手段可以对指定进程堆栈区域的内存地址访问情况进行监测,从而获得进程堆栈使用深度,属于一种动态测试手段。
技术实现思路
本专利技术解决的技术问题是:克服现有技术的不足,提供了一种适用于多任务软件进程堆栈使用深度检测的方法。本专利技术的技术解决方案是:一种适用于多任务软件进程堆栈使用深度检测的方法,包括如下步骤:(1)在地面生成堆栈深度检测指令;所述的堆栈深度检测指令为可以通过遥控通道上注至航天器星载任务软件运行的SRAM中的进行进程堆栈使用深度检测的可执行代码;(2)使用航天器星载应用软件所在操作系统为航天器星载应用软件创建N个进程,同时为每个创建的进程分配堆栈区、进程控制块,其中,N为≥2的正整数;所述的进程控制块包括进程堆栈区的起始地址和结束地址;(3)根据每个进程控制块中的进程堆栈区的起始地址和结束地址,将所有进程堆栈区均初始化为特定标识;所述的特定标识为任意确定的数值;(4)将各个进程放入执行队列并控制各个进程获得执行,获取航天器星载应用软件的最大运行路径测试用例,然后令航天器星载应用软件执行最大运行路径测试;所述的最大运行路径测试是指能够引发航天器星载应用软件所有进程堆栈调用的测试;(5)通过在轨维护方式上注堆栈深度检测指令至航天器星载任务软件运行的SRAM中;(6)从第i个进程堆栈区的最低地址开始检查,直至检测得到首个不为特定标识的地址,并作为第i个进程被使用过的最大深度地址,然后计算得到第i个进程堆栈区的使用深度比为[第i个进程被使用过的最大深度地址-第i个进程堆栈区的起始地址]/[第i个进程堆栈区的结束地址-第i个进程堆栈区的起始地址]其中,i=1,2,3…,N,i的初值为1;(7)i=i+1,重复步骤(6)直至i=N,进而分别得到N个进程堆栈区的第一使用深度比;(8)将所有进程堆栈区均初始化为另一个特定标识,重复步骤(4)-步骤(7),分别得到N个进程堆栈区的第二使用深度比;(9)将第i个进程堆栈区的max{第一使用深度比、第二使用深度比}作为第i个进程堆栈区的修正使用深度比,遍历所有的i得到N个进程堆栈区的修正使用深度比,并通过测控信道下传到地面。所述的航天器星载应用软件所在操作系统为RTEMS或VxWroks。所述的特定标识为任意确定的特定十六进制数。所述的特定标识为特定标识为0xEE。本专利技术与现有技术相比的优点在于:(1)本专利技术方法与现有技术相比,通过在地面生成堆栈深度检测指令,解决了一般堆栈深度检测需要安装专业检测软件或借助专门硬件的缺点,具有简单易用的优点;(2)本专利技术方法通过调用地面生成上传的堆栈深度检测指令来检测每个进程堆栈区不为特定标识的地址,进而计算得到每个进程堆栈区的使用深度,执行进程堆栈深度检测的手段,克服了现有技术中动态测试手段的插桩方法会影响被测应用软件正常运行的缺陷,在实现任务软件进程堆栈使用深度检测的同时,没有对应用软件各进程的正常功能性能造成影响;(3)本专利技术方法与现有技术相比,首先通过执行各个进程并令航天器星载应用软件执行最大运行路径测试,然后进行使用深度检测,克服了静态测试方法需要测试人员花费大量精力对静态测试结果有效性进行判读的缺陷,实现了测试结果直接反映进程堆栈实际使用深度的效果。附图说明图1为本专利技术一种适用于多任务软件进程堆栈使用深度检测的方法原理流程图;图2为本专利技术方法中嵌入式多任务软件内存空间分配示意图;图3为本专利技术方法中进程堆栈空间分配情况示意图;图4为本专利技术方法中使用深度检测工作流程图。具体实施方式本专利技术提供了一种适用于多任务软件的进程堆栈使用深度检测的方法。大型多任务星载软件运行在操作系统软件之上,其接收处理通过测控信道上注的遥控指令,并将星上编排的遥测数据通过测控信道下传到地面接收设备。本专利技术中,利用航天器的上行遥控通道,通过在轨维护的方式将堆栈深度检测软件上注到星载软件中,检测执行完成后,再通过内存读出的形式将检测结果通过下行遥测通道传到地面接收设备,操作步骤如图1所示。以运行在RTEMS或VxWroks操作系统之上的星载应用软件为例,在应用软件开始运行之初,首先调用操作系统提供的进程创建函数创建多个进程(基于RTEMS操作系统调用rtems_task_create()函数,基于VxWorks操作系统调用taskSpawn()函数)。在创建多个进程的过程中,操作系统内核会在内存中为每个进程分配堆栈区并在进程堆栈区中维护一个进程控制块结构体,该结构体中存放着该进程运行所需的一切信息,其中,所需的一切信息包括用于进程堆栈深度检测所需的相关参数,内核通过该结构体来控制本文档来自技高网
...

【技术保护点】
一种适用于多任务软件进程堆栈使用深度检测的方法,其特征在于包括如下步骤:(1)在地面生成堆栈深度检测指令;所述的堆栈深度检测指令为可以通过遥控通道上注至航天器星载任务软件运行的SRAM中的进行进程堆栈使用深度检测的可执行代码;(2)使用航天器星载应用软件所在操作系统为航天器星载应用软件创建N个进程,同时为每个创建的进程分配堆栈区、进程控制块,其中,N为≥2的正整数;所述的进程控制块包括进程堆栈区的起始地址和结束地址;(3)根据每个进程控制块中的进程堆栈区的起始地址和结束地址,将所有进程堆栈区均初始化为特定标识;所述的特定标识为任意确定的数值;(4)将各个进程放入执行队列并控制各个进程获得执行,获取航天器星载应用软件的最大运行路径测试用例,然后令航天器星载应用软件执行最大运行路径测试;所述的最大运行路径测试是指能够引发航天器星载应用软件所有进程堆栈调用的测试;(5)通过在轨维护方式上注堆栈深度检测指令至航天器星载任务软件运行的SRAM中;(6)从第i个进程堆栈区的最低地址开始检查,直至检测得到首个不为特定标识的地址,并作为第i个进程被使用过的最大深度地址,然后计算得到第i个进程堆栈区的使用深度比为[第i个进程被使用过的最大深度地址‑第i个进程堆栈区的起始地址]/[第i个进程堆栈区的结束地址‑第i个进程堆栈区的起始地址]其中,i=1,2,3…,N,i的初值为1;(7)i=i+1,重复步骤(6)直至i=N,进而分别得到N个进程堆栈区的第一使用深度比;(8)将所有进程堆栈区均初始化为另一个特定标识,重复步骤(4)‑步骤(7),分别得到N个进程堆栈区的第二使用深度比;(9)将第i个进程堆栈区的max{第一使用深度比、第二使用深度比}作为第i个进程堆栈区的修正使用深度比,遍历所有的i得到N个进程堆栈区的修正使用深度比,并通过测控信道下传到地面。...

【技术特征摘要】
1.一种适用于多任务软件进程堆栈使用深度检测的方法,其特征在于包括如下步骤:(1)在地面生成堆栈深度检测指令;所述的堆栈深度检测指令为可以通过遥控通道上注至航天器星载任务软件运行的SRAM中的进行进程堆栈使用深度检测的可执行代码;(2)使用航天器星载应用软件所在操作系统为航天器星载应用软件创建N个进程,同时为每个创建的进程分配堆栈区、进程控制块,其中,N为≥2的正整数;所述的进程控制块包括进程堆栈区的起始地址和结束地址;(3)根据每个进程控制块中的进程堆栈区的起始地址和结束地址,将所有进程堆栈区均初始化为特定标识;所述的特定标识为任意确定的数值;(4)将各个进程放入执行队列并控制各个进程获得执行,获取航天器星载应用软件的最大运行路径测试用例,然后令航天器星载应用软件执行最大运行路径测试;所述的最大运行路径测试是指能够引发航天器星载应用软件所有进程堆栈调用的测试;(5)通过在轨维护方式上注堆栈深度检测指令至航天器星载任务软件运行的SRAM中;(6)从第i个进程堆栈区的最低地址开始检查,直至检测得到首个不为特定...

【专利技术属性】
技术研发人员:董振辉张红军郭坚王斌韦涌泉詹盼盼潘莉贾卫松
申请(专利权)人:北京空间飞行器总体设计部
类型:发明
国别省市:北京;11

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

1