The invention discloses a SPARC platform task stack overflow detection algorithm, which is characterized in that the detection algorithm for each task to maintain a single variable current_stack_max, use the largest record of the current stack, the initial value is 0; in the task of creating a task stack are initialized to 0; the task remains a top of the stack empty function stack frame size of the margin, the margin is more than the use of the stack, as overflow. The invention has the advantages of accurate algorithm and high efficiency, and can effectively help the application developer to reasonably distribute the task stack size and improve the reliability and the security of the system.
【技术实现步骤摘要】
一种SPARC平台任务栈溢出检测算法
本专利技术属于嵌入式实时操作系统开发领域,具体地说,涉及一种SPARC平台任务栈溢出检测算法。
技术介绍
SPARC是一种开源的RISC处理器架构技术,在国内广泛的应用在航天领域。同时,随着航天任务的复杂化,嵌入式实时操作系统在航天领域的应用也越来越广泛。为保证系统的实时性与安全性,嵌入式实时操作系统中任务使用的堆栈一般都静态分配,对于基于RTOS的应用开发人员,由于缺乏对底层硬件及编译器编译规则的了解,通常难以给任务分配合适的栈大小,导致任务栈溢出,开发人员需花大量时间查找原因。因此现在有些嵌入式实时操作系统提供了任务栈溢出的检测函数,在系统空闲时调用,可以在任务栈将要溢出或已经溢出时给出报警,帮助应用开发人员了解任务栈的使用情况,并调整任务栈大小,预防任务栈的溢出。现有技术存在的主要问题:1、现有的任务栈溢出检测算法简单、通用,但由于SPARC平台的特殊性,不能给出运行在SPARC平台的任务栈溢出的准确判定结果。如目前在国内航天领域广泛使用的SPARCV7、V8架构,硬件并不提供栈溢出检测的支持,该算法在就绪任务运行之前,比较其SP指针与栈最大使用量限制指针StkLimitPtr,在栈向下增长时,如果SP小于StkLimitPtr,则任务运行时会有溢出的可能。但即使SP大于StkLimitPtr,在任务获得CPU不断运行过程中,仍有可能导致栈溢出,且在任务放弃CPU时,由于函数栈帧的释放使SP指针已经后退到StkLimitPtr之下,这种情况下,该算法无法检测出任务栈发生过溢出。2、还有一种方法是通过进行任务栈最大 ...
【技术保护点】
一种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为空函数栈帧的大小。
【技术特征摘要】
1.一种SPARC平台任务栈溢出检测算法,其特征在于:所述检测算法针对每个任务维护一个单独的变量current_stack_max,记录当前栈的最大使用量,初始值为0;任务栈在任务创建时初始化为0;任务栈的栈顶保留一个空函数栈帧大小的余量,栈使用超过该余量,即视为溢出;算法步骤如下:1)、首先比较current_stack_max和任务控制块中保存的当前函数栈帧的栈顶TCB_SP,求得min(current_stack_max,TCB_SP);2)、从栈顶...
【专利技术属性】
技术研发人员:卓保特,李尚杰,程胜,许开维,
申请(专利权)人:北京神舟航天软件技术有限公司,
类型:发明
国别省市:北京,11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。