一种检测任务死循环的方法及系统的制作方法

文档序号:6613373阅读:183来源:国知局
专利名称:一种检测任务死循环的方法及系统的制作方法
技术领域
本发明涉及软件技术领域,具体涉及一种检测任务死循环的方法及系统。
背景技术
随着软件应用领域的不断扩大和功能的不断增强,中央处理单元(CPU, Central Processing Unit)的处理能力越来越强,软件代码量越来越大,实现 也越来越复杂。同时为了提高系统的实时性和吞吐能力,软件系统一般都采 用多任务设计。现在操作系统的任务调度通常是基于优先级的任务调度,常见调度策略 分为优先级非抢占式调度、基于时间片轮转的优先级抢占式调度和非基于 时间片轮转的优先级抢占式调度。但不管何种调度策略,任务调度一般都是 通过时钟中断(例如系统时钟每10ms产生一个中断请求,触发系统执行相 应的中断服务例程)实现的。在产生每个时钟中断时,系统根据任务调度策 略决定下一个时钟周期的运行任务。如果下一个时钟周期的运行任务发生变 化,则进行任务切换;这个任务切换顺序也称为任务切换轨迹。任务切换轨 迹一般是由多个任务ID组成的一个列表。由于软件实现复杂,任务较多,容易产生任务死循环,即任务执行路径 进入一个无限循环,而且此循环路径中没有主动释放CPU,从而使系统服务 能力丧失。虽然任务管理是操作系统的设计实现重点,但遗憾的是操作系统 并没有提供任务死循环的检测和处理方法。现有的一种检测和处理任务死循环的方法是,通过时钟中断检测任务运 行时长来检测死循环,并进行死循环的处理。如果时钟中断检测到任务连续
运行时长超过预定的阈值,则认为该任务出现死循环,然后产生中断以记录 该任务的相关任务信息,并进行相应的处理。 该方法的具体步骤是在时钟中断时,记录当前正在运行的任务标识(ID )和对应的运行时长, 如果任务发生切换则将该任务的运行时长清零;如果时钟中断时检测发现任 务连续运行时长超过预定的阈值,则认为此任务发生死循环,进行如下处理; 否则不做任何处理;通过任务ID获取死循环任务控制块信息、寄存器信息、 堆栈信息等,通过寄存器信息荻取任务调用栈信息;然后进行记录以便进行 问题定位;定位信息记录完成后复位系统,以便恢复故障。可见,该技术方案中,在任务发生切换时,将该任务的运行时长清零, 即该方案依赖任务调度策略,因此对于优先级抢占式调度系统存在漏检测。 具体来说,如果低优先级任务出现死循环,而且高优先级任务正常运行,此 时,由于低优先级任务向高优先级任务切换时,时钟中断将低优先级任务的 运行时长清零,因此即使低优先级任务进入了死循环,也无法检测到,从而 出现低优先级任务的死循环漏检测的情况。发明内容本发明实施例提供一种检测任务死循环的方法,在基于优先级调度策略的 系统中,避免低优先级任务死循环的漏检测,且使任务死循环的检测不依赖于 系统的任务调度策略。本发明实施例还提供一种检测任务死循环的系统,在基于优先级调度策略 的系统中,避免低优先级任务死循环的漏检测,且使任务死循环的检测不依赖 于系统的任务调度策略。为达到上述目的,本发明实施例的技术方案是这样实现的一种4企测任务死循环的方法,包括在基于优先级任务调度策略的系统中,预先设置最低优先级的死循环检测 任务;
该系统的时钟中断时,检测未运行所述死循环检测任务的时长是否大于预 先设定的阈值,是则判定该系统出现任务死循环。一种检测任务死循环的系统,包括时钟、死循环检测任务执行模块以及检 测模块,所述时钟,用于为基于优先级调度策略的系统产生时钟中断信号; 所述死循环检测任务执行模块,用于运行该基于优先级调度策略的系统中 优先级最低的死循环检测任务;所述检测模块,用于在所述时钟产生中断信号时,检测所述死循环检测判定该基于优先级调度策略的系统出现任务死循环。与现有技术相比,本发明实施例所提供的技术方案,在基于优先级任务 调度策略的系统中,预先设置最低优先级的死循环检测任务;该系统的时钟判定该系统出现任务死循环。由于在基于优先级任务调度策略的系统中,一 旦出现死循环任务,则最低优先级的任务一定得不到调度,因此本发明实施 例利用低于系统所有任务优先级的死循环检测任务未运行的时长,来检测系 统是否发生死循环,从而,避免了系统的低优先级任务死循环漏检测的情况。 同时,由于时钟中断不受任务运行状态和系统调度策略的影响,从而使 得本发明实施例中任务死循环的检测不受系统中任务调度策略的影响。


