CN102629231B - 一种检测任务堆栈的方法 - Google Patents
一种检测任务堆栈的方法 Download PDFInfo
- Publication number
- CN102629231B CN102629231B CN201210122550.1A CN201210122550A CN102629231B CN 102629231 B CN102629231 B CN 102629231B CN 201210122550 A CN201210122550 A CN 201210122550A CN 102629231 B CN102629231 B CN 102629231B
- Authority
- CN
- China
- Prior art keywords
- task
- stack
- surveyed area
- storehouse
- detection
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明涉及计算机操作系统领域,其公开了一种简便的检测任务堆栈的方法,解决传统技术中检测任务堆栈的操作复杂、不利于操作系统升级的问题。本发明的技术方案的要点包括以下步骤:a.在任务堆栈的栈顶和栈底分别划分一部分内存作为检测区域;b.将检测区域初始化为某一个值,并将检测区域的位置记录在任务控制块的用户保留字段中;c.操作系统在工作过程中对检测区域进行检测,若检测到检测区域的值发生变化,则判定为任务堆栈出现问题;d.将任务堆栈出现问题的信息报告给用户,并进行相应处理。本发明适用于vxWorks实时多任务操作系统。
Description
技术领域
本发明涉及计算机操作系统领域,特别涉及对计算机操作系统中任务堆栈的检测方法。
背景技术
在计算机操作系统中,任务堆栈是一种很重要的资源,如果任务堆栈溢出或者被破坏,很可能导致系统运行异常。因此,对任务堆栈的检测技术就显得相当重要。
由中兴通讯股份有限公司申请的一件申请号为200810098217.5的发明专利《一种任务堆栈溢出的实时检测方法及装置》介绍了一种堆栈溢出的检测方法,其采用的手段是:将任务堆栈的栈顶相邻的部分内存设为隔离区,并使用存储区管理单元(MMU,MemoryManageUnit)的功能将所述隔离区的属性设置为不可写,在对所述任务堆栈进行压栈的过程中,若压栈操作对所述隔离区进行了写操作,则判定所述任务堆栈溢出。
上述堆栈溢出检测方法中存在两个缺点:其一,设置隔离区的操作比较麻烦,需要修改操作系统内核代码,只有对操作系统内核十分熟悉的专业人士才能完成,不利于操作系统的升级;其二,需要在隔离区上启用MMU管理,对于某种架构的CPU,启用MMU后会降低CPU的性能。
而中兴通讯股份有限公司申请的另外一件申请号为200710003510.4的发明专利《一种检测堆栈帧破坏的方法》介绍了一种检测堆栈是否被破坏的方法,其采用的手段是:通过编译器在函数中插桩,在入桩函数将堆栈帧备份到栈顶,在出桩函数中判断当前堆栈帧是否一致,从而判定任务堆栈是否被破坏。
该检测方法需要对操作系统中几乎所有的函数进行插桩,操作比较复杂,对CPU的性能影响也不得不考虑,另外也需要修改操作系统内部函数,不利于操作系统的升级。
发明内容
本发明所要解决的技术问题是:提出一种简便的检测任务堆栈的方法,解决传统技术中检测任务堆栈的操作复杂、不利于操作系统升级的问题。
本发明解决上述技术问题所采用的方案是:一种检测任务堆栈的方法,包括以下步骤:
a.在任务堆栈的栈顶和栈底分别划分一部分内存作为检测区域;
b.将检测区域初始化为某一个值,并将检测区域的位置记录在任务控制块的用户保留字段中;
c.操作系统在工作过程中对检测区域进行检测,若检测到检测区域的值发生变化,则判定为任务堆栈出现问题;
d.将任务堆栈出现问题的信息报告给用户,并进行相应处理。
进一步,将检测区域初始化为某一个值的具体操作是:在任务的入口函数中定义一个局部结构体变量,将局部结构体变量的各个字段初始化成某一个值。
进一步,所述检测区域包括在任务堆栈的栈顶划分的内存区域和在栈底划分的内存区域。
进一步,所述任务堆栈出现问题是指任务堆栈溢出或被破坏。
进一步,步骤d中,所述相应处理是指挂起溢出任务或重启操作系统。
进一步,步骤c的具体实现方法为:
当工作任务得到调度时,对检测区域的值进行检测,若检测到检测区域的值发生变化,则判定为任务堆栈出现问题;
或者,由操作系统生成一个堆栈检测任务,所述堆栈检测任务周期性对检测区域进行检测,如果检测到检测区域的值被修改,则判定为任务堆栈出现问题;
或者,由操作系统生成一个堆栈检测任务,所述堆栈检测任务周期检测每个任务的SP指针的值,若检测到某个任务的SP指针没有在堆栈区域内,则判定为任务堆栈出现问题。
本发明的有益效果是:利用纯软件方法检测任务堆栈,不需要修改操作系统接口函数,不影响CPU性能,且检测方法简便,有利于系统升级。
附图说明
图1为任务堆栈示意图;
图2为本发明的检测方法流程图。
具体实施方式
针对传统技术中检测任务堆栈的操作复杂、不利于操作系统升级的问题,本发明提出一种简便的检测任务堆栈的方法,该方法的流程如图2所示,其包括以下步骤:
a.在任务堆栈的栈顶和栈底分别划分一部分内存作为检测区域;
b.将检测区域初始化为某一个值,并将检测区域的位置记录在任务控制块的用户保留字段中;
c.操作系统在工作过程中对检测区域进行检测,若检测到检测区域的值发生变化,则判定为任务堆栈出现问题;
d.将任务堆栈出现问题的信息报告给用户,并进行相应处理。
在具体实施上,如图1所示,在栈顶区域划分一小块内存设置为检测区域A,并初始化成某一个值,将检测区域A的位置记录在任务控制块的用户保留字段中,在栈底区域划分出一块作为堆栈破坏检测区域B,初始化成某一个值(初始化的具体的操作是在任务的入口函数中定义一个局部结构体变量,将局部控制结构体变量的各个字段初始化某一个值),将检测区域B的位置记录在任务控制块中用户保留字段中。我们将把检测区域A和检测区域B统称为检测区域。
操作系统在工作过程中对检测区域进行检测,若检测到检测区域的值发生变化,则判定为任务堆栈出现问题;然后将任务堆栈出现问题的信息报告给用户,并作相应处理;
对检测区域的检测方式有以下三种:
1、当工作任务得到调度时,对检测区域的值进行检测,若检测到检测区域的值发生变化,说明工作任务堆栈出现问题(堆栈溢出或被破坏),则将此信息报告用户,并作相应处理:如挂起溢出任务,或者重起系统。
2、生成一个堆栈检测任务,所述检测任务周期性检测系统中每个工作任务的检测区域,如果检测系统中某个任务堆栈的检测区域的值被修改,则说明该工作任务堆栈出现问题(堆栈溢出或被破坏),则将此信息报告用户,并作相应处理:如挂起溢出任务,或者重起系统。
3、生成一个堆栈检测任务,所述检测任务周期性检测每个任务的SP(Stackpointer,堆栈指针寄存器)指针的值,若检测到某个任务的SP指针没有在堆栈区域内,则说明该任务堆栈出现问题(堆栈溢出或被破坏),则将此信息报告用户,并作相应处理:如挂起该工作任务,或者重起系统。
Claims (6)
1.一种检测任务堆栈的方法,其特征在于,包括以下步骤:
a.在任务堆栈的栈顶和栈底分别划分一部分内存作为检测区域;
b.将检测区域初始化为某一个值,并将检测区域的位置记录在任务控制块的用户保留字段中;
c.操作系统在工作过程中对检测区域进行检测,若检测到检测区域的值发生变化,则判定为任务堆栈出现问题;
d.将任务堆栈出现问题的信息报告给用户,并进行相应处理;
步骤b中,将检测区域初始化为某一个值的具体操作是:在任务的入口函数中定义一个局部结构体变量,将局部结构体变量的各个字段初始化成某一个值。
2.如权利要求1所述的一种检测任务堆栈的方法,其特征在于,所述任务堆栈出现问题是指任务堆栈溢出或被破坏。
3.如权利要求1所述的一种检测任务堆栈的方法,其特征在于,步骤d中,所述相应处理是指挂起溢出任务或重启操作系统。
4.如权利要求1-3任意一项所述的一种检测任务堆栈的方法,其特征在于,步骤c的具体实现方法为:当工作任务得到调度时,对检测区域的值进行检测,若检测到检测区域的值发生变化,则判定为任务堆栈出现问题。
5.如权利要求1-3任意一项所述的一种检测任务堆栈的方法,其特征在于,步骤c的具体实现方法为:由操作系统生成一个堆栈检测任务,所述堆栈检测任务周期性对检测区域进行检测,如果检测到检测区域的值被修改,则判定为任务堆栈出现问题。
6.如权利要求1-3任意一项所述的一种检测任务堆栈的方法,其特征在于,步骤c的具体实现方法为:由操作系统生成一个堆栈检测任务,所述堆栈检测任务周期检测每个任务的SP指针的值,若检测到某个任务的SP指针没有在堆栈区域内,则判定为任务堆栈出现问题。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210122550.1A CN102629231B (zh) | 2012-04-24 | 2012-04-24 | 一种检测任务堆栈的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210122550.1A CN102629231B (zh) | 2012-04-24 | 2012-04-24 | 一种检测任务堆栈的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102629231A CN102629231A (zh) | 2012-08-08 |
CN102629231B true CN102629231B (zh) | 2016-04-13 |
Family
ID=46587491
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210122550.1A Active CN102629231B (zh) | 2012-04-24 | 2012-04-24 | 一种检测任务堆栈的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102629231B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102013202961A1 (de) * | 2013-02-22 | 2014-08-28 | Robert Bosch Gmbh | Verfahren zum Überwachen eines Stackspeichers in einem Betriebssystem eines Steuergeräts eines Kraftfahrzeuges |
CN104536810B (zh) * | 2014-12-18 | 2018-05-11 | 北京奇虎科技有限公司 | 一种基于栈的异常检测方法和装置 |
CN106547606B (zh) * | 2016-10-25 | 2019-07-02 | 交控科技股份有限公司 | 堆栈自检方法及装置 |
CN109214169B (zh) * | 2017-06-30 | 2023-12-08 | 芜湖美的厨卫电器制造有限公司 | 堆栈溢出检测方法、装置及家用电器 |
CN110502169B (zh) * | 2018-05-18 | 2021-10-19 | 华为技术有限公司 | 一种显示控制方法及终端 |
CN114048465B (zh) * | 2022-01-14 | 2022-05-06 | 苏州浪潮智能科技有限公司 | 一种堆栈状态检测方法、装置、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154180A (zh) * | 2006-09-29 | 2008-04-02 | 大唐移动通信设备有限公司 | 一种任务栈溢出的监测方法 |
CN101183331A (zh) * | 2007-12-12 | 2008-05-21 | 上海华为技术有限公司 | 一种任务栈溢出检测方法、装置及计算机系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7191445B2 (en) * | 2001-08-31 | 2007-03-13 | Texas Instruments Incorporated | Method using embedded real-time analysis components with corresponding real-time operating system software objects |
-
2012
- 2012-04-24 CN CN201210122550.1A patent/CN102629231B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154180A (zh) * | 2006-09-29 | 2008-04-02 | 大唐移动通信设备有限公司 | 一种任务栈溢出的监测方法 |
CN101183331A (zh) * | 2007-12-12 | 2008-05-21 | 上海华为技术有限公司 | 一种任务栈溢出检测方法、装置及计算机系统 |
Non-Patent Citations (1)
Title |
---|
Linux下可执行文件的动态内存检测设计与实现;高海昌等;《计算机工程》;20070131;第33卷(第1期);第74-76页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102629231A (zh) | 2012-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102629231B (zh) | 一种检测任务堆栈的方法 | |
CN104335175B (zh) | 基于系统性能度量在系统节点之间标识和迁移线程的方法和系统 | |
CN106650780A (zh) | 数据处理方法及装置、分类器训练方法及系统 | |
CN104142728B (zh) | 电子装置 | |
CN103914365B (zh) | 获取移动终端应用耗电量的方法及装置 | |
CN104503565A (zh) | 移动设备的功耗管理方法、装置及移动设备 | |
JP2008521093A5 (zh) | ||
CN103870190A (zh) | 一种控制电子设备的方法及电子设备 | |
CN103069462B (zh) | 用于控制设备的方法和装置 | |
CN103914295B (zh) | 唤醒事件管理方法、唤醒事件管理装置 | |
CN104932963B (zh) | 管理终端的方法及装置 | |
JP2011150660A5 (zh) | ||
CN103236194A (zh) | 一种利用智能操作系统的提醒和推送功能的辅助学习方法 | |
CN104461746A (zh) | 一种基于Android系统的内存空间优化方法及系统 | |
CN102262434A (zh) | 基于加速计输出来修改电子设备的转换的方法和装置 | |
CN109313478A (zh) | 出于能效在移动装置上进行的唤醒锁感知系统宽作业调度 | |
CN107423110A (zh) | 一种基于libvirt的虚拟机实时监测方法及其装置 | |
CN103077049A (zh) | 智能桌面导航栏更新方法及系统 | |
CN105487971A (zh) | 一种软件测试中操作步骤记录和复现的方法及系统 | |
CN105095523A (zh) | 一种处理告警事件的方法及系统 | |
CN104133671B (zh) | 一种数字处理设备的硬件接口屏蔽装置及方法 | |
CN103258047B (zh) | 一种面向药企作业成本控制数据仓库的数据组织方法 | |
CN107635058A (zh) | 移动终端及其Doze模式的控制方法、可读存储介质 | |
WO2021151304A1 (zh) | 时序数据滞后性处理方法、装置、电子设备及存储介质 | |
CN107368351A (zh) | 一种虚拟机配置自动升级扩容方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |