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

文档序号:13289139阅读:666来源:国知局
技术领域本发明涉及软件测试领域,特别是一种适用于多任务软件进程堆栈使用深度检测的方法。

背景技术:
航天器中央处理单元软件(或综合处理单元软件)通常为大型嵌入式软件,由操作系统软件和应用软件两部分组成,其中,应用软件运行在操作系统软件之上,而操作系统软件为应用软件提供硬件管理、中断管理、进程管理等功能,星载操作系统软件广泛采用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{第一使用深度比、第二使用深度比
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1