检测操作系统中任务死循环的方法及操作系统技术方案

技术编号:4027959 阅读:368 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供一种更为全面的任务死循环的检测方法以及实现该方法的操作系统。不同于现有的死循环检测方法通过对任务连续运行时长与阈值比较来判断是否出现死循环,本发明专利技术通过就绪状态累计时间长度与阈值比较来判断是否出现死循环。本发明专利技术基于的原理是,优先级抢占式操作系统中,当有任务发生死循环而不会主动放弃CPU时,该任务在任何情况下都处于就绪状态。通过统计一个任务的就绪状态累计时间长度来进行死循环判断可以避免因被动放弃CPU的死循环的漏检。

【技术实现步骤摘要】

本专利技术涉及计算机操作系统,尤其涉及基于任务优先级抢占的操作系统中死循环 检测技术。
技术介绍
在基于任务优先级调度策略的操作系统中,当高优先级任务处于就绪状态时,低 优先级任务是肯定不能得到调度的。一股情况下,高优先级任务不会一直运行,任务的设计 者会通过主动或被动的方式放弃CPU的执行,以使得低优先级的任务能够得到执行。任务 主动放弃CPU的形式一股为延迟自身的执行,等待一段时间再恢复执行;或者因为等待某 个事件而阻塞自己。被动的形式主要是该任务被更高优先级任务抢占。当高优先级任务 由于设计或编码错误导致出现死循环,并且死循环中的代码都没有主动放弃CPU的行为, 那么低优先级任务将得不到执行,导致整个系统运行不正常。为了检测死循环,现有的方法是通过时钟中断检测任务连续运行时长来检测死循 环,并进行死循环的处理。如果时钟中断检测到任务连续运行时长超过设定的阈值,则认为 该任务出现死循环,然后产生中断以记录该任务的相关任务信息,并进行相应的处理。具体 步骤是,在时钟中断时,记录当前正在运行的任务的运行时长,如果任务发生切换则将该任 务的运行时长清零;如果时钟中断时检测发现任务连续运行时长超于预定的阈值,则认为 任务出现死循环。在检测出死循环任务后,获取死循环任务控制块信息、寄存器信息、堆栈 信息等,通过寄存器信息获取任务调用栈信息,然后进行记录以便进行问题定位。上述方法对死循环的检测不全面。当被检测任务不是连续运行,而是断断续续时, 虽然该任务可能已经处于死循环状态,但是因为其还是会暂时被动放弃CPU。如,某一任务 已经出现死循环,但因为有更高优先级任务存在,该死循环任务仍然会暂时停止,此时,现 有的死循环检测方法由于该死循环任务已暂时放弃CPU的控制,则该任务的运行时长被清 零,死循环漏检。
技术实现思路
本专利技术所要解决的技术问题是,提供一种更为全面的任务死循环的检测方法以及 实现该方法的操作系统。本专利技术为解决上述技术问题所提供的技术方案是,检测操作系统中任务死循环的 方法,其特征在于,包括以下步骤a、系统定期启动最高优先级的检测任务;b、检测任务检查每个任务的就绪状态累计时间,就绪状态累计时间大于阈值的任 务被判断出现死循环。不同于现有的死循环检测方法通过对任务连续运行时长与阈值比较来判断是否 出现死循环,本专利技术通过就绪状态累计时间长度与阈值比较来判断是否出现死循环。本发 明基于的原理是,优先级抢占式操作系统中,当有任务发生死循环而不会主动放弃CPU时,该任务在任何情况下都处于就绪状态。通过统计一个任务的就绪状态累计时间长度来进行 死循环判断可以避免因被动放弃CPU的死循环的漏检。优选的,系统发生任务切换时,更新放弃CPU控制权的任务的就绪状态累计时间。将对就绪状态累计时间的统计放在任务切换时,相对于在时钟中断时进行就绪状 态累计时间的统计更优。当然,如果在时钟中断时进行统计也是可行的,但是时钟终端的统 计未考虑到任务可能因为时钟中断之外的原因而发生切换的情况。所以,在任务切换时进 行就绪状态累计时间的统计,能使得死循环的检测更为全面,进一步避免漏检。任务的就绪状态累计时间的更新方式为对于放弃CPU控制权的任务,且该任务保持就绪状态,将该任务本次运行总时间 累加至就绪状态累计时间;对于放弃CPU控制权的任务,且该任务未处于就绪状态,将该任务的就绪状态累 计时间清零。就绪状态累计时间的计算方式为系统针对每一个任务,记录其就绪状态累计时间、本次开始运行时间;系统发生任务切换时,对于放弃CPU控制权的任务,且该任务保持就绪状态,则用 当前时间减去本次开始运行时间,得到本次运行总时间,并将本次运行总时间加至就绪状 态累计时间;对于获得CPU控制权的任务,将当前时间记录至该任务的本次开始运行时间。本专利技术所述检测出死循环的情况还包括类死循环。本专利技术将导致了系统运行不正 常的任务,不论其确为死循环或类死循环,都统称为死循环任务。所以,为了更有效地对这 些死循环任务进行分析,步骤b中,判断出死循环任务后,检测任务每隔一个TICK运行一 次,每次运行都对死循环任务进行分析,并获取该死循环任务寄存器的值。让死循环任务不 断运行,检测任务不断采样,得到尽量多的死循环任务在各个时间点上执行的寄存器值,便 于从中找到引起异常的直接原因。针对上述方法,本专利技术还提供一种实现该方法的操作系统,包括系统控制模块、检 测任务模块、任务控制模块、就绪状态累计时间计算模块;系统控制模块用于,定期启动最高优先级的检测任务模块,控制任务切换;检测任务模块用于,检测任务检查每个任务的任务控制模块中就绪状态累计时 间,就绪状态累计时间大于阈值的任务被判断出现死循环;任务控制模块用于,记录每个任务的就绪状态累计时间;就绪状态累计时间计算模块,用于计算任务的就绪状态累计时间并记录在任务控 制模块中。优选的,就绪状态累计时间计算模块在系统发生任务切换时,计算放弃CPU控制 权的任务的就绪状态累计时间。就绪状态累计时间计算模块对于放弃CPU控制权且保持就绪状态的任务,将该任 务本次运行总时间累加至就绪状态累计时间;对于放弃CPU控制权且未处于就绪状态的任 务,将该任务的就绪状态累计时间清零。任务控制模块还记录每个任务的本次开始运行时间;就绪状态累计时间计算模 块对于放弃CPU控制权且保持就绪状态的任务,用当前时间减去该任务的本次开始运行时 间,得到本次运行总时间,并将本次运行总时间加至就绪状态累计时间;对于获得CPU控制权的任务,将当前时间记录至该任务的本次开始运行时间。进一步的,检测任务模块还用于,检测任务模块判断出死循环任务后,每隔一个 TICK运行一次,每次运行都对死循环任务进行分析,并获取该死循环任务寄存器的值。本专利技术的有益效果是,能更为全面地、有效地检测操作系统中的死循环任务。附图说明图1为操作系统示意图。图2为实施例中任务tl与任务t2的切换示意图。 具体实施例方式如图1所示,操作系统包括系统控制模块、检测任务模块、任务控制模块、就绪状 态累计时间计算模块;系统控制模块用于,定期启动最高优先级的检测任务模块,控制任务切换;检测任务模块用于,检测任务检查每个任务的任务控制模块中就绪状态累计时 间,就绪状态累计时间大于阈值的任务被判断出现死循环;检测任务模块判断出死循环任 务后,每隔一个TICK多次调用死循环任务,并获取该死循环任务寄存器的值;任务控制模块用于,记录每个任务的就绪状态累计时间。就绪状态累计时间计算模块用于,系统发生任务切换时,计算放弃CPU控制权的 任务的就绪状态累计时间并记录在任务控制模块中对于放弃CPU控制权且保持就绪状态 的任务,将该任务本次运行总时间累加至就绪状态累计时间;对于放弃CPU控制权且未处 于就绪状态的任务,将该任务的就绪状态累计时间清零。死循环检测方法流程如下在任务控制模块中记录两个任务状态一个是任务在就绪状态下总的运行时间 (就绪状态累计时间),另一个是任务本次开始运行时间。在系统中确定一个阙值,并间隔 启动一个最高优先级的检测任务;为了不对整个系统产生影响,该任务的执行间隔时间可 以设置的大一点,比如每隔5分钟运行一次;在操作系统发生的任务切换时,对于放弃CPU控制权的任务,如果该任务是就绪 状本文档来自技高网
...

【技术保护点】
检测操作系统中任务死循环的方法,其特征在于,包括以下步骤:a、系统定期启动最高优先级的检测任务;b、检测任务检查每个任务的就绪状态累计时间,就绪状态累计时间大于阈值的任务被判断出现死循环。

【技术特征摘要】

【专利技术属性】
技术研发人员:曾健
申请(专利权)人:迈普通信技术股份有限公司
类型:发明
国别省市:90[中国|成都]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1