CN101853191A - 检测操作系统中任务死循环的方法及操作系统 - Google Patents
检测操作系统中任务死循环的方法及操作系统 Download PDFInfo
- Publication number
- CN101853191A CN101853191A CN 201010207176 CN201010207176A CN101853191A CN 101853191 A CN101853191 A CN 101853191A CN 201010207176 CN201010207176 CN 201010207176 CN 201010207176 A CN201010207176 A CN 201010207176A CN 101853191 A CN101853191 A CN 101853191A
- Authority
- CN
- China
- Prior art keywords
- task
- ready state
- cumulative time
- time
- endless loop
- 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.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种更为全面的任务死循环的检测方法以及实现该方法的操作系统。不同于现有的死循环检测方法通过对任务连续运行时长与阈值比较来判断是否出现死循环,本发明通过就绪状态累计时间长度与阈值比较来判断是否出现死循环。本发明基于的原理是,优先级抢占式操作系统中,当有任务发生死循环而不会主动放弃CPU时,该任务在任何情况下都处于就绪状态。通过统计一个任务的就绪状态累计时间长度来进行死循环判断可以避免因被动放弃CPU的死循环的漏检。
Description
技术领域
本发明涉及计算机操作系统,尤其涉及基于任务优先级抢占的操作系统中死循环检测技术。
背景技术
在基于任务优先级调度策略的操作系统中,当高优先级任务处于就绪状态时,低优先级任务是肯定不能得到调度的。一股情况下,高优先级任务不会一直运行,任务的设计者会通过主动或被动的方式放弃CPU的执行,以使得低优先级的任务能够得到执行。任务主动放弃CPU的形式一股为:延迟自身的执行,等待一段时间再恢复执行;或者因为等待某个事件而阻塞自己。被动的形式主要是:该任务被更高优先级任务抢占。当高优先级任务由于设计或编码错误导致出现死循环,并且死循环中的代码都没有主动放弃CPU的行为,那么低优先级任务将得不到执行,导致整个系统运行不正常。
为了检测死循环,现有的方法是通过时钟中断检测任务连续运行时长来检测死循环,并进行死循环的处理。如果时钟中断检测到任务连续运行时长超过设定的阈值,则认为该任务出现死循环,然后产生中断以记录该任务的相关任务信息,并进行相应的处理。具体步骤是,在时钟中断时,记录当前正在运行的任务的运行时长,如果任务发生切换则将该任务的运行时长清零;如果时钟中断时检测发现任务连续运行时长超于预定的阈值,则认为任务出现死循环。在检测出死循环任务后,获取死循环任务控制块信息、寄存器信息、堆栈信息等,通过寄存器信息获取任务调用栈信息,然后进行记录以便进行问题定位。
上述方法对死循环的检测不全面。当被检测任务不是连续运行,而是断断续续时,虽然该任务可能已经处于死循环状态,但是因为其还是会暂时被动放弃CPU。如,某一任务已经出现死循环,但因为有更高优先级任务存在,该死循环任务仍然会暂时停止,此时,现有的死循环检测方法由于该死循环任务已暂时放弃CPU的控制,则该任务的运行时长被清零,死循环漏检。
发明内容
本发明所要解决的技术问题是,提供一种更为全面的任务死循环的检测方法以及实现该方法的操作系统。
本发明为解决上述技术问题所提供的技术方案是,检测操作系统中任务死循环的方法,其特征在于,包括以下步骤:
a、系统定期启动最高优先级的检测任务;
b、检测任务检查每个任务的就绪状态累计时间,就绪状态累计时间大于阈值的任务被判断出现死循环。
不同于现有的死循环检测方法通过对任务连续运行时长与阈值比较来判断是否出现死循环,本发明通过就绪状态累计时间长度与阈值比较来判断是否出现死循环。本发明基于的原理是,优先级抢占式操作系统中,当有任务发生死循环而不会主动放弃CPU时,该任务在任何情况下都处于就绪状态。通过统计一个任务的就绪状态累计时间长度来进行死循环判断可以避免因被动放弃CPU的死循环的漏检。
优选的,系统发生任务切换时,更新放弃CPU控制权的任务的就绪状态累计时间。
将对就绪状态累计时间的统计放在任务切换时,相对于在时钟中断时进行就绪状态累计时间的统计更优。当然,如果在时钟中断时进行统计也是可行的,但是时钟终端的统计未考虑到任务可能因为时钟中断之外的原因而发生切换的情况。所以,在任务切换时进行就绪状态累计时间的统计,能使得死循环的检测更为全面,进一步避免漏检。
任务的就绪状态累计时间的更新方式为:
对于放弃CPU控制权的任务,且该任务保持就绪状态,将该任务本次运行总时间累加至就绪状态累计时间;
对于放弃CPU控制权的任务,且该任务未处于就绪状态,将该任务的就绪状态累计时间清零。
就绪状态累计时间的计算方式为:
系统针对每一个任务,记录其就绪状态累计时间、本次开始运行时间;
系统发生任务切换时,对于放弃CPU控制权的任务,且该任务保持就绪状态,则用当前时间减去本次开始运行时间,得到本次运行总时间,并将本次运行总时间加至就绪状态累计时间;对于获得CPU控制权的任务,将当前时间记录至该任务的本次开始运行时间。
本发明所述检测出死循环的情况还包括类死循环。本发明将导致了系统运行不正常的任务,不论其确为死循环或类死循环,都统称为死循环任务。所以,为了更有效地对这些死循环任务进行分析,步骤b中,判断出死循环任务后,检测任务每隔一个TICK运行一次,每次运行都对死循环任务进行分析,并获取该死循环任务寄存器的值。让死循环任务不断运行,检测任务不断采样,得到尽量多的死循环任务在各个时间点上执行的寄存器值,便于从中找到引起异常的直接原因。
针对上述方法,本发明还提供一种实现该方法的操作系统,包括系统控制模块、检测任务模块、任务控制模块、就绪状态累计时间计算模块;
系统控制模块用于,定期启动最高优先级的检测任务模块,控制任务切换;
检测任务模块用于,检测任务检查每个任务的任务控制模块中就绪状态累计时间,就绪状态累计时间大于阈值的任务被判断出现死循环;
任务控制模块用于,记录每个任务的就绪状态累计时间;
就绪状态累计时间计算模块,用于计算任务的就绪状态累计时间并记录在任务控制模块中。
优选的,就绪状态累计时间计算模块在系统发生任务切换时,计算放弃CPU控制权的任务的就绪状态累计时间。
就绪状态累计时间计算模块对于放弃CPU控制权且保持就绪状态的任务,将该任务本次运行总时间累加至就绪状态累计时间;对于放弃CPU控制权且未处于就绪状态的任务,将该任务的就绪状态累计时间清零。
任务控制模块还记录每个任务的本次开始运行时间;就绪状态累计时间计算模块对于放弃CPU控制权且保持就绪状态的任务,用当前时间减去该任务的本次开始运行时间,得到本次运行总时间,并将本次运行总时间加至就绪状态累计时间;对于获得CPU控制权的任务,将当前时间记录至该任务的本次开始运行时间。
进一步的,检测任务模块还用于,检测任务模块判断出死循环任务后,每隔一个TICK运行一次,每次运行都对死循环任务进行分析,并获取该死循环任务寄存器的值。
本发明的有益效果是,能更为全面地、有效地检测操作系统中的死循环任务。
附图说明
图1为操作系统示意图。
图2为实施例中任务t1与任务t2的切换示意图。
具体实施方式
如图1所示,操作系统包括系统控制模块、检测任务模块、任务控制模块、就绪状态累计时间计算模块;
系统控制模块用于,定期启动最高优先级的检测任务模块,控制任务切换;
检测任务模块用于,检测任务检查每个任务的任务控制模块中就绪状态累计时间,就绪状态累计时间大于阈值的任务被判断出现死循环;检测任务模块判断出死循环任务后,每隔一个TICK多次调用死循环任务,并获取该死循环任务寄存器的值;
任务控制模块用于,记录每个任务的就绪状态累计时间。
就绪状态累计时间计算模块用于,系统发生任务切换时,计算放弃CPU控制权的任务的就绪状态累计时间并记录在任务控制模块中:对于放弃CPU控制权且保持就绪状态的任务,将该任务本次运行总时间累加至就绪状态累计时间;对于放弃CPU控制权且未处于就绪状态的任务,将该任务的就绪状态累计时间清零。
死循环检测方法流程如下:
在任务控制模块中记录两个任务状态:一个是任务在就绪状态下总的运行时间(就绪状态累计时间),另一个是任务本次开始运行时间。在系统中确定一个阙值,并间隔启动一个最高优先级的检测任务;为了不对整个系统产生影响,该任务的执行间隔时间可以设置的大一点,比如每隔5分钟运行一次;
在操作系统发生的任务切换时,对于放弃CPU控制权的任务,如果该任务是就绪状态,通过当前时间减去任务控制块中保存的本次开始运行时间,得到本次运行总时间,将这个运行总时间加到任务控制块中的就绪态累计运行时间上。如果该任务不是就绪态,就绪态累计运行时间清零,表明任务主动挂起了自己。如图2所示,如果任务t1切换到任务t2时,任务t1是就绪状态,则累加任务t1的就绪累计运行时间。如果任务t1切换到任务t2时,任务t1不是就绪状态,任务t1的就绪累计运行时间清零。
获得CPU控制权的任务在任务控制模块中记录其本次开始运行时间。任务切换时,增加的动作只是最简单的数字加减计算,引起的开销非常小。
间隔时间到系统控制模块启动检测任务模块,检测任务比较系统中每个任务的就绪态累计时间是否大于阈值。在没有出现大于阈值的任务之前,检测任务轮询每个任务做简单的数字比较,因此任务执行的时间是非常短的,对整个系统的影响非常小。当检测任务检测到某个任务的就绪状态累计时间大于阈值时,认为出现了死循环,可以自动进入任务分析流程,也可以通过控制台报警,由用户确定是否需要分析。在进入分析流程后,检测任务模块每隔一个tick将死循环任务的所有寄存器值打印出来。由于检测任务有主动延迟,死循环任务会被调度执行,寄存器值可能会发生变化,因此检测任务能够在死循环任务的不同执行点上获得寄存器的值,就有足够多的数据用于分析反汇编的代码,找到引起死循环的直接原因。
Claims (10)
1.检测操作系统中任务死循环的方法,其特征在于,包括以下步骤:
a、系统定期启动最高优先级的检测任务;
b、检测任务检查每个任务的就绪状态累计时间,就绪状态累计时间大于阈值的任务被判断出现死循环。
2.如权利要求1所述检测操作系统中任务死循环的方法,其特征在于,系统发生任务切换时,更新放弃CPU控制权的任务的就绪状态累计时间。
3.如权利要求2所述检测操作系统中任务死循环的方法,其特征在于,任务的就绪状态累计时间的更新方式为:
对于放弃CPU控制权的任务,且该任务保持就绪状态,将该任务本次运行总时间累加至就绪状态累计时间;
对于放弃CPU控制权的任务,且该任务未处于就绪状态,将该任务的就绪状态累计时间清零。
4.如权利要求3所述检测操作系统中任务死循环的方法,其特征在于,就绪状态累计时间的计算方式为:
系统针对每一个任务,记录其就绪状态累计时间、本次开始运行时间;
系统发生任务切换时,对于放弃CPU控制权的任务,且该任务保持就绪状态,则用当前时间减去本次开始运行时间,得到本次运行总时间,并将本次运行总时间加至就绪状态累计时间;对于获得CPU控制权的任务,将当前时间记录至该任务的本次开始运行时间。
5.如权利要求1、2、3或4所述检测操作系统中任务死循环的方法,其特征在于,步骤b中,判断出死循环任务后,检测任务每隔一个TICK运行一次,每次运行都对死循环任务进行分析,并获取该死循环任务寄存器的值。
6.操作系统,其特征在于,包括系统控制模块、检测任务模块、任务控制模块、就绪状态累计时间计算模块;
所述系统控制模块用于,定期启动最高优先级的检测任务模块,控制任务切换;
所述检测任务模块用于,检测任务检查每个任务的任务控制模块中就绪状态累计时间,就绪状态累计时间大于阈值的任务被判断出现死循环;
所述任务控制模块用于,记录每个任务的就绪状态累计时间;
所述就绪状态累计时间计算模块用于,计算就绪状态累计时间并记录在任务控制模块中。
7.如权利要求6所述操作系统,其特征在于,所述就绪状态累计时间计算模块在系统发生任务切换时,计算放弃CPU控制权的任务的就绪状态累计时间。
8.如权利要求7所述操作系统,其特征在于,所述就绪状态累计时间计算模块对于放弃CPU控制权且保持就绪状态的任务,将该任务本次运行总时间累加至就绪状态累计时间;对于放弃CPU控制权且未处于就绪状态的任务,将该任务的就绪状态累计时间清零。
9.如权利要求8所述操作系统,其特征在于,所述任务控制模块还记录每个任务的本次开始运行时间;
就绪状态累计时间计算模块对于放弃CPU控制权且保持就绪状态的任务,用当前时间减去该任务的本次开始运行时间,得到本次运行总时间,并将本次运行总时间加至就绪状态累计时间;对于获得CPU控制权的任务,将当前时间记录至该任务的本次开始运行时间。
10.如权利要求6、7、8或9所述操作系统,其特征在于,所述检测任务模块还用于,检测任务模块判断出死循环任务后,每隔一个TICK运行一次,每次运行都对死循环任务进行分析,并获取该死循环任务寄存器的值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010207176 CN101853191B (zh) | 2010-06-23 | 2010-06-23 | 检测操作系统中任务死循环的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010207176 CN101853191B (zh) | 2010-06-23 | 2010-06-23 | 检测操作系统中任务死循环的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101853191A true CN101853191A (zh) | 2010-10-06 |
CN101853191B CN101853191B (zh) | 2013-02-20 |
Family
ID=42804697
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010207176 Active CN101853191B (zh) | 2010-06-23 | 2010-06-23 | 检测操作系统中任务死循环的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101853191B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102495793A (zh) * | 2011-11-11 | 2012-06-13 | 迈普通信技术股份有限公司 | 一种检测死循环任务的方法 |
CN102654842A (zh) * | 2011-03-02 | 2012-09-05 | 深圳市金蝶中间件有限公司 | 一种判断流程图中是否存在循环回路的方法和装置 |
CN102929770A (zh) * | 2012-09-25 | 2013-02-13 | 烽火通信科技股份有限公司 | 嵌入式linux系统用户态任务独占的监测定位方法 |
CN103164332A (zh) * | 2011-12-15 | 2013-06-19 | 迈普通信技术股份有限公司 | 死循环任务的检测及处理方法 |
CN103218291A (zh) * | 2013-03-29 | 2013-07-24 | 迈普通信技术股份有限公司 | 多任务操作系统中互斥信号量异常的检测方法及装置 |
CN105427695A (zh) * | 2015-11-03 | 2016-03-23 | 中国农业大学 | 编程类考题自动测评方法和系统 |
CN107590047A (zh) * | 2016-07-08 | 2018-01-16 | 佛山市顺德区顺达电脑厂有限公司 | Smi信号逾时的监控系统及方法 |
CN112905372A (zh) * | 2021-02-02 | 2021-06-04 | 浙江大华技术股份有限公司 | 线程的异常诊断方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5278976A (en) * | 1990-04-16 | 1994-01-11 | Rolm Company | Method for detecting infinite loops by setting a flag indicating execution of an idle task having lower priority than executing application tasks |
US6397355B1 (en) * | 1999-03-29 | 2002-05-28 | International Business Machines Corporation | System, method, and program for automatic error detection while utilizing a software state machine for carrying out the process flow of a software program |
CN1811730A (zh) * | 2006-02-22 | 2006-08-02 | 迈普(四川)通信技术有限公司 | 一种死循环或类死循环任务检测方法 |
CN100543686C (zh) * | 2007-11-15 | 2009-09-23 | 上海华为技术有限公司 | 一种检测任务死循环的方法及系统 |
-
2010
- 2010-06-23 CN CN 201010207176 patent/CN101853191B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5278976A (en) * | 1990-04-16 | 1994-01-11 | Rolm Company | Method for detecting infinite loops by setting a flag indicating execution of an idle task having lower priority than executing application tasks |
US6397355B1 (en) * | 1999-03-29 | 2002-05-28 | International Business Machines Corporation | System, method, and program for automatic error detection while utilizing a software state machine for carrying out the process flow of a software program |
CN1811730A (zh) * | 2006-02-22 | 2006-08-02 | 迈普(四川)通信技术有限公司 | 一种死循环或类死循环任务检测方法 |
CN100543686C (zh) * | 2007-11-15 | 2009-09-23 | 上海华为技术有限公司 | 一种检测任务死循环的方法及系统 |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102654842B (zh) * | 2011-03-02 | 2014-07-30 | 深圳市金蝶中间件有限公司 | 一种判断流程图中是否存在循环回路的方法和装置 |
CN102654842A (zh) * | 2011-03-02 | 2012-09-05 | 深圳市金蝶中间件有限公司 | 一种判断流程图中是否存在循环回路的方法和装置 |
CN102495793B (zh) * | 2011-11-11 | 2014-11-05 | 迈普通信技术股份有限公司 | 一种检测死循环任务的方法 |
CN102495793A (zh) * | 2011-11-11 | 2012-06-13 | 迈普通信技术股份有限公司 | 一种检测死循环任务的方法 |
CN103164332A (zh) * | 2011-12-15 | 2013-06-19 | 迈普通信技术股份有限公司 | 死循环任务的检测及处理方法 |
CN103164332B (zh) * | 2011-12-15 | 2015-11-18 | 迈普通信技术股份有限公司 | 死循环任务的检测及处理方法 |
CN102929770A (zh) * | 2012-09-25 | 2013-02-13 | 烽火通信科技股份有限公司 | 嵌入式linux系统用户态任务独占的监测定位方法 |
CN102929770B (zh) * | 2012-09-25 | 2015-07-29 | 烽火通信科技股份有限公司 | 嵌入式linux系统用户态任务独占的监测定位方法 |
CN103218291A (zh) * | 2013-03-29 | 2013-07-24 | 迈普通信技术股份有限公司 | 多任务操作系统中互斥信号量异常的检测方法及装置 |
CN105427695A (zh) * | 2015-11-03 | 2016-03-23 | 中国农业大学 | 编程类考题自动测评方法和系统 |
CN107590047A (zh) * | 2016-07-08 | 2018-01-16 | 佛山市顺德区顺达电脑厂有限公司 | Smi信号逾时的监控系统及方法 |
CN107590047B (zh) * | 2016-07-08 | 2021-02-12 | 佛山市顺德区顺达电脑厂有限公司 | Smi信号逾时的监控系统及方法 |
CN112905372A (zh) * | 2021-02-02 | 2021-06-04 | 浙江大华技术股份有限公司 | 线程的异常诊断方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101853191B (zh) | 2013-02-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101853191B (zh) | 检测操作系统中任务死循环的方法及系统 | |
CN102141947B (zh) | 一种对采用嵌入式操作系统的计算机应用系统中异常任务的处理方法及系统 | |
JP2020512613A5 (zh) | ||
US8677185B2 (en) | Information processing apparatus | |
CN100359481C (zh) | 多任务系统的异常监控装置及其方法 | |
CN102761439B (zh) | Pon接入系统中基于看门狗的异常检测记录装置及方法 | |
CN101976217A (zh) | 网络处理器异常检测方法及系统 | |
CN102081555B (zh) | 调整时钟中断周期的方法和装置 | |
CN103853625A (zh) | 多任务看门狗的实现装置和方法 | |
CN102521098A (zh) | Cpu死机监控的处理方法和装置 | |
CN102369514B (zh) | 一种建立检查点的方法和系统 | |
CN101620562A (zh) | 一种嵌入式系统性能的评估方法及系统 | |
CN105677497A (zh) | 一种高可用性看门狗电路 | |
CN100543686C (zh) | 一种检测任务死循环的方法及系统 | |
CN101561778B (zh) | 一种检测多任务操作系统任务死循环的方法 | |
CN102799212B (zh) | 用于多核多处理器并行系统的全局时钟系统及其使用方法 | |
CN102339029B (zh) | 一种嵌入式操作系统定时保护的实现方法 | |
CN102622300B (zh) | 多任务系统中死循环或类死循环的检测方法 | |
CN103530197A (zh) | 一种检测及解决Linux系统死锁的方法 | |
CN103164332B (zh) | 死循环任务的检测及处理方法 | |
CN105634502A (zh) | 基于状态机的按键扫描的实现方法 | |
CN202153352U (zh) | 防止计算机控制系统失效的看门狗装置 | |
CN113407391A (zh) | 故障处理的方法、计算机系统、基板管理控制器和系统 | |
JP2004005305A (ja) | メモリ使用容量の監視方法及び計算機システム | |
JP2008102778A (ja) | 情報処理装置、情報処理装置の制御方法及びプログラム |
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 |