首页> 中国专利> 一种SPARC平台任务栈溢出检测算法

一种SPARC平台任务栈溢出检测算法

摘要

本发明公开了一种SPARC平台任务栈溢出检测算法,其特征在于:所述检测算法针对每个任务维护一个单独的变量current_stack_max,记录当前栈的最大使用量,初始值为0;任务栈在任务创建时初始化为0;任务栈的栈顶保留一个空函数栈帧大小的余量,栈使用超过该余量,即视为溢出。本发明算法准确、效率高,可以有效帮助应用开发人员合理分配任务栈大小,提高系统的可靠性及安全性。

著录项

  • 公开/公告号CN103870244A

    专利类型发明专利

  • 公开/公告日2014-06-18

    原文格式PDF

  • 申请/专利权人 北京神舟航天软件技术有限公司;

    申请/专利号CN201410060928.9

  • 发明设计人 卓保特;李尚杰;程胜;许开维;

    申请日2014-02-21

  • 分类号G06F9/30;G06F21/52;

  • 代理机构北京世誉鑫诚专利代理事务所(普通合伙);

  • 代理人孙国栋

  • 地址 100094 北京市海淀区永丰路28号

  • 入库时间 2024-02-20 00:20:11

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-04-12

    专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F 9/30 专利号:ZL2014100609289 变更事项:专利权人 变更前:北京神舟航天软件技术有限公司 变更后:北京神舟航天软件技术股份有限公司 变更事项:地址 变更前:100094 北京市海淀区永丰路28号 变更后:100094 北京市海淀区永丰路28号

    专利权人的姓名或者名称、地址的变更

  • 2017-01-11

    授权

    授权

  • 2014-07-16

    实质审查的生效 IPC(主分类):G06F9/30 申请日:20140221

    实质审查的生效

  • 2014-06-18

    公开

    公开

说明书

技术领域

本发明属于嵌入式实时操作系统开发领域,具体地说,涉及一种SPARC平 台任务栈溢出检测算法。

背景技术

SPARC是一种开源的RISC处理器架构技术,在国内广泛的应用在航天领域。 同时,随着航天任务的复杂化,嵌入式实时操作系统在航天领域的应用也越来 越广泛。为保证系统的实时性与安全性,嵌入式实时操作系统中任务使用的堆 栈一般都静态分配,对于基于RTOS的应用开发人员,由于缺乏对底层硬件及编 译器编译规则的了解,通常难以给任务分配合适的栈大小,导致任务栈溢出, 开发人员需花大量时间查找原因。因此现在有些嵌入式实时操作系统提供了任 务栈溢出的检测函数,在系统空闲时调用,可以在任务栈将要溢出或已经溢出 时给出报警,帮助应用开发人员了解任务栈的使用情况,并调整任务栈大小, 预防任务栈的溢出。

现有技术存在的主要问题:

1、现有的任务栈溢出检测算法简单、通用,但由于SPARC平台的特殊性, 不能给出运行在SPARC平台的任务栈溢出的准确判定结果。如目前在国内航天 领域广泛使用的SPARC V7、V8架构,硬件并不提供栈溢出检测的支持,该算法 在就绪任务运行之前,比较其SP指针与栈最大使用量限制指针StkLimitPtr, 在栈向下增长时,如果SP小于StkLimitPtr,则任务运行时会有溢出的可能。 但即使SP大于StkLimitPtr,在任务获得CPU不断运行过程中,仍有可能导致 栈溢出,且在任务放弃CPU时,由于函数栈帧的释放使SP指针已经后退到 StkLimitPtr之下,这种情况下,该算法无法检测出任务栈发生过溢出。

2、还有一种方法是通过进行任务栈最大使用量检测来判断任务栈的溢出。 该算法在任务创建时将任务栈清0,在系统空闲时,检测任务栈的使用量,从栈 顶开始,向栈底依次判断当前内存内容是否为0,记录第一个不为0的内存地址, 计算当前的内存空闲量,以判断任务栈是否溢出。该算法性能较差,可能尚未 比较完,就被高优先级的任务打断,再次返回时任务栈的使用量可能已超过当 前比较地址,从而得出错误的结果;另外由于SPARC架构下寄存器窗口的特殊 性,每个函数的栈帧都至少有0x40字节的空间用来存储寄存器窗口溢出时当前 寄存器窗口的内容。该段空间大多数情况下,并不会被使用,内容仍然为0,如 果该段空间恰好在栈顶处,此时任务栈已经溢出,但是该算法会给出错误的判 断。

发明内容

本发明要解决的技术问题是克服上述缺陷,提供一种SPARC平台任务栈溢 出检测算法,该算法准确、效率高,可以有效帮助应用开发人员合理分配任务 栈大小,提高系统的可靠性及安全性。

为解决上述问题,本发明所采用的技术方案是:

一种SPARC平台任务栈溢出检测算法,其特征在于:所述检测算法针对每 个任务维护一个单独的变量current_stack_max,记录当前栈的最大使用量,初始 值为0;任务栈在任务创建时初始化为0;任务栈的栈顶保留一个空函数栈帧大 小的余量,栈使用超过该余量,即视为溢出。

作为一种改进,所述算法步骤如下:

1)、首先比较current_stack_max和任务控制块中保存的当前函数栈帧的栈 顶TCB_SP,求得min(current_stack_max,TCB_SP);

2)、从stack_top开始依次比较[stack_top,min(current_stack_max,TCB_SP)] 区间段内存单元的内容,遇到非零的内存单元停止比较,指针order_search指向 该单元;

3)、比较stack_top与order_search-0x68,如果stack_top大于等于 order_search-0x68,则任务栈溢出;否则将current_stack_max更新为order_search。 其中0x68为空函数函数栈帧的大小。

由于采用了上述技术方案,与现有技术相比,本发明是针对每个任务维护 一个单独的变量current_stack_max,记录当前栈的最大使用量,初始值为0; 任务栈在任务创建时初始化为0;任务栈的栈顶保留一个空函数栈帧大小的余 量,栈使用超过该余量,即视为溢出。本发明算法准确、效率高,可以有效帮 助应用开发人员合理分配任务栈大小,提高系统的可靠性及安全性。

附图说明

图1为本发明一种实施例的精确的SPARC平台栈溢出检测算法示意图。

具体实施方式

实施例:

如图1所示,一种SPARC平台任务栈溢出检测算法,所述检测算法是针对 每个任务维护一个单独的变量current_stack_max,记录当前栈的最大使用量,初 始值为0;任务栈在任务创建时初始化为0;任务栈的栈顶保留一个空函数栈帧 大小的余量,栈使用超过该余量,即视为溢出。

在本实施例中,所述算法步骤如下:

1)、首先比较current_stack_max和任务控制块中保存的当前函数栈帧的栈 顶TCB_SP,求得min(current_stack_max,TCB_SP)。

2)、从stack_top开始依次比较[stack_top,min(current_stack_max,TCB_SP)] 区间段内存单元的内容,遇到非零的内存单元停止比较,指针order_search指向 该单元。

3)、比较stack_top与order_search-0x68,如果stack_top大于等于 order_search-0x68,则任务栈溢出;否则将current_stack_max更新为order_search。 其中0x68为空函数函数栈帧的大小。

本发明是针对每个任务维护一个单独的变量current_stack_max,记录当前 栈的最大使用量,初始值为0;任务栈在任务创建时初始化为0;任务栈的栈顶 保留一个空函数栈帧大小的余量,栈使用超过该余量,即视为溢出。本发明算 法准确、效率高,可以有效帮助应用开发人员合理分配任务栈大小,提高系统 的可靠性及安全性。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发 明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明 的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号