CN102495793A - 一种检测死循环任务的方法 - Google Patents
一种检测死循环任务的方法 Download PDFInfo
- Publication number
- CN102495793A CN102495793A CN2011103564159A CN201110356415A CN102495793A CN 102495793 A CN102495793 A CN 102495793A CN 2011103564159 A CN2011103564159 A CN 2011103564159A CN 201110356415 A CN201110356415 A CN 201110356415A CN 102495793 A CN102495793 A CN 102495793A
- Authority
- CN
- China
- Prior art keywords
- task
- endless loop
- priority
- operating system
- endless
- 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
Abstract
本发明提供了一种检测死循环任务的方法,首先生成具有最高优先级的死循环监控任务和具有最低优先级的死循环检测任务,然后令死循环监控任务和死循环检测任务周期性运行,死循环检测任务每次运行时记录当前时刻,死循环监控任务每次运行时,根据死循环检测任务的运行情况判断操作系统中是否存在死循环任务,在判定系统中存在死循环任务时,对死循环任务进行定位,并对定位到的死循环任务进行处理。应用本发明能够在消耗较少CPU资源的前提下,检测出系统中的死循环任务,并且,本发明方法实现简单。
Description
技术领域
本发明涉及计算机操作系统技术领域,特别涉及一种检测死循环任务的方法。
背景技术
在计算机操作系统中,有关死循环的检测及其处理是非常重要的技术。
申请号为01112526.8的发明专利申请中公开了一种实时多任务下死循环的处理方法,其描述了一种在实时多任务操作系统中,任务异常运行出现类死循环或者死循环的一种监控和处理方法。该专利的基本思想是使用时钟中断服务程序(ISR)和任务切换钩子函数来监控任务的运行时间,若任务的运行时间大于某个阀值,则认为该任务出现了死循环,此方法将大量消耗CPU资源。与此类似的使用系统时钟中断和任务切换挂钩函数来检测死循环的方法都存在相同的缺点。
发明内容
本发明提供了一种在多任务操作系统中检测死循环任务的方法,以克服现有技术检测死循环或类死循环任务时对操作系统CPU资源消耗过多的问题,本发明方法消耗CPU资源少,并且实现简单。
(待权利要求的内容确定后,将拷贝至此)
由上述技术方案可见,本发明首先通过周期性运行的死循环监控任务和死循环检测任务确定操作系统中是否存在死循环任务;当存在死循环任务时,通过划分基于优先级的任务列表,设置任务列表的优先级控制块,并注册任务切换钩子函数对被调度任务的控制块及其优先级控制块中的相应字段进行设置,从而实现对死循环任务进行定位。
为避免消耗过多CPU资源,本发明没有使用系统时钟中断服务程序检测死循环,而是在仅通过耗费CPU资源极低的周期性运行的死循环监控任务和死循环检测任务检测到操作系统中存在死循环后,才向操作系统注册任务切换钩子函数对死循环任务进行定位,并且,任务切换钩子函数中的操作非常简单,对CPU资源的消耗极低,因此,本发明提出的技术方案具有消耗CPU资源少、且实现简单的有益效果。
附图说明
图1为本发明一较佳检测死循环任务的方法的流程示意图;
图2为本发明死循环监控任务的运行流程示意图;
图3为本发明死循环检测任务的运行流程示意图;
图4为本发明基于优先级划分任务列表的示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
本发明利用在非时间片轮转的优先级抢占式操作系统中,只要高优先级任务不阻塞或者不主动出让CPU,那么低优先级任务或者与该高优先级任务具有相同优先级的其它任务就不能得到调度的原理,提出一种检测死循环任务的方法。该方法首先生成具有最高优先级的死循环监控任务和具有最低优先级的死循环检测任务,然后令死循环监控任务和死循环检测任务周期性运行,死循环检测任务每次运行时记录当前时刻,死循环监控任务每次运行时,根据死循环检测任务的运行情况判断操作系统中是否存在死循环任务,在判定系统中存在死循环任务时,对死循环任务进行定位,并对定位到的死循环任务进行处理。
本发明适用于所有基于优先级对任务进行调度的操作系统,特别适用于vxWorks实时多任务操作系统。
下面通过一个较佳实施例对本发明进行详细说明。
图1为本发明一较佳检测死循环任务的方法的流程示意图。参见图1,该方法包括:
步骤101:生成具有最高优先级的死循环监控任务和具有最低优先级的死循环检测任务,死循环监控任务和死循环检测任务周期性运行。
假设操作系统中任务的优先级为0~100,优先级0为最低优先级,优先级100为最高优先级,则可以将死循环监控任务的优先级设置为100,将死循环检测任务的优先级设置为0。
为保证死循环监控任务和死循环检测任务不占用大量的CPU,本发明中,死循环监控任务和死循环检测任务都周期性地运行,即:以固定的周期,每睡眠一段时间运行一次。其中,死循环监控任务每睡眠较长周期运行一次,如图2所示;死循环检测任务每睡眠较短周期运行一次,如图3所示。这里,可以根据实际情况设置睡眠周期。
步骤102:死循环监控任务根据死循环检测任务的运行情况判断操作系统中是否存在死循环,如果存在死循环,执行步骤103,否则,跳到步骤107。
死循环检测任务每次运行时记录本次运行的当前时刻,死循环监控任务每次运行时,根据当前时刻和死循环检测任务运行时记录的当前时刻,计算出死循环检测任务有多长时间没有运行了,即死循环检测任务未得到调度的时间间隔。由于死循环检测任务在操作系统中的优先级最低,如果操作系统中不存在死循环任务,那么,死循环检测任务将有可能在其他任务处理完成的情况下得到调度,即:可以在合理长的时间间隔内得到一次调度,反之,如果死循环检测任务未得到调度的时间间隔比较长,超过了预先设置的阀值,则表明操作系统中有任务出现了死循环或者类死循环。
步骤103:判断是否已设置死循环标志,若没有设置,执行步骤104;若已经设置,跳到步骤109。
步骤104:为每个优先级设置一个任务列表,并为每个任务列表设置一个优先级控制块,在每个任务的任务控制块中设置任务运行字段,其值置为0;其中,每个任务列表中包含操作系统中所有具有相应优先级的任务,每个优先级控制块中包含任务个数字段和任务运行字段,任务个数字段填充相应优先级的任务的总个数,任务运行字段置为0。
本步骤中,可以通过操作系统接口获取包含操作系统中所有任务的任务控制块列表,并将所有任务按照优先级进行划分,从而得到多个基于优先级的任务列表,如图4所示。
其中,任务控制块中的任务运行字段可以由任务控制块中的用户保留字段扩充得到。
步骤105:向操作系统注册任务切换钩子函数。
在操作系统中,每发生一次任务切换,就会调用一次已注册的任务切换钩子函数。本发明中,任务切换钩子函数通过优先级索引优先级控制块,当任务切换钩子函数被调用时,其执行以下操作:对本次被调度的任务的任务控制块中的运行字段进行加1操作,并对该任务所属的任务列表的优先级控制块中的任务运行字段进行加1操作。
步骤106:设置死循环标志。
这里,死循环标志实际上用于对死循环监控任务所执行的步骤104和步骤105进行标记,设置了死循环标志,表明死循环监控任务已执行步骤104和步骤105,其作用在于节约CPU资源。
上述步骤104~106的执行顺序可以任意调换。
步骤107:死循环监控任务出让CPU,进入睡眠状态,操作系统中的其他任务得到调度。
由于在非时间片轮转的优先级抢占式操作系统中,只要高优先任务不阻塞或者不主动出让CPU,那么低优先级任务或者与该高优先级任务具有相同优先级的其它任务就不能得到调度,而本发明死循环监控任务只有在操作系统中存在死循环任务时,才会向提供注册任务切换钩子函数,因此,如果已注册任务切换钩子函数,那么,死循环监控任务出让CPU之后,操作系统中只有优先级高于死循环任务优先级的任务和死循环任务才能得到调度,对于得到调度的任务,任务切换钩子函数将对其任务控制块中的运行字段进行加1操作,并对其对应的优先级控制块中的任务运行字段进行加1操作,如此,根据任务控制块运行字段的取值和优先级控制块任务运行字段的取值,死循环任务将得以定位。如果没有注册任务切换钩子函数,表明当前操作系统中并不存在死循环任务,死循环监控任务出让CPU的目的仅在于令其他优先级的任务能够得以调度,而并非用于对死循环任务进行定位。
步骤108:当死循环监控任务的睡眠周期到期被唤醒时,死循环监控任务再次得到调度,返回步骤102。
步骤109:确定死循环任务,具体而言:从最低优先级对应的优先级控制块开始检测,若优先级控制块中的运行字段非0,表明相应优先级的任务出现了死循环,然后检测该优先级对应的任务列表的任务控制块,若检测到某个任务的任务控制块的任务运行字段非0,表明该任务出现了死循环。
步骤110:对死循环任务进行处理。
检测出死循环任务后,可以挂起死循环任务或类死循环任务,并使用操作系统工具对出现死循环的任务进行调试和记录,并且,可以利用操作系统提供的标准接口函数分析该任务堆栈,精确定位死循环出现的代码位置,并使用用户接口记录相关信息。
步骤111:释放资源,具体包括:注销已经注册的任务切换钩子函数,销毁所设置的任务列表,并清除死循环标志,返回步骤107。
至此,结束本较佳方法流程。
由上述实施例可见,本发明首先通过周期性运行的死循环监控任务和死循环检测任务确定操作系统中是否存在死循环任务;当存在死循环任务时,通过划分基于优先级的任务列表,设置任务列表的优先级控制块,并注册任务切换钩子函数对被调度任务的控制块及其优先级控制块中的相应字段进行设置,从而实现对死循环任务进行定位。
为避免消耗过多CPU资源,本发明没有使用系统时钟中断服务程序检测死循环,而是在仅通过耗费CPU资源极低的周期性运行的死循环监控任务和死循环检测任务检测到操作系统中存在死循环后,才向操作系统注册任务切换钩子函数对死循环任务进行定位,并且,任务切换钩子函数中的操作非常简单,对CPU资源的消耗极低,因此,本发明提出的技术方案具有消耗CPU资源少、且实现简单的有益效果。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (9)
1.一种检测死循环任务的方法,适用于基于优先级对任务进行调度的操作系统,其特征在于:
A、生成具有最高优先级的死循环监控任务和具有最低优先级的死循环检测任务,死循环监控任务和死循环检测任务周期性运行;
B、死循环检测任务每次运行时记录当前时刻;
C、死循环监控任务每次运行时,根据死循环检测任务的运行情况判断操作系统中是否存在死循环任务,在判定系统中存在死循环任务时,对死循环任务进行定位,并对定位到的死循环任务进行处理。
2.根据权利要求1所述的方法,其特征在于,所述C中根据死循环检测任务的运行情况判断操作系统中是否存在死循环为:
根据当前时刻和死循环检测任务运行时记录的当前时刻,计算死循环检测任务未得到调度的时间间隔,如果所述时间间隔超过预先设置的阈值,判定操作系统中存在死循环。
3.根据权利要求1或2所述的方法,其特征在于,所述对死循环任务进行定位包括:
D、判断是否已设置死循环标志,若没有设置,执行E,否则,跳到H;
E、为每个优先级设置一个任务列表,并为每个任务列表设置一个优先级控制块,在每个任务的任务控制块中设置任务运行字段,其值置为0,向操作系统注册任务切换钩子函数,并设置死循环标志;其中,每个任务列表中包含操作系统中所有具有相应优先级的任务,每个优先级控制块中包含任务运行字段,其值置为0;任务切换钩子函数被调用时,对本次被调度的任务的任务控制块的任务运行字段进行加1操作,并对该任务所属的任务列表的优先级控制块中的任务运行字段进行加1操作;
F、死循环监控任务出让CPU,进入睡眠状态;
G、当死循环监控任务的睡眠周期到期被唤醒时,死循环监控任务再次得到调度,返回C;
H、从最低优先级对应的优先级控制块开始检测,对于优先级控制块中的运行字段非0的优先级,继续检测该优先级对应的任务列表的任务控制块,将任务控制块的任务运行字段非0的任务确定为死循环任务。
4.根据权利要求3所述的方法,其特征在于:
所述C中在判定系统中不存在死循环任务时,跳到F。
5.根据权利要求3所述的方法,其特征在于,在对死循环任务进行处理之后进一步包括:
注销已注册的任务切换钩子函数,销毁所设置的任务列表,并清除死循环标志,返回F。
6.根据权利要求3所述的方法,其特征在于,所述对定位到的死循环任务进行处理包括:挂起死循环任务。
7.根据权利要求6所述的方法,其特征在于,在挂起死循环任务之后,进一步包括:
对挂起的死循环任务进行调试,定位死循环出现的代码位置,并记录相关信息。
8.根据权利要求3所述的方法,其特征在于,所述E中为每个优先级设置一个任务列表包括:
通过操作系统接口获取包含操作系统中所有任务的任务控制块列表,将所有任务按照优先级进行划分,得到对应于每个优先级的任务列表。
9.根据权利要求1或2所述的方法,其特征在于,
所述死循环监控任务的睡眠周期比所述死循环检测任务的睡眠周期长。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110356415.9A CN102495793B (zh) | 2011-11-11 | 2011-11-11 | 一种检测死循环任务的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110356415.9A CN102495793B (zh) | 2011-11-11 | 2011-11-11 | 一种检测死循环任务的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102495793A true CN102495793A (zh) | 2012-06-13 |
CN102495793B CN102495793B (zh) | 2014-11-05 |
Family
ID=46187618
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110356415.9A Active CN102495793B (zh) | 2011-11-11 | 2011-11-11 | 一种检测死循环任务的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102495793B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105427695A (zh) * | 2015-11-03 | 2016-03-23 | 中国农业大学 | 编程类考题自动测评方法和系统 |
CN110750450A (zh) * | 2019-09-19 | 2020-02-04 | 深圳震有科技股份有限公司 | 一种软件死循环的定位方法、装置、系统及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5450586A (en) * | 1991-08-14 | 1995-09-12 | Hewlett-Packard Company | System for analyzing and debugging embedded software through dynamic and interactive use of code markers |
CN1811730A (zh) * | 2006-02-22 | 2006-08-02 | 迈普(四川)通信技术有限公司 | 一种死循环或类死循环任务检测方法 |
CN101853191A (zh) * | 2010-06-23 | 2010-10-06 | 迈普通信技术股份有限公司 | 检测操作系统中任务死循环的方法及操作系统 |
-
2011
- 2011-11-11 CN CN201110356415.9A patent/CN102495793B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5450586A (en) * | 1991-08-14 | 1995-09-12 | Hewlett-Packard Company | System for analyzing and debugging embedded software through dynamic and interactive use of code markers |
CN1811730A (zh) * | 2006-02-22 | 2006-08-02 | 迈普(四川)通信技术有限公司 | 一种死循环或类死循环任务检测方法 |
CN101853191A (zh) * | 2010-06-23 | 2010-10-06 | 迈普通信技术股份有限公司 | 检测操作系统中任务死循环的方法及操作系统 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105427695A (zh) * | 2015-11-03 | 2016-03-23 | 中国农业大学 | 编程类考题自动测评方法和系统 |
CN110750450A (zh) * | 2019-09-19 | 2020-02-04 | 深圳震有科技股份有限公司 | 一种软件死循环的定位方法、装置、系统及存储介质 |
CN110750450B (zh) * | 2019-09-19 | 2022-08-16 | 深圳震有科技股份有限公司 | 一种软件死循环的定位方法、装置、系统及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102495793B (zh) | 2014-11-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102043667A (zh) | 一种嵌入式操作系统的任务调度方法 | |
CN102779075A (zh) | 一种在多处理器核系统中进行调度的方法、装置及系统 | |
CN103294534B (zh) | 一种分布式系统的任务管理系统及方法 | |
CN101923487A (zh) | 一种综合嵌入式实时周期任务调度方法 | |
US9286107B2 (en) | Information processing system for scheduling jobs, job management apparatus for scheduling jobs, program for scheduling jobs, and method for scheduling jobs | |
CN101561778B (zh) | 一种检测多任务操作系统任务死循环的方法 | |
CN104838359A (zh) | 等待时间敏感的软件中断和线程调度 | |
CN106326066B (zh) | 一种嵌入式系统任务响应性能的监测调整的方法及其系统 | |
JP2013526754A5 (zh) | ||
CN103346902B (zh) | 数据采集调度的方法及系统 | |
CN101853191B (zh) | 检测操作系统中任务死循环的方法及系统 | |
CN102270156A (zh) | 一种实时嵌入式系统定时器管理方法 | |
CN101751335B (zh) | 调度虚拟机的垃圾收集的方法、装置和集群系统 | |
CN103164332B (zh) | 死循环任务的检测及处理方法 | |
CN102622300B (zh) | 多任务系统中死循环或类死循环的检测方法 | |
CN102081555A (zh) | 调整时钟中断周期的方法和装置 | |
CN100543686C (zh) | 一种检测任务死循环的方法及系统 | |
CN102495793B (zh) | 一种检测死循环任务的方法 | |
JP4614239B2 (ja) | マルチタスクスケジューリング機能搭載装置及びプログラム | |
JP2016071841A (ja) | ジョブ管理装置、ジョブ管理システム、ジョブ管理方法、及びプログラム | |
CN102654843A (zh) | 嵌入式处理器中非抢占式容错调度方法及嵌入式处理器 | |
US9274833B2 (en) | Task scheduler, microprocessor, and task scheduling method | |
EP2490100A1 (en) | Suspendable interrupts for processor idle management | |
JP2009048358A (ja) | 情報処理装置及びスケジューリング方法 | |
CN100557576C (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 |