CN102622300B - 多任务系统中死循环或类死循环的检测方法 - Google Patents
多任务系统中死循环或类死循环的检测方法 Download PDFInfo
- Publication number
- CN102622300B CN102622300B CN201210114502.8A CN201210114502A CN102622300B CN 102622300 B CN102622300 B CN 102622300B CN 201210114502 A CN201210114502 A CN 201210114502A CN 102622300 B CN102622300 B CN 102622300B
- Authority
- CN
- China
- Prior art keywords
- task
- endless loop
- class
- infinite loop
- priority
- 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)
Abstract
本发明涉及计算机技术。本发明解决了现有检测死循环或类死循环任务时对系统处理器资源消耗过多和检测较为复杂的问题,提供了一种多任务系统中死循环或类死循环的检测方法,其技术方案可概括为:首先生成一个最高优先级的死循环监控任务和一个最低优先级的死循环检测任务,死循环检测任务每睡眠一段时间后运行记录当前时刻,死循环监控任务每睡眠一定时间后运行检测系统是否出现死循环或类死循环,若有则定位并挂起死循环任务或类死循环任务,然后系统对挂起的死循环任务或类死循环任务进行定位和调试,记录信息并后续处理,最后释放处理资源。本发明的有益效果是:占用处理器资源低,适用于非时间片轮转的优先级抢占式操作系统。
Description
技术领域
本发明涉及计算机技术,特别涉及计算机操作系统的技术。
背景技术
在计算机操作系统中,有关死循环的检测及其处理是非常重要的技术,专利号为01112526.8,名称为《实时多任务下死循环下死循环处理的方法》描述了一种在实时多任务系统中,任务异常运行出现类死循环或者死循环的一种监控和处理方法。该专利的基本思想是使用系统时钟中断服务程序ISR和任务切换钩子函数来监控任务的运行时间,若任务运行时间大于某个阀值则认为该任务出现了死循环,此方法将大量消耗处理器资源。类似的系统时钟中断和任务切换挂钩函数来检测死循环的方法都存在相同的缺点。
发明专利号为:200610020335.5,名称为《一种死循环或者类死循环任务检测方法》描述了使用最高优先级的监控任务最低优先级的测试任务来检测死循环的方法,规避了系统时钟中断服务程序检测死循环消耗大量处理器资源的缺点,但该方法需要不停的调整测试任务的优先级,方法仍然比较复杂。
发明内容
本发明的目的就是克服目前检测死循环或类死循环任务时对系统处理器资源消耗过多和检测较为复杂的缺点,提供一种多任务系统中死循环或类死循环的检测方法。
本发明基于非时间片轮转的优先级抢占式操作系统。
本发明解决其技术问题,采用的技术方案是,多任务系统中死循环或类死循环的检测方法,其特征在于,包括以下步骤:
步骤1.系统生成一个最高优先级的死循环监控任务和一个最低优先级的死循环检测任务;
步骤2.死循环检测任务每睡眠一段时间后运行,运行时记录当前时刻;
步骤3.死循环监控任务每睡眠一定时间后运行,运行时检测系统是否出现死循环或类死循环,若是则进入步骤4,若不是则进入睡眠状态;
步骤4.死循环监控任务定位并挂起死循环任务或类死循环任务,死循环监控任务进入睡眠状态;
步骤5.系统对挂起的死循环任务或类死循环任务进行定位和调试,记录信息并后续处理;
步骤6.释放处理资源。
具体的,步骤2中,所述一段时间为1秒。
进一步的,步骤3中,所述一定时间为120秒。
具体的,步骤3中,所述运行时检测系统是否出现死循环或类死循环的方法为:死循环监控任务判断其运行的当前时刻与死循环检测任务运行时记录的时刻之差是否大于设置的时间阀值,若大于时间阀值则判断为系统出现死循环,若不大于时间阀值则认为系统当前未出现死循环。
再进一步的,步骤3中,所述设置的时间阀值为600秒。
具体的,所述步骤4包括以下步骤:
步骤41.死循环监控任务判断当前是否有死循环标志,进入步骤45,若没有则进入步骤42;
步骤42.死循环监控任务将死循环任务控制块变量清零,并向系统注册任务切换钩子函数;
步骤43.死循环监控任务设置死循环标志,并进入睡眠状态;
步骤44.系统任务切换,任务切换钩子函数执行,并在死循环任务控制块变量中记录当前死循环或类死循环任务控制块;
步骤45.死循环监控任务检测死循环任务控制块变量,该变量记录的任务控制块即为死循环任务控制块。
再进一步的,步骤44中,任务切换钩子函数执行,并在死循环任务控制块变量中记录当前死循环任务控制块或类死循环任务控制块的方法为:系统中死循环任务或类死循环任务以及优先级高于该死循环任务或类死循环任务优先级的任务将会得到调度,任务之间的切换会调用注册的任务切换钩子函数,任务切换钩子函数在被调用运行时,对于将被调度的任务,若死循环任务控制块变量还没有记录,则记录即将被调度任务的任务控制块;否则,若将被调度任务的任务控制块中的优先级小于已经记录的死循环任务控制块变量中的任务控制块的优先级,则将死循环任务控制块变量记录为即将被调度任务的任务控制块。
具体的,步骤6中,所述释放处理资源包括注销已经注册的任务切换钩子函数、清除死循环标志及清除死循环任务控制块变量。
再进一步的,步骤5中,系统对挂起的死循环任务或类死循环任务进行定位的方法为:利用用户接口函数记录日志信息,并利用操作系统提供的标准接口函数分析死循环或者类死循环任务堆栈,精确定位死循环出现的位置。
具体的,所述用户接口函数为计算机设备厂家自己实现的接口函数。
本发明的有益效果是,通过上述多任务系统中死循环或类死循环的检测方法,在基于非时间片轮转的优先级抢占式操作系统中,只需要启动一个最高优先级的死循环监控任务和最低优先级的死循环检测任务,就可以检测到系统是否出现了死循环任务或类死循环任务,在系统没有出现死循环任务的情况下,由于死循环监控任务和死循环检测任务均为每睡眠其设定的时间后才运行,占用处理器资源很低;任务切换钩子函数执行时死循环任务控制块变量记录优先级最低任务的任务控制块,这样就可以具体定位到死循环任务,定位死循环的方法简单;最后向系统报告死循环任务,利用系统提供的标准接口函数对死循环任务的堆栈进行分析,定位到出现死循环的具体代码位置,方便程序员排错,并且在定位到死循环任务后需要注销任务切换钩子函数以减少对处理器资源的消耗。
附图说明
图1是本发明死循环监控任务运行的流程图。
图2是本发明死循环检测任务运行的流程图。
具体实施方式
下面结合实施例及附图,详细描述本发明的技术方案。
本发明死循环监控任务运行的流程图参见图1,本发明死循环检测任务运行的流程图参见图2。本发明的多任务系统中死循环或类死循环的检测方法中,首先系统生成一个最高优先级的死循环监控任务和一个最低优先级的死循环检测任务,死循环检测任务每睡眠一段时间后运行,运行时记录当前时刻,死循环监控任务每睡眠一定时间后运行,运行时检测系统是否出现死循环或类死循环,若不是则进入睡眠状态,若是则死循环监控任务定位并挂起死循环任务或类死循环任务,死循环监控任务进入睡眠状态,然后系统对挂起的死循环任务或类死循环任务进行定位和调试,记录信息并后续处理,最后释放处理资源。
实施例
本发明利用在非时间片轮转的优先级抢占式操作系统中,高优先级任务只要不阻塞或者主动出让处理器,那么低优先级任务或者相同优先级的其它任务就不能得到调度的原理。本发明在实施过程中生成具有最高优先级的死循环监控任务和具有最低优先级的死循环测试任务。本例中,设系统中任务的优先级为0~100,优先级0最低,优先级100最高;设置死循环监控任务的优先级为100,死循环检测任务的优先级为0。
vxWorks操作系统是一种非时间片轮转的优先级抢占式操作系统,本例以它为例。
在vxWorks操作系统,任务控制块是操作系统管理任务的数据结构,任务控制块中有优先级字段,在本发明中,对于任务T,标记任务控制块为Tb,由任务控制块可以知道任务的优先级,标记优先级为Tbp。
设置死循环任务的任务控制块变量为TDLb。
为保证死循环监控任务和死循环检测任务不占用大量的处理器资源,死循环监控任务和死循环检测任务都周期的运行,即每睡眠固定周期运行一次。其中,死循环监控任务每睡眠较长周期运行一次,如图1,死循环检测任务运行每睡眠较短周期运行一次,如图2。这里的周期是一个经验值,如死循环监控任务的每睡眠120秒时间运行一次,死循环检测任务的每睡眠1秒时间运行一次,死循环监控制任务睡眠时间应该比死循环检测任务的睡眠时间大很多。
第一步,死循环检测任务每次运行时记录运行的时刻,死循环监控任务每次运行时比较当前时刻与死循环检测任务运行时记录的时刻相比较,可以计算出死循环检测任务有多长时间没有运行,即有多长时间没有得到调度,若这个时间比较长,超过了预先设置的时间阀值,则认为系统有工作任务出现了死循环或者类死循环,所述时间阀值应该比死循环监控任务睡眠时间大很多,可以为600秒。如果出现死循环则执行第二步,否则执行第五步。
第二步,死循环监控任务判断当前是否有死循环标志,若有则转第四步,若没有则直接进入第三步。
第三步,清除死循环任务控制块变量TDb,即死循环任务控制块变量TDb清零,向系统注册任务切换钩子函数,设置死循环标志。
死循环监控任务做完上述事情后将主动出让处理器资源,即进入睡眠状态,系统中各个优先高于死循环任务或类死循环任务的控制块优先级的工作任务和死循环任务将被得到调度,钩子函数将被多次执行。当钩子函数执行时,对于将被调度的任务T1来说,若变量TDLb还没有记录,则将TDLb记录为任务T1的任务控制块,TDLb=T1b;若已经记录,则比较任务控制块T1b和控制块TDLb的优先级,如果T1bp<TDLbp,则将TDLb记录成任务T1的任务控制块,即TDLb=T1b,如果T1bp>=TDLbp,则TDLb不变。
这样经过一段时间后,死循环任务控制块变量TDb记录的就是死循环任务的控制块或类死循环任务的控制块,即挂起当前死循环任务或类死循环任务。
当监控任务睡眠到期再次得到调度时则执行第一步。
第四步,系统检测死循环任务控制块变量TDLb,该死循环任务控制块变量记录的任务控制块就是死循环任务或者类死循环任务的任务控制块,利用用户接口函数记录日志信息,并利用操作系统提供的标准接口函数分析所述死循环或类死循环任务堆栈,精确定位死循环出现的位置,这里,用户接口函数为计算机设备厂家自己实现的接口,在系统精确定位死循环任务后,对其进行调试、记录信息并进行后续处理。
第五步,注销已经注册的钩子函数,清除死循环标志,清除死循环任务控制块变量。
本发明特别适合于vxWorks实时多任务操作系统,但不限于实时多任务操作系统,其思想适用于其他基于优先级的操作系统。
Claims (8)
1.多任务系统中死循环或类死循环的检测方法,其特征在于,包括以下步骤:
步骤1.系统生成一个最高优先级的死循环监控任务和一个最低优先级的死循环检测任务;
步骤2.死循环检测任务每睡眠一段时间后运行,运行时记录当前时刻;
步骤3.死循环监控任务每睡眠较长的一定时间后运行,运行时检测系统是否出现死循环或类死循环,若是则进入步骤4,若不是则进入睡眠状态;
步骤4.死循环监控任务定位并挂起死循环任务或类死循环任务,死循环监控任务进入睡眠状态,具体包括以下步骤:
步骤41.死循环监控任务判断当前是否有死循环标志,若有进入步骤45,若没有则进入步骤42;
步骤42.死循环监控任务将死循环任务控制块变量清零,并向系统注册任务切换钩子函数;
步骤43.死循环监控任务设置死循环标志,并进入睡眠状态;
步骤44.任务切换钩子函数执行,并在死循环任务控制块变量中记录当前死循环任务控制块或类死循环任务控制块,即挂起当前死循环任务或类死循环任务,具体方法为:系统中死循环任务或类死循环任务以及优先级高于该死循环任务或类死循环任务优先级的任务将会得到调度,任务之间的切换会调用注册的任务切换钩子函数,任务切换钩子函数在被调用运行时,对于将被调度的任务,若死循环任务控制块变量还没有记录,则记录即将被调度任务的任务控制块;否则,若将被调度任务的任务控制块中的优先级小于已经记录的死循环任务控制块变量中的任务控制块的优先级,则将死循环任务控制块变量记录为即将被调度任务的任务控制块;
步骤45.系统检测死循环任务控制块变量,该变量记录的任务控制块即为死循环任务控制块;
步骤5.系统对挂起的死循环任务或类死循环任务进行定位和调试,记录信息并后续处理;
步骤6.释放处理资源。
2.如权利要求1所述的多任务系统中死循环或类死循环的检测方法,其特征在于,步骤2中,所述一段时间为1秒。
3.如权利要求1所述的多任务系统中死循环或类死循环的检测方法,其特征在于,步骤3中,所述一定时间为120秒。
4.如权利要求1所述的多任务系统中死循环或类死循环的检测方法,其特征在于,步骤3中,所述运行时检测系统是否出现死循环或类死循环的方法为:死循环监控任务判断其运行的当前时刻与死循环检测任务运行时记录的时刻之差是否大于设置的时间阀值,若大于时间阀值则判断为系统出现死循环,若不大于时间阀值则认为系统当前未出现死循环。
5.如权利要求4所述的多任务系统中死循环或类死循环的检测方法,其特征在于,步骤3中,所述设置的时间阀值为600秒。
6.如权利要求1或2或3或4或5所述的多任务系统中死循环或类死循环的检测方法,其特征在于,步骤6中,所述释放处理资源包括注销已经注册的任务切换钩子函数、清除死循环标志及清除死循环任务控制块变量。
7.如权利要求1或2或3或4或5所述的多任务系统中死循环或类死循环的检测方法,其特征在于,步骤5中,系统对挂起的死循环任务或类死循环任务进行定位的方法为:利用用户接口函数记录日志信息,并利用操作系统提供的标准接口函数分析死循环或者类死循环任务堆栈,精确定位死循环出现的位置。
8.如权利要求7所述的多任务系统中死循环或类死循环的检测方法,其特征在于,所述用户接口函数为计算机设备厂家自己实现的接口。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210114502.8A CN102622300B (zh) | 2012-04-18 | 2012-04-18 | 多任务系统中死循环或类死循环的检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210114502.8A CN102622300B (zh) | 2012-04-18 | 2012-04-18 | 多任务系统中死循环或类死循环的检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102622300A CN102622300A (zh) | 2012-08-01 |
CN102622300B true CN102622300B (zh) | 2015-03-25 |
Family
ID=46562227
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210114502.8A Active CN102622300B (zh) | 2012-04-18 | 2012-04-18 | 多任务系统中死循环或类死循环的检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102622300B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106294108B (zh) * | 2015-05-27 | 2020-04-28 | 腾讯科技(深圳)有限公司 | 应用程序测试方法及装置 |
CN106326066B (zh) * | 2015-07-07 | 2019-04-26 | 北京东土科技股份有限公司 | 一种嵌入式系统任务响应性能的监测调整的方法及其系统 |
CN106250316A (zh) * | 2016-08-09 | 2016-12-21 | 东软集团股份有限公司 | 一种死循环检测方法及装置 |
CN106844151B (zh) * | 2017-01-04 | 2019-11-12 | 南京国电南自电网自动化有限公司 | 一种VxWorks系统的网络任务异常检测方法 |
CN108491311A (zh) * | 2018-04-02 | 2018-09-04 | 深圳还是威健康科技有限公司 | 一种实时操作系统的看门狗监测方法及终端 |
CN111159051B (zh) * | 2019-12-31 | 2023-07-04 | 北京天融信网络安全技术有限公司 | 死锁检测方法、装置、电子设备及可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1811730A (zh) * | 2006-02-22 | 2006-08-02 | 迈普(四川)通信技术有限公司 | 一种死循环或类死循环任务检测方法 |
CN101158913A (zh) * | 2007-11-15 | 2008-04-09 | 上海华为技术有限公司 | 一种检测任务死循环的方法及系统 |
CN101169753A (zh) * | 2007-11-26 | 2008-04-30 | 中兴通讯股份有限公司 | 一种记录导致系统异常的函数的方法 |
CN101504615A (zh) * | 2009-03-24 | 2009-08-12 | 杭州华三通信技术有限公司 | 为任务死循环提供定位信息的方法和装置 |
CN102141947A (zh) * | 2011-03-30 | 2011-08-03 | 东方通信股份有限公司 | 一种对采用嵌入式操作系统的计算机应用系统中异常任务的处理方法及系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006011686A (ja) * | 2004-06-24 | 2006-01-12 | Fuji Xerox Co Ltd | マルチタスクシステムの異常検知方法 |
CN103164332B (zh) * | 2011-12-15 | 2015-11-18 | 迈普通信技术股份有限公司 | 死循环任务的检测及处理方法 |
-
2012
- 2012-04-18 CN CN201210114502.8A patent/CN102622300B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1811730A (zh) * | 2006-02-22 | 2006-08-02 | 迈普(四川)通信技术有限公司 | 一种死循环或类死循环任务检测方法 |
CN101158913A (zh) * | 2007-11-15 | 2008-04-09 | 上海华为技术有限公司 | 一种检测任务死循环的方法及系统 |
CN101169753A (zh) * | 2007-11-26 | 2008-04-30 | 中兴通讯股份有限公司 | 一种记录导致系统异常的函数的方法 |
CN101504615A (zh) * | 2009-03-24 | 2009-08-12 | 杭州华三通信技术有限公司 | 为任务死循环提供定位信息的方法和装置 |
CN102141947A (zh) * | 2011-03-30 | 2011-08-03 | 东方通信股份有限公司 | 一种对采用嵌入式操作系统的计算机应用系统中异常任务的处理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102622300A (zh) | 2012-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102622300B (zh) | 多任务系统中死循环或类死循环的检测方法 | |
US10642944B2 (en) | System and method for energy usage accounting in software applications | |
CN102521098B (zh) | Cpu死机监控的处理方法和装置 | |
CN107851050B (zh) | 具有看门狗定时器的装置及用于操作看门狗定时器的方法 | |
CN103164332B (zh) | 死循环任务的检测及处理方法 | |
RU2017120988A (ru) | Планирование и диспетчеризация заданий | |
CN106528318B (zh) | 线程死循环检测方法和装置 | |
CN103444236B (zh) | 管理入口应用程序的方法和移动装置 | |
US20120254822A1 (en) | Processing optimization load adjustment | |
CN101853191B (zh) | 检测操作系统中任务死循环的方法及系统 | |
CN111382026A (zh) | 卡顿监控方法、装置、系统、存储介质和计算机设备 | |
CN101561778B (zh) | 一种检测多任务操作系统任务死循环的方法 | |
US9176783B2 (en) | Idle transitions sampling with execution context | |
CN114138341A (zh) | 微指令缓存资源的调度方法、装置、程序产品以及芯片 | |
CN106775620B (zh) | 一种定时方法及装置 | |
Wang et al. | Wlcleaner: Reducing energy waste caused by wakelock bugs at runtime | |
CN116089098A (zh) | 一种线程死循环检测方法、设备及装置 | |
Li et al. | eDelta: Pinpointing energy deviations in smartphone apps via comparative trace analysis | |
US9158651B2 (en) | Monitoring thread starvation using stack trace sampling and based on a total elapsed time | |
CN102495793B (zh) | 一种检测死循环任务的方法 | |
CN100557576C (zh) | 操作系统故障检测的方法和装置 | |
US20110145648A1 (en) | Method and Apparatus for Power Diagnostics | |
CN110647401B (zh) | 调频方法、调频装置、存储介质与电子设备 | |
Li et al. | Usage history-directed power management for smartphones | |
CN100489786C (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 |