图1为本发明实施例中检测任务死循环的方法流程图; 图2为本发明实施例中检测任务死循环的系统结构图。
具体实施方式
下面结合附图及具体实施例对本发明进行详细说明。目前,基于优先级非抢占式调度策略的系统中,当前优先级的任务运行
结束后进行任务切换,切换的任务是准备就绪的优先级高于当前任务优先级 的任务。非基于时间片轮转的优先级抢占式调度策略系统中,只要优先级高 于当前任务优先级的任务已经准备就绪,则在任务调度时,例如时钟中断产 生时,系统切换到该准备就绪的较高优先级任务的运行。基于时间片轮转的 优先级抢占式调度系统中,在当前任务运行过程中,高优先级任务可以抢占, 且与当前任务优先级相同的其它任务准备就绪时,优先级相当的任务之间以 相等的时间轮流运行,它们的运行机会均等。因此,对于基于优先级的任务调度策略,系统中出现死循环时,通常是的优先级抢占式调度)或与当前任务优先级相同(基于时间片轮转的优先级 抢占式调度)的任务可以得到调度,但是优先级低于当前任务优先级的任务 得不到调度,无法运行。因此,本发明实施例提供一种利用上述结果进行任 务死循环;险测的方法。本发明实施例提供的检测任务死循环的方法,在基于优先级任务调度策略的系统中,预先设置最低优先级的死循环检测任务;当该系统的时钟中断断该系统出现任务死循环。说明。实施例一本实施例利用全局计数器和对该全局计数器进行清零的死循环检测任 务,来判断未运行死循环检测任务的时长是否大于预设的阈值。图1为本发明实施例中检测任务死循环的方法流程图。如图l所示,该 方法包括以下步骤步骤100:在基于优先级任务调度策略的系统中,预设一个全局计数器 C,初始值为0;预设一个系统最低优先级的死循环才企测任务TL,死循环枱r 测任务TL每执行一次就对全局计数器C执行清零操作。
实际应用中,TL也可以是对全局计数器C执行减操作。步骤101:在该系统的时钟中断时,对全局计数器执行加M操作,并检 测全局计数器C的值是否大于预定的计数器阈值N,如果检测到全局计数器 C的值大于预定的计数器阈值N,则判定该系统出现任务死循环。本步骤中,该计数器阈值N对应的时长阈值是N + Mx时钟周期。如果 预设的阈值为时长阈值K,则其对应的计数器阈值为K+时钟周期xM。如果需要进一步确定系统中发生死循环的任务是哪个,则还需执行步骤102。步骤102:在该系统进行任务调度时,如果任务发生了切换,则进一步 记录系统的任务切换轨迹,例如可以在操作系统提供的任务切换钩子中记 录;当N值和M值满足以下条件时,在判定出现死循环的系统中,可以确 定任务切换轨迹中除TL之外的优先级最低的任务为死循环任务TD,然后 执行步骤103。本步骤中,任务切换轨迹的中记录的任务个数为L。当进行L+1次任务 切换时,切换后的任务记录将覆盖最早的任务记录,即第1个记录,当进行 L+2次任务切换时,本次切换后的任务记录将覆盖第2个记录,以此类推, 当最早的L个任务记录全部覆盖一次后,该任务切换轨迹刷新一次。从L+1 次任务切换至2L次任务切换的时间,即是任务切换轨迹刷新一次的时长。 通常情况下,为了提高死循环任务的检测精度,L应该大于或等于系统最大 的任务个数。其值可以根据系统实际情况进行测试,然后设定为测试效果较 好的经验值。本步骤中,计数器阈值N和M值需要满足如下条件 计数器阈值N和M值使计数器C值从0增加到计数器阈值N的时长(N + Mx时钟周期),能够保证系统的任务切换轨迹至少刷新一次,且使该时 长大于正常情况下系统CPU占用率持续100%的时间长度。系统死循环任务检测时长越长,在该时间段内任务切换轨迹刷新次数越 多,因此任务死循环检测精度越高。实际应用中,可以根据系统实际情况进
行测试,以任务死循环检测精度较高的经验值设定N和M。系统死循环任务检测时长需要大于正常情况下系统CPU占用率持续100%的时间长度,是因为有些系统可能会由于某些设计缺陷而发生CPU占 用率持续100°/。的时间,但是正常情况下持续时间不长,可以自动恢复,此 时系统中并没有出现任务死循环。为了减少误判的可能性,系统死循环任务 检测时长需要大于正常情况下系统CPU占用率持续100%的时间长度。当然, 在设计合理的系统中,正常情况下CPU占用率持续100%可能性不大,所以 可以不考虑CPU占用率持续100%的时间长度。本步骤中,当任务切换轨迹中除TL之外的优先级最低的任务有多个时, 将这些任务中运行次数最多的任务确定为发生死循环的任务。步骤103:根据任务ID进行错误处理记录TD的任务堆栈信息(包括 任务控制块信息、任务寄存器信息,任务堆栈信息,任务调用栈信息)。根 据任务调用栈和堆栈信息来定位死循环产生的具体原因。对定位信息进行记 录,然后恢复系统,以便进行故障恢复。本步骤具体执行的过程与现有技术相同,因此在此不再赘述。实施例二和实施例三利用最低优先级的死循环检测任务运行时的系统 时间,以及时钟中断时的系统时间,检测未运行死循环检测任务的时长是否 大于预设的阈值。其中系统时间可以是系统绝对时间或系统相对时间。实施例二本实施例利用最低优先级的死循环检测任务运行时的系统绝对时间,检 测未运行死循环检测任务的时长是否大于预设的闳值。 具体步骤包括首先在基于优先级任务调度策略的系统中,预设一个系统最低优先级的 死循环检测任务TL,任务TL每执行一次就对其运行时的系统绝对时间进行当该系统发生时钟中断时,运行时钟中断例程,该时钟中断例程检测当 前的系统绝对时间与死循环4全测任务TL最近一次运行时记录的系统绝对时
间之间的差值是否大于预设的阈值,是则判定该系统出现任务死循环。当需要进一 步确定发生死循环的任务是哪个时,还需要执行以下步骤 在该系统进行任务调度时,如果任务发生了切换,则进一步记录系统的任务切换轨迹,例如可以在操作系统提供的任务切换钩子中记录;当预设的 阈值能够保证该任务切换轨迹至少刷新一次,且大于正常情况下系统CPU 占用率持续100°/。的时间长度时,在判定出现死循环的系统中,可以确定任 务切换轨迹中除TL之外的优先级最低的任务为死循环任务TD,然后执行 步骤103。通常情况下,为了提高死循环任务的检测精度,L应该大于或等于系统 最大的任务个数。其值可以根据系统实际情况进行测试,然后设定为测试效 果较好的经^r值。实施例三大多数系统会提供系统上电之后运行的时间,即系统相对时间,本实施 例以对时钟中断进行计数的计数器对应的时间作为系统相对时间的例子,对 本发明提供的技术方案进行详细说明。具体来说,本实施例利用最低优先级 的死循环检测任务运行时该计数器的值以及时钟中断时该计数器的值,检测 未运行死循环检测任务的时长是否大于预设的阈值。具体步骤包括首先在基于优先级任务调度策略的系统中,预设一个系统最低优先级的 死循环片全测任务TL,任务TL每执行一次就对其运4亍时对该系统的时钟中断 进行计数的计数器值进行记录。当该系统发生时钟中断时,运行时钟中断例程,时钟中断例程检测对该 系统的时钟中断进行计数的计数器当前值与死循环检测任务TL最近一次运 行时记录的计数器值之间的差值是否大于根据预设阚值计算得到的计数器 阈值,是则判定该系统出现任务死循环。其中当对时钟中断进行计数为加1搡作时,根据预设阈值计算得到计数 器阈值是由预设阈值+时钟周期得到计数器阈值的。当对时钟中断进行计数
为加M操作时,根据预设阈值计算得到计数器阈值是将预设阈值+时钟周 期xM值得到计数器阈值的。本实施例中进一步确定发生死循环的任务的方法与实施例二相同,在此 不再赘述。图2为本发明实施例中检测任务死循环的系统结构图。如图2所示,该系统包括时钟、死循环检测任务执行模块以及检测模块。其中,时钟用于为基于优先级调度策略的系统产生时钟中断信号。 死循环检测任务执行模块用于执行系统最低优先级的死循环检测任务。 检测模块,用于在时钟产生中断信号时,检测死循环检测任务执行模块未运行死循环检测任务的时长是否大于预设的阈值,是则判定该基于优先级调度策略的系统发生4壬务死循环。当该系统使用实施例一的方法检测基于优先级调度策略的系统是否出现死循环时,进一步包括全局计数器,用于在时钟产生中断信号时,进行加操作。死循环检测任务执行模块对全局计数器进行清零。检测模块检测全局计数器的值是否大于根据预设阈值计算得到的计数器阈值。当该系统使用实施例二的方法检测系统是否出现死循环时,死循环检测任务执行模块记录死循环检测任务运行时的系统绝对时间;检测模块检测当前的系统绝对时间与死循环检测任务执行模块记录的系统绝对时间之间的差值是否大于预设的阈值。当该系统使用实施例三的方法检测是否出现死循环时,进一步包括计数器, 用于当时钟产生中断时进行计数。死循环检测任务执行模块记录死循环检测任 务运行时的计数器值。检测模块检测当前计数器值与死循环检测任务执行模块 记录的计数器值之间的差值是否大于根据预设阈值计算得到的计数器阈值。以上所述的系统还可进一步包括记录模块和判定模块。记录模块用于该基 于优先级调度策略的系统进行任务调度时,记录其任务切换轨迹。判定模块, 用于在检测模块检测到出现死循环之后,任务切换轨迹中记录的任务个数不小 于该基于优先级调度策略系统的所有任务个数,且预设的阈值使任务切换轨迹 至少刷新一次时,判定任务切换轨迹中除死循环检测任务之外的优先级最低的 任务为死循环任务。判定模块还可以进一步在任务切换轨迹中除死循环检测任务之外的优先级 最低的任务有多个时,判定任务切换轨迹中除死循环检测任务之外的优先级最 低的任务中运行次数最多的任务为死循环任务。由以上所述可以看出,本发明实施例所提供的技术方案,在基于优先级任务调度策略的系统中,预先设置最低优先级的死循环检测任务;该系统的时钟中断时,检测未运行死循环检测任务的时长是否大于预先设定的阈值, 是则判定该系统出现任务死循环。由于在基于优先级任务调度策略的系统 中,一旦出现死循环任务,则最低优先级的任务一定得不到调度,因此本发 明实施例利用优先级低于系统所有任务优先级的死循环检测任务的运行时 长,来4企测系统是否发生死循环,从而避免了现有系统中由于死循环检测依 赖操作系统的任务调度,而导致的低优先级任务死循环漏检测的情况。同时,由于时钟中断不受任务运行状态和系统调度策略的影响,从而使 得本发明实施例中任务死循环的检测不受系统中任务调度策略的影响。本发明实施例提供的技术方案,进 一 步在时钟中断时记录系统的任务切 换轨迹,其中记录的任务个数不小于该系统所有任务的个数,且预设的阈值 可以使任务切换轨迹至少刷新一次,则判定任务切换轨迹中除死循环检测任 务之外的优先级最低的任务为死循环任务。本发明实施例通过利用任务切换 轨迹以及对参数的设置,快速确定系统中出现死循环的任务,从而有利于系 统故障的快速定位。以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范 围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等, 均应包含在本发明的保护范围之内。
权利要求
1、一种检测任务死循环的方法,其特征在于,该方法包括在基于优先级任务调度策略的系统中,预先设置最低优先级的死循环检测任务;该系统的时钟中断时,检测未运行所述死循环检测任务的时长是否大于预先设定的阈值,是则判定该系统出现任务死循环。
2、 如权利要求l所述的方法,其特征在于,所述检测未运行死循环检测任 务的时长是否大于预先设定的阈值包括该系统的时钟中断时,对预设的全局计数器C执行加M操作,其中所述M 为正整数;运行最低优先级的死循环检测任务时,对所述全局计数器C清零; 该系统的时钟中断时,检测所述全局计数器C的值是否大于根据所述预先 设定的阈值计算得到的计数器阈值。
3、 如权利要求2所述的方法,其特征在于,所述根据预先设定的阈值得到 的计数器阈值为将所述预先设定的阈值除以时钟周期,再乘以M,得到计数器阈值。
4、 如权利要求l所述的方法,其特征在于,所述检测未运行死循环检测任 务的时长是否大于预先设定的阈值包括运行所述死循环;险测任务时,记录系统时间;该系统的时钟中断时,检测当前的系统时间与所述记录的系统时间之间的 差值是否大于所述预先设定的阈值。
5、 如权利要求4所述的方法,其特征在于,所述系统时间为系统绝对时间 或系统相对时间。
6、 如权利要求1至5中任一项所述的方法,其特征在于,该方法进一步包 括在该系统进行任务调度时,记录该系统的任务切换轨迹;该方法进一步包括当在所述任务切换轨迹中记录的任务个数不小于该系 统所有任务的个数,且所述阈值使所述任务切换轨迹至少刷新一次时,则判定 所述任务切换轨迹中除所述死循环检测任务之外的优先级最低的任务为死循环 任务。
7、 如权利要求6所述的方法,其特征在于,该方法进一步包括当所述任 务切换轨迹中除所述死循环检测任务之外的优先级最低的任务有多个时,判定 所述任务切换轨迹中除所述死循环检测任务之外的优先级最低的任务中运行次 数最多的任务为死循环任务。
8、 一种检测任务死循环的系统,其特征在于,该系统包括时钟、死循环检 测任务执行模块以及检测模块,所述时钟,用于为基于优先级调度策略的系统产生时钟中断信号; 所述死循环检测任务执行模块,用于运行该基于优先级调度策略的系统中 优先级最低的死循环检测任务;所述检测模块,用于在所述时钟产生中断信号时,检测所述死循环检测任该基于优先级调度策略的系统出现任务死循环。
9、 如权利要求8所述的系统,其特征在于,该系统进一步包括全局计数器, 用于在所述时钟产生中断信号时,进行加操作;所述死循环检测任务执行模块对所述全局计数器进行清零; 所述检测模块检测所述全局计数器的值是否大于根据所述预设的阈值计算 得到的计数器阈值。
10、 如权利要求8所述的系统,其特征在于,所述死循环检测任务执行模 块记录所述死循环^r测任务运行时的系统时间;所述检测模块检测当前的系统时间与所述死循环检测任务执行模块记录的 系统时间之间的差值是否大于所述预设的阈值。
11、 如权利要求8、 9或10所述的系统,其特征在于,该系统进一步包括 记录模块和判定模块,所述记录模块,用于在该基于优先级调度策略的系统进行任务调度时,记 录其任务切换轨迹;所述判定模块,用于在所述检测模块检测到出现死循环之后,当所述任务 切换轨迹中记录的任务个数不小于该基于优先级调度策略系统的所有任务个 数,且所述阈值使所述任务切换轨迹至少刷新一次时,判定所述任务切换轨迹 中除所述死循环检测任务之外的优先级最低的任务为死循环任务。
12、如权利要求11所述的系统,其特征在于,所述判定模块进一步用于当 在任务切换轨迹中除所述死循环检测任务之外的优先级最低的任务有多个时,行次数最多的任务为死循环任务。
全文摘要
本发明公开了一种检测任务死循环的方法,包括在基于优先级任务调度策略的系统中,预先设置最低优先级的死循环检测任务;该系统的时钟中断时,检测未运行所述死循环检测任务的时长是否大于预先设定的阈值,是则判定该系统出现任务死循环。本发明还公开了一种检测任务死循环的系统。使用本发明确保在基于优先级调度策略的系统中,不会发生低优先级任务死循环漏检测的情况,且任务死循环的检测不依赖于系统的任务调度策略。
文档编号G06F9/46GK101158913SQ200710170399
公开日2008年4月9日 申请日期2007年11月15日 优先权日2007年11月15日
发明者邵泽强 申请人:上海华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1