一种任务栈溢出检测方法、装置及计算机系统制造方法及图纸

技术编号:2830533 阅读:344 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及堆栈处理技术,公开了一种任务栈溢出检测方法、装置及计算机系统,其中任务栈溢出检测方法包括:在任务栈的栈顶设置检测空间;将所述检测空间中的数据设置为只读属性;通过检测是否有任务尝试更改所述只读属性的数据,判断是否有任务栈溢出。使用本发明专利技术实施例提供的技术方案,不需要启动额外的定时检测任务或定时检测中断对任务栈溢出进行检测,可以节省有限的系统资源。

【技术实现步骤摘要】

本专利技术涉及堆栈处理技术,具体涉及一种任务栈溢出检测方法、装置及 计算机系统。
技术介绍
现代嵌入式实时操作系统中,任务越来越多,功能也越来越多,系统也 越来越复杂。在多任务的实时操作系统中, 一般每个任务(或进程)多有自 己独立的堆栈, 一个典型的实时多任务操作系统的任务栈分布情况为一个首 尾相连的链表结构。任务栈中存放了任务相关的任务首地址、状态寄存器、 现场数据等重要信息。在系统运行过程中,当任务的现场数据越来越大时, 比如有太大的局部变量或者数组越界访问时可能会越过栈顶,出现任务栈溢 出现象,即出现任务栈越界的现象,在任务栈溢出时,会将其他任务的首地 址或者状态寄存器等数据修改,该修改可能会导致其他任务异常甚至系统崩 溃。现有的一种任务栈溢出检测方法是这样的如图1所示,描述了 n个任务(任务l、任务2.....任务n)的任务栈的情况,每个任务的任务栈从栈底部分开始分别是任务首地址、状态寄存器等信息,现场数据存储在寄存器 中,为了检测任务栈溢出,在每个任务的栈顶部分设置了一段标志空间101, 使原来相邻任务的临界点,如图1中的任务1的栈顶和任务2的栈底加了一 段标志空间101,因而原有的相邻任务可以通过标志空间101隔开。为了能够对任务栈的溢出进行检测,在标志空间101写上预置的一^:特 殊标志, 一般情况下是不会有任务所填写的数据与所述的特殊标志相同,因 而可以在标志空间101写上特殊标志后,可以通过在定时检测任务、或者通被任务所改写,则说明发生了任务栈溢出,从而进行相应的后续处理。测,但是需要启动额外的定时检测任务或定时检测中断,浪费系统资源;同时,由于是通过定时检测任务或定时检测中断进行检测,不能实时的对任务 栈溢出进行检测。
技术实现思路
本专利技术实施例提供了一种任务栈溢出检测方法、装置及计算机系统,不本专利技术实施例的目的是通过以下技术方案实现的本专利技术实施例提供了一种任务栈溢出检测方法,包括在任务栈的栈顶 设置检测空间;将所述检测空间中的数据设置为只读属性;通过检测是否有 任务尝试更改所述只读属性的数据,判断是否有任务栈溢出。相应的,本专利技术实施例提供了一种任务栈溢出检测装置,包括空间设 置单元,用于在任务栈的栈顶设置检测空间;属性设置单元,用于将所述空 间设置单元设置的所述检测空间中的数据设置为只读属性;检测单元,用于 检测是否有任务尝试更改所述属性设置单元设置的所述只读属性的数据。本专利技术实施例还提供了 一种计算机系统,包括本专利技术实施例提供的上述 任务栈溢出检测装置。从本专利技术实施例提供的以上技术方案可以看出,由于本专利技术实施例可以 设置检测空间,并将检测空间中的数据设置为只读属性,从而在有任务尝试 更改只读属性的数据时可以直接检测到任务栈溢出,而不需要设置定时任务、 或定时检测中断,因而可以节省有限的系统资源;同时,由于并不能更改只 读属性的数据,因而在任务栈溢出后不会对其他的任务栈造成影响,提高系 统的稳定性。附图说明图1为现有技术中任务栈分布示意图2为本专利技术实施例中任务栈溢出检测方法实施例一的流程示意图; 图3为本专利技术实施例中任务栈分布示意图4为本专利技术实施例中任务栈溢出检测装置实施例一的结构示意图; 图5为本专利技术实施例中任务栈溢出检测装置实施例二的结构示意图。 具体实施例方式为使本专利技术的目的、技术方案、及优点更加清楚明白,以下参照附图并 举实施例,对本专利技术进一步详细说明。图2描述了本专利技术提供的任务栈溢出检测方法实施例一的流程,包括步骤201 、在任务栈的栈顶设置检测空间。具体的,可以在分配任务栈时多分配一些空间作为4企测空间,也可以在 分配任务栈后,从任务栈的栈顶选取部分空间作为4全测空间;其中,4企测空 间的大小根据具体的使用环境、不同的中央处理器(CPU: Central Process Unit) 类型等会有不同,因而检测空间的大小需要按照具体需要进行设置。步骤202、将检测空间中的数据设置为只读属性。本专利技术实施例优选通过存储器管理单元(MMU: Memory Management Unit)将检测空间中的数据设置为只读属性,所述的MMU可以设置在CPU 内,也可以设置在CPU外,本专利技术实施例优选将MMU设置在CPU内。但是 本专利技术实施例并不限定只采用MMU将检测空间中的数据设置为只读属性。其中,可以只将检测空间中的部分数据设置为只读属性,也可以将检测 空间的全部数据设置为只读属性。步骤203、通过检测是否有任务尝试更改只读属性的数据,判断是否有任 务栈溢出。如果有任务尝试更改只读属性的数据,则说明有任务栈溢出;反之,则 说明没有任务栈溢出。数据的属性设置为只读,因而只能读取其中的数据,不能对数据进行修 改。在任务栈溢出时,需要写入相应的数据,由于数据为只读属性,因而在任务尝试更改只读属性的数据时,会产生异常,例如产生CPU的数据访问异常等,从而可以通过检测是否有任务尝试更改只读属性的数据来判断是否有 任务栈溢出。在检测到有任务尝试更改只读属性的数据,即检测到任务栈溢 出时,就可以触发相应的后续操作。从上可知,本实施例通过设置检测空间,并将检测空间中的数据设置为 只读属性,从而在有任务尝试更改只读属性的数据时可以直接检测到任务栈 溢出,而不需要设置定时任务、或定时检测中断,因而可以节省有限的系统 资源;同时,由于并不能更改只读属性的数据,因而在任务栈溢出后不会对 其他的任务栈造成影响,提高系统的稳定性。在检测到有任务尝试更改只读属性的数据时,可以触发CPU的数据访问 异常,通过数据访问异常将尝试更改只读属性的数据的任务挂起,即暂停该 任务,从而中止该任务对只读属性的数据的更改,避免对其他的任务栈造成 影响。由于在有任务尝试更改只读属性的数据时,会触发CPU的数据访问异常,因而可以对CPU数据访问异常中断处理程序进行优化,使优化后的CPU数据访问异常中断处理程序可以记录数据异常访问时的任务标识、和/或尝试更改 的数据的数据地址。因此,本专利技术实施例在触发中央处理器的数据访问异常 后,可以调用预置的CPU数据访问异常中断处理程序,记录任务的任务标识、 和/或尝试更改的数据的数据地址。通过记录任务标识,在再次为该任务分配任务栈时可以适当的增加一些空间,使再次为该任务分配的任务栈不容易溢出,从而提高系统稳定性;进 一步,通过记录尝试更改的数据的数据地址,可以具体知道为该任务分配的 任务栈的大小,避免造成对有限的空间资源的浪费。在使用MMU时,本专利技术实施例优选将检测空间的容量设置为MMU最 小管理页大小的两倍,但是本专利技术实施例并不限定只将检测空间的容量设置 为MMU最小管理页大小的两倍,例如设置为2.5倍、三倍或四倍等都不会影响本专利技术的实现。假设MMU最小管理页大小为4K字节(Bytes),则本专利技术 实施例优选将检测空间的容量设置为8Kbytes。例如,最小管理页大小为4K Bytes, —个任务本来需要的空间大小为7K Bytes,再加上检测空间需要的8K Bytes,实际上分配给该任务的空间大小应该为15KBytes。因而在为任务栈设 置了最小管理页大小的两倍容量的检测空间时,需要从最小管理页大小的两 倍容量的检测空间中,找到是最小管理页大小的整数倍的数据地址,该最小 管理页的整本文档来自技高网
...

