多任务系统中死循环或类死循环的检测方法

文档序号:6368217阅读:167来源:国知局
专利名称:多任务系统中死循环或类死循环的检测方法
技术领域
本发明涉及计算机技术,特别涉及计算机操作系统的技术。
背景技术
在计算机操作系统中,有关死循环的检测及其处理是非常重要的技术,专利号为 01112526. 8,名称为《实时多任务下死循环下死循环处理的方法》描述了一种在实时多任务系统中,任务异常运行出现类死循环或者死循环的一种监控和处理方法。该专利的基本思想是使用系统时钟中断服务程序ISR和任务切换钩子函数来监控任务的运行时间,若任务运行时间大于某个阀值则认为该任务出现了死循环,此方法将大量消耗处理器资源。类似的系统时钟中断和任务切换挂钩函数来检测死循环的方法都存在相同的缺点。发明专利号为200610020335. 5,名称为《一种死循环或者类死循环任务检测方法》描述了使用最高优先级的监控任务最低优先级的测试任务来检测死循环的方法,规避了系统时钟中断服务程序检测死循环消耗大量处理器资源的缺点,但该方法需要不停的调整测试任务的优先级,方法仍然比较复杂。

发明内容
本发明的目的就是克服目前检测死循环或类死循环任务时对系统处理器资源消耗过多和检测较为复杂的缺点,提供一种多任务系统中死循环或类死循环的检测方法。本发明基于非时间片轮转的优先级抢占式操作系统。本发明解决其技术问题,采用的技术方案是,多任务系统中死循环或类死循环的检测方法,其特征在于,包括以下步骤步骤I.系统生成一个最高优先级的死循环监控任务和一个最低优先级的死循环检测任务;步骤2.死循环检测任务每睡眠一段时间后运行,运行时记录当前时刻;步骤3.死循环监控任务每睡眠一定时间后运行,运行时检测系统是否出现死循环或类死循环,若是则进入步骤4,若不是则进入睡眠状态;步骤4.死循环监控任务定位并挂起死循环任务或类死循环任务,死循环监控任务进入睡眠状态;步骤5.系统对挂起的死循环任务或类死循环任务进行定位和调试,记录信息并后续处理;步骤6.释放处理资源。具体的,步骤2中,所述一段时间为I秒。进一步的,步骤3中,所述一定时间为120秒。具体的,步骤3中,所述运行时检测系统是否出现死循环或类死循环的方法为死循环监控任务判断其运行的当前时刻与死循环检测任务运行时记录的时刻之差是否大于设置的时间阀值,若大于时间阀值则判断为系统出现死循环,若不大于时间阀值则认为系统当前未出现死循环。再进ー步的,步骤3中,所述设置的时间阀值为600秒。具体的,所述步骤4包括以下步骤步骤41.死循环监控任务判断当前是否有死循环标志,进入步骤45,若没有则进 入步骤42 ;步骤42.死循环监控任务将死循环任务控制块变量清零,井向系统注册任务切换钩子函数;步骤43.死循环监控任务设置死循环标志,并进入睡眠状态;步骤44.系统任务切換,任务切换钩子函数执行,并在死循环任务控制块变量中记录当前死循环或类死循环任务控制块;步骤45.死循环监控任务检测死循环任务控制块变量,该变量记录的任务控制块即为死循环任务控制块。再进ー步的,步骤44中,任务切换钩子函数执行,并在死循环任务控制块变量中记录当前死循环任务控制块或类死循环任务控制块的方法为系统中死循环任务或类死循环任务以及优先级高于该死循环任务或类死循环任务优先级的任务将会得到调度,任务之间的切换会调用注册的任务切换钩子函数,任务切换钩子函数在被调用运行吋,对于将被调度的任务,若死循环任务控制块变量还没有记录,则记录即将被调度任务的任务控制块;否则,若将被调度任务的任务控制块中的优先级小于已经记录的死循环任务控制块变量中的任务控制块的优先级,则将死循环任务控制块变量记录为即将被调度任务的任务控制块。具体的,步骤6中,所述释放处理资源包括注销已经注册的任务切换钩子函数、清除死循环标志及清除死循环任务控制块变量。再进ー步的,步骤5中,系统对挂起的死循环任务或类死循环任务进行定位的方法为利用用户接ロ函数记录日志信息,并利用操作系统提供的标准接ロ函数分析死循环或者类死循环任务堆栈,精确定位死循环出现的位置。具体的,所述用户接ロ函数为计算机设备厂家自己实现的接ロ函数。本发明的有益效果是,通过上述多任务系统中死循环或类死循环的检测方法,在基于非时间片轮转的优先级抢占式操作系统中,只需要启动ー个最高优先级的死循环监控任务和最低优先级的死循环检测任务,就可以检测到系统是否出现了死循环任务或类死循环任务,在系统没有出现死循环任务的情况下,由于死循环监控任务和死循环检测任务均为每睡眠其设定的时间后才运行,占用处理器资源很低;任务切换钩子函数执行时死循环任务控制块变量记录优先级最低任务的任务控制块,这样就可以具体定位到死循环任务,定位死循环的方法简单;最后向系统报告死循环任务,利用系统提供的标准接ロ函数对死循环任务的堆栈进行分析,定位到出现死循环的具体代码位置,方便程序员排错,并且在定位到死循环任务后需要注销任务切换钩子函数以减少对处理器资源的消耗。


