[发明专利]检测操作系统中任务死循环的方法及操作系统有效
申请号: | 201010207176.6 | 申请日: | 2010-06-23 |
公开(公告)号: | CN101853191A | 公开(公告)日: | 2010-10-06 |
发明(设计)人: | 曾健 | 申请(专利权)人: | 迈普通信技术股份有限公司 |
主分类号: | G06F11/00 | 分类号: | G06F11/00 |
代理公司: | 成都虹桥专利事务所 51124 | 代理人: | 邹裕蓉 |
地址: | 610041 四川省*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 检测 操作系统 任务 循环 方法 | ||
技术领域
本发明涉及计算机操作系统,尤其涉及基于任务优先级抢占的操作系统中死循环检测技术。
背景技术
在基于任务优先级调度策略的操作系统中,当高优先级任务处于就绪状态时,低优先级任务是肯定不能得到调度的。一股情况下,高优先级任务不会一直运行,任务的设计者会通过主动或被动的方式放弃CPU的执行,以使得低优先级的任务能够得到执行。任务主动放弃CPU的形式一股为:延迟自身的执行,等待一段时间再恢复执行;或者因为等待某个事件而阻塞自己。被动的形式主要是:该任务被更高优先级任务抢占。当高优先级任务由于设计或编码错误导致出现死循环,并且死循环中的代码都没有主动放弃CPU的行为,那么低优先级任务将得不到执行,导致整个系统运行不正常。
为了检测死循环,现有的方法是通过时钟中断检测任务连续运行时长来检测死循环,并进行死循环的处理。如果时钟中断检测到任务连续运行时长超过设定的阈值,则认为该任务出现死循环,然后产生中断以记录该任务的相关任务信息,并进行相应的处理。具体步骤是,在时钟中断时,记录当前正在运行的任务的运行时长,如果任务发生切换则将该任务的运行时长清零;如果时钟中断时检测发现任务连续运行时长超于预定的阈值,则认为任务出现死循环。在检测出死循环任务后,获取死循环任务控制块信息、寄存器信息、堆栈信息等,通过寄存器信息获取任务调用栈信息,然后进行记录以便进行问题定位。
上述方法对死循环的检测不全面。当被检测任务不是连续运行,而是断断续续时,虽然该任务可能已经处于死循环状态,但是因为其还是会暂时被动放弃CPU。如,某一任务已经出现死循环,但因为有更高优先级任务存在,该死循环任务仍然会暂时停止,此时,现有的死循环检测方法由于该死循环任务已暂时放弃CPU的控制,则该任务的运行时长被清零,死循环漏检。
发明内容
本发明所要解决的技术问题是,提供一种更为全面的任务死循环的检测方法以及实现该方法的操作系统。
本发明为解决上述技术问题所提供的技术方案是,检测操作系统中任务死循环的方法,其特征在于,包括以下步骤:
a、系统定期启动最高优先级的检测任务;
b、检测任务检查每个任务的就绪状态累计时间,就绪状态累计时间大于阈值的任务被判断出现死循环。
不同于现有的死循环检测方法通过对任务连续运行时长与阈值比较来判断是否出现死循环,本发明通过就绪状态累计时间长度与阈值比较来判断是否出现死循环。本发明基于的原理是,优先级抢占式操作系统中,当有任务发生死循环而不会主动放弃CPU时,该任务在任何情况下都处于就绪状态。通过统计一个任务的就绪状态累计时间长度来进行死循环判断可以避免因被动放弃CPU的死循环的漏检。
优选的,系统发生任务切换时,更新放弃CPU控制权的任务的就绪状态累计时间。
将对就绪状态累计时间的统计放在任务切换时,相对于在时钟中断时进行就绪状态累计时间的统计更优。当然,如果在时钟中断时进行统计也是可行的,但是时钟终端的统计未考虑到任务可能因为时钟中断之外的原因而发生切换的情况。所以,在任务切换时进行就绪状态累计时间的统计,能使得死循环的检测更为全面,进一步避免漏检。
任务的就绪状态累计时间的更新方式为:
对于放弃CPU控制权的任务,且该任务保持就绪状态,将该任务本次运行总时间累加至就绪状态累计时间;
对于放弃CPU控制权的任务,且该任务未处于就绪状态,将该任务的就绪状态累计时间清零。
就绪状态累计时间的计算方式为:
系统针对每一个任务,记录其就绪状态累计时间、本次开始运行时间;
系统发生任务切换时,对于放弃CPU控制权的任务,且该任务保持就绪状态,则用当前时间减去本次开始运行时间,得到本次运行总时间,并将本次运行总时间加至就绪状态累计时间;对于获得CPU控制权的任务,将当前时间记录至该任务的本次开始运行时间。
本发明所述检测出死循环的情况还包括类死循环。本发明将导致了系统运行不正常的任务,不论其确为死循环或类死循环,都统称为死循环任务。所以,为了更有效地对这些死循环任务进行分析,步骤b中,判断出死循环任务后,检测任务每隔一个TICK运行一次,每次运行都对死循环任务进行分析,并获取该死循环任务寄存器的值。让死循环任务不断运行,检测任务不断采样,得到尽量多的死循环任务在各个时间点上执行的寄存器值,便于从中找到引起异常的直接原因。
针对上述方法,本发明还提供一种实现该方法的操作系统,包括系统控制模块、检测任务模块、任务控制模块、就绪状态累计时间计算模块;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于迈普通信技术股份有限公司,未经迈普通信技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010207176.6/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种高效动态软件漏洞挖掘方法
- 下一篇:一种自动识别手势的方法及移动终端