【技术保护点】
一种任务栈溢出检测方法,其特征在于,包括:在任务栈的栈顶设置检测空间;将所述检测空间中的数据设置为只读属性;通过检测是否有任务尝试更改所述只读属性的数据,判断是否有任务栈溢出。

【技术特征摘要】
1、一种任务栈溢出检测方法,其特征在于,包括在任务栈的栈顶设置检测空间;将所述检测空间中的数据设置为只读属性;通过检测是否有任务尝试更改所述只读属性的数据,判断是否有任务栈溢出。2、 如权利要求1所述的任务栈溢出检测方法,其特征在于,检测到有任 务尝试更改所述只读属性的数据,该方法进一步包括触发中央处理器的数据访问异常,中止所述任务对所述只读属性的数据 的更改。3、 如权利要求2所述的任务栈溢出检测方法,其特征在于,触发中央处 理器的数据访问异常后,该方法进一步包括调用预置的中央处理器数据访问异常中断处理程序,记录所述任务的任 务标识、和/或尝试更改的数据的数据地址。4、 如权利要求1至3任一所述的任务栈溢出检测方法,其特征在于,使 用存储器管理单元将所述检测空间中的数据设置为只读属性。5、 如权利要求4所述的任务栈溢出检测方法,其特征在于,所述在任务 栈的栈顶设置检测空间的步骤包括将所述检测空间的容量设置为所述存储器管理单元最小管理页大小的至 少两倍。6、 如权利要求5所述的任务栈溢出检测方法,其特征在于,所述将所述 检测空间中的数据设置为只读属性的步骤包括从所述容量为最小管理页大小的两倍的检...

【专利技术属性】
技术研发人员:崔爱国
申请(专利权)人:上海华为技术有限公司
类型:发明
国别省市:31[中国|上海]

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

1