图I是本发明死循环监控任务运行的流程图。图2是本发明死循环检测任务运行的流程图。
具体实施例方式下面结合实施例及附图,详细描述本发明的技术方案。本发明死循环监控任务运行的流程图参见图1,本发明死循环检测任务运行的流程图参见图2。本发明的多任务系统中死循环或类死循环的检测方法中,首先系统生成一个最高优先级的死循环监控任务和一个最低优先级的死循环检测任务,死循环检测任务每睡眠一段时间后运行,运行时记录当前时刻,死循环监控任务每睡眠一定时间后运行,运行时检测系统是否出现死循环或类死循环,若不是则进入睡眠状态,若是则死循环监控任务定位并挂起死循环任务或类死循环任务,死循环监控任务进入睡眠状态,然后系统对挂起的死循环任务或类死循环任务进行定位和调试,记录信息并后续处理,最后释放处理资源。
实施例本发明利用在非时间片轮转的优先级抢占式操作系统中,高优先级任务只要不阻塞或者主动出让处理器,那么低优先级任务或者相同优先级的其它任务就不能得到调度的原理。本发明在实施过程中生成具有最高优先级的死循环监控任务和具有最低优先级的死循环测试任务。本例中,设系统中任务的优先级为0 100,优先级0最低,优先级100最高;设置死循环监控任务的优先级为100,死循环检测任务的优先级为O。vxfforks操作系统是一种非时间片轮转的优先级抢占式操作系统,本例以它为例。在vxWorks操作系统,任务控制块是操作系统管理任务的数据结构,任务控制块中有优先级字段,在本发明中,对于任务T,标记任务控制块为Tb,由任务控制块可以知道任务的优先级,标记优先级为Tbp。设置死循环任务的任务控制块变量为TDLb。为保证死循环监控任务和死循环检测任务不占用大量的处理器资源,死循环监控任务和死循环检测任务都周期的运行,即每睡眠固定周期运行一次。其中,死循环监控任务每睡眠较长周期运行一次,如图I,死循环检测任务运行每睡眠较短周期运行一次,如图2。 这里的周期是一个经验值,如死循环监控任务的每睡眠120秒时间运行一次,死循环检测任务的每睡眠I秒时间运行一次,死循环监控制任务睡眠时间应该比死循环检测任务的睡眠时间大很多。第一步,死循环检测任务每次运行时记录运行的时刻,死循环监控任务每次运行时比较当前时刻与死循环检测任务运行时记录的时刻相比较,可以计算出死循环检测任务有多长时间没有运行,即有多长时间没有得到调度,若这个时间比较长,超过了预先设置的时间阀值,则认为系统有工作任务出现了死循环或者类死循环,所述时间阀值应该比死循环监控任务睡眠时间大很多,可以为600秒。如果出现死循环则执行第二步,否则执行第五
止 /J/ o第二步,死循环监控任务判断当前是否有死循环标志,若有则转第四步,若没有则直接进入第三步。第三步,清除死循环任务控制块变量TDb,即死循环任务控制块变量TDb清零,向系统注册任务切换钩子函数,设置死循环标志。死循环监控任务做完上述事情后将主动出让处理器资源,即进入睡眠状态,系统中各个优先高于死循环任务或类死循环任务的控制块优先级的工作任务和死循环任务将被得到调度,钩子函数将被多次执行。当钩子函数执行时,对于将被调度的任务Tl来说,若变量TDLb还没有记录,则将TDLb记录为任务Tl的任务控制块,TDLb = Tlb ;若已经记录,则比较任务控制块Tlb和控制块TDLb的优先级,如果Tlbp < TDLbp,则将TDLb记录成任务Tl的任务控制块,即TDLb = Tlb,如果Tlbp >= TDLbp,则TDLb不变。这样经过一段时间后,死循环任务控制块变量TDb记录的就是死循环任务的控制块或类死循环任务的控制块,即挂起当前死循环任务或类死循环任务。当监控任务睡眠到期再次得到调度时则执行第一歩。第四步,系统检测死循环任务控制块变量TDLb,该死循环任务控制块变量记录的任务控制块就是死循环任务或者类死循环任务的任务控制块,利用用户接ロ函数记录日志信息,并利用操作系统提供的标准接ロ函数分析所述死循环或类死循环任务堆栈,精确定位死循环出现的位置,这里,用户接ロ函数为 计算机设备厂家自己实现的接ロ,在系统精确定位死循环任务后,对其进行调试、记录信息并进行后续处理。第五步,注销已经注册的钩子函数,清除死循环标志,清除死循环任务控制块变量。本发明特别适合于vxWorks实时多任务操作系统,但不限于实时多任务操作系统,其思想适用于其他基于优先级的操作系统。
权利要求
1.多任务系统中死循环或类死循环的检测方法,其特征在于,包括以下步骤步骤1.系统生成一个最高优先级的死循环监控任务和一个最低优先级的死循环检测任务;步骤2.死循环检测任务每睡眠一段时间后运行,运行时记录当前时刻;步骤3.死循环监控任务每睡眠一定时间后运行,运行时检测系统是否出现死循环或类死循环,若是则进入步骤4,若不是则进入睡眠状态;步骤4.死循环监控任务定位并挂起死循环任务或类死循环任务,死循环监控任务进入睡眠状态;步骤5.系统对挂起的死循环任务或类死循环任务进行定位和调试,记录信息并后续处理;步骤6.释放处理资源。
2.如权利要求I所述的多任务系统中死循环或类死循环的检测方法,其特征在于,步骤2中,所述一段时间为I秒。
3.如权利要求I所述的多任务系统中死循环或类死循环的检测方法,其特征在于,步骤3中,所述一定时间为120秒。
4.如权利要求I所述的多任务系统中死循环或类死循环的检测方法,其特征在于,步骤3中,所述运行时检测系统是否出现死循环或类死循环的方法为死循环监控任务判断其运行的当前时刻与死循环检测任务运行时记录的时刻之差是否大于设置的时间阀值,若大于时间阀值则判断为系统出现死循环,若不大于时间阀值则认为系统当前未出现死循环。
5.如权利要求4所述的多任务系统中死循环或类死循环的检测方法,其特征在于,步骤3中,所述设置的时间阀值为600秒。
6.如权利要求I或2或3或4或5所述的多任务系统中死循环或类死循环的检测方法,其特征在于,所述步骤4包括以下步骤步骤41.死循环监控任务判断当前是否有死循环标志,若有进入步骤45,若没有则进入步骤42 ;步骤42.死循环监控任务将死循环任务控制块变量清零,并向系统注册任务切换钩子函数;步骤43.死循环监控任务设置死循环标志,并进入睡眠状态;步骤44.任务切换钩子函数执行,并在死循环任务控制块变量中记录当前死循环任务控制块或类死循环任务控制块,即挂起当前死循环任务或类死循环任务;步骤45.系统检测死循环任务控制块变量,该变量记录的任务控制块即为死循环任务控制块。
7.如权利要求6所述的多任务系统中死循环或类死循环的检测方法,其特征在于,步骤44中,任务切换钩子函数执行,并在死循环任务控制块变量中记录当前死循环任务控制块或类死循环任务控制块的方法为系统中死循环任务或类死循环任务以及优先级高于该死循环任务或类死循环任务优先级的任务将会得到调度,任务之间的切换会调用注册的任务切换钩子函数,任务切换钩子函数在被调用运行时,对于将被调度的任务,若死循环任务控制块变量还没有记录,则记录即将被调度任务的任务控制块;否则,若将被调度任务的任务控制块中的优先级小于已经记录的死循环任务控制块变量中的任务控制块的优先级,则将死循环任务控制块变量记录为即将被调度任务的任务控制块。
8.如权利要求6所述的多任务系统中死循环或类死循环的检测方法,其特征在干,步骤6中,所述释放处理资源包括注销已经注册的任务切换钩子函数、清除死循环标志及清除死循环任务控制块变量。
9.如权利要求I或2或3或4或5所述的多任务系统中死循环或类死循环的检测方法,其特征在于,步骤5中,系统对挂起的死循环任务或类死循环任务进行定位的方法为利用用户接ロ函数记录日志信息,并利用操作系统提供的标准接ロ函数分析死循环或者类死循环任务堆栈,精确定位死循环出现的位置。
10.如权利要求9所述的多任务系统中死循环或类死循环的检测方法,其特征在于,所述用户接ロ函数为计算机设备厂家自己实现的接ロ。
全文摘要
本发明涉及计算机技术。本发明解决了现有检测死循环或类死循环任务时对系统处理器资源消耗过多和检测较为复杂的问题,提供了一种多任务系统中死循环或类死循环的检测方法,其技术方案可概括为首先生成一个最高优先级的死循环监控任务和一个最低优先级的死循环检测任务,死循环检测任务每睡眠一段时间后运行记录当前时刻,死循环监控任务每睡眠一定时间后运行检测系统是否出现死循环或类死循环,若有则定位并挂起死循环任务或类死循环任务,然后系统对挂起的死循环任务或类死循环任务进行定位和调试,记录信息并后续处理,最后释放处理资源。本发明的有益效果是占用处理器资源低,适用于非时间片轮转的优先级抢占式操作系统。
文档编号G06F11/36GK102622300SQ20121011450
公开日2012年8月1日 申请日期2012年4月18日 优先权日2012年4月18日
发明者何三波 申请人:迈普通信技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1