一种检测多任务操作系统任务死循环的方法.pdf

上传人:111****112 文档编号:967638 上传时间:2018-03-22 格式:PDF 页数:7 大小:363.48KB
返回 下载 相关 举报
摘要
申请专利号:

CN200810066643.0

申请日:

2008.04.15

公开号:

CN101561778A

公开日:

2009.10.21

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效|||公开

IPC分类号:

G06F11/36

主分类号:

G06F11/36

申请人:

中兴通讯股份有限公司

发明人:

廖 通

地址:

518057广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦A座6层

优先权:

专利代理机构:

深圳市永杰专利商标事务所

代理人:

曹建军

PDF下载: PDF下载
内容摘要

本发明公开了一种检测多任务操作系统任务死循环的方法。该方法在各任务入口函数循环体中嵌入插桩代码,在高优先级的监测任务中通过判断被监测的任务的插桩值、任务运行状态和总CPU占用率,实时精确测量任务是否处于死循环状态。本方法通过在所有需要监控的任务的循环体入口处嵌入插桩代码,不仅准确可靠、高效,而且实现方法简单;如果系统是通过高优先级的监测任务来统计CPU占用率,可以将判断死循环的插桩代码附加到CPU占有率的统计方法的监测任务中,和CPU占有率统计同步进行,这样可以极大的利用系统资源,插桩代码可以定义成宏,只需要在任务循环体的入口处嵌入该宏就可以了,实现起来较为灵活。

权利要求书

1.  一种检测多任务操作系统任务死循环的方法,其特征在于,包括如下步骤:
A.在所有需要监控的任务的循环体入口处嵌入插桩代码,并预先规定需要监控的任务的死循环状态的阈值和系统总CPU占有率的阈值;所述插桩代码是将任务统计变量递增的代码;
B.设置高优先级系统监测任务,启动并初始化;所述高优先级系统监测任务用于监测各需要监控的任务的插桩值大小、插桩值是否变化、当前是否为运行状态、系统总CPU占有率是否超过预先规定的阈值;
C.高优先级系统监测任务定时检测各需要监控的任务的插桩值;
D.判断各个需要监控的任务是否发生了死循环:在高优先级系统监测任务中,按从高优先级到低优先级顺序依次检测各个需要监控的任务,若需要监控的任务满足其插桩值不为零,插桩值不变,当前为运行状态,且系统总CPU占有率超过预先规定的阈值四个条件,则判定该需要监控的任务处于第一状态,若连续N次检测都判定该需要监控的任务处于第一状态且N小于等于预先规定的死循环状态的阈值,则该需要监控的任务没有发生死循环,返回步骤C;若连续N次检测都判定该需要监控的任务处于第一状态且N大于预先规定的死循环状态的阈值,则该需要监控的任务发生了死循环,进入步骤E;
E.输出死循环异常信息。

2.
  根据权利要求1所述的检测多任务操作系统任务死循环的方法,其特征在于,所述步骤D中,若需要监控的任务不满足所述的四个条件,则该需要监控的任务未处于第一状态,其处于第一状态的次数清零,返回步骤C。

3.
  根据权利要求1或2所述的检测多任务操作系统任务死循环的方法,其特征在于,所述步骤B中,若系统不是通过高优先级的监测任务来统计CPU占用率,则所述设置高优先级系统监测任务是创建一个高优先级系统监测任务;若系统是通过高优先级的监测任务来统计CPU占用率,则所述设置高优先级系统监测任务是将判断死循环的插桩代码附加到CPU占有率的统计方法的监测任务中,和CPU占有率统计同步进行。

4.
  根据权利要求3所述的检测多任务操作系统任务死循环的方法,其特征在于,所述步骤A中插桩代码对于不同的需要监控的任务其代码是一样的。

5.
  根据权利要求4所述的检测多任务操作系统任务死循环的方法,其特征在于,所述插桩代码是宏。

说明书

一种检测多任务操作系统任务死循环的方法
技术领域
本发明属于多任务操作系统领域,具体涉及一种检测多任务操作系统任务死循环的方法。
背景技术
在计算机软件系统中,基本上都采用了某种形式的多任务操作系统,所有的应用和功能都是通过任务承载,并在多任务协作下完成的。由于系统应用日益复杂,多任务操作系统的任务数越来越多,任务的运行状态在多任务的协作中起着越来越重要的作用,软件在开发的过程中,由于这样那样的原因,任务可能会发生死循环,进而不能对其他的消息进行处理,要是可以提供精确高效的任务监控方法,就会大大利于研发人员的定位。
在目前的操作系统中,已有的死循环监控的方法主要有两类:
一类是:利用通讯调试系统提供的时钟或启动一个硬件定时器,定时器或时钟的中断服务例程不断的监测各任务对各自消息的处理时间,判断某任务超常时间运行或对某消息的处理时间超过规定的阈值,就认为该任务发生了死循环,然后将中断上下文切换成任务上下文,在系统的任务上下文中调读调用栈函数并输出。此方法的主要缺点是使用硬件定时器或时钟,需要额外的硬件资源,且只能针对有接受消息的任务进行检测,具有较大局限性,代表性的专利如CN02128400。
另一类是:预先设置记录操作基本信息的存储单元,启动一个检测任务,每次检测任务设置的定时器超时,就会保存当前时间点之前最后执行操作任务的标识到存储单元里面,如果某个任务的标识连续的出现在存储单元里面,则认为该任务发生了死循环,但是这是一种采点的方法,准确性较低,且需要额外的存储空间,代表性的专利如CN03121092。
发明内容
本发明的目的在于克服现有技术的不足,提供一种检测多任务操作系统任务死循环的方法。该方法在各任务入口函数循环体中嵌入插桩代码,在高优先级的监测任务中通过判断被监测的任务的插桩值、任务运行状态和总CPU占用率可以实时精确测量任务是否处于死循环状态。
为解决上述技术问题,本发明是通过以下技术方案实现的:
一种检测多任务操作系统任务死循环的方法,包括如下步骤:
A.在所有需要监控的任务的循环体入口处嵌入插桩代码,并预先规定需要监控的任务的死循环状态的阈值和系统总CPU占有率的阈值;所述插桩代码是将任务统计变量递增的代码;
B.设置高优先级系统监测任务,启动并初始化;所述高优先级系统监测任务用于监测各需要监控的任务的插桩值大小、插桩值是否变化、当前是否为运行状态、系统总CPU占有率是否超过预先规定的阈值;
C.高优先级系统监测任务定时检测各需要监控的任务的插桩值;
D.判断各个需要监控的任务是否发生了死循环:在高优先级系统监测任务中,按从高优先级到低优先级顺序依次检测各个需要监控的任务,若需要监控的任务满足其插桩值不为零,插桩值不变,当前为运行状态,且系统总CPU占有率超过预先规定的阈值四个条件,则判定该需要监控的任务处于第一状态(即近似死循环状态),若连续N次检测都判定该需要监控的任务处于第一状态且N小于等于预先规定的死循环状态的阈值,则该需要监控的任务没有发生死循环,返回步骤C;若连续N次检测都判定该需要监控的任务处于第一状态且N大于预先规定的死循环状态的阈值,则该需要监控的任务发生了死循环,进入步骤E;
E.输出死循环异常信息。
所述步骤D中,若需要监控的任务不满足所述的四个条件,则该需要监控的任务未处于第一状态,其处于第一状态的次数清零,返回步骤C。
所述步骤B中,若系统不是通过高优先级的监测任务来统计CPU占用率,则所述设置高优先级系统监测任务是创建一个高优先级系统监测任务;若系统是通过高优先级的监测任务来统计CPU占用率,则所述设置高优先级系统监测任务是将判断死循环的插桩代码附加到CPU占有率的统计方法的监测任务中,和CPU占有率统计同步进行。
所述步骤A中插桩代码对于不同的需要监控的任务其代码是一样的。
进一步地,所述插桩代码是宏。
使用本发明的检测多任务操作系统任务死循环的方法具有以下有益效果:本发明方法通过在所有需要监控的任务的循环体入口处嵌入插桩代码,不仅准确可靠、高效,而且实现方法简单;如果系统是通过高优先级的监测任务来统计CPU占用率,可以将判断死循环的插桩代码附加到CPU占有率的统计方法的监测任务中,和CPU占有率统计同步进行,这样可以极大的利用系统资源,插桩代码可以定义成宏,只需要在任务循环体的入口处嵌入该宏就可以了,实现起来较为灵活。
附图说明
图1是本发明方法的流程图。
具体实施方式
为了更好地理解本发明,下面结合附图和具体实施例对本发明作进一步地描述。
在多任务操作系统中,考虑到每个任务都包含有一个循环体,每次由系统内核重新调度该任务时,都会重新执行循环体中的代码,如果在循环体的入口处添加一个统计变量,每执行一次,值递增,这样每次重新调度执行该任务时,统计变量的值就会递增。如果该任务发生死循环了,由于该任务一直在运行状态,那么统计变量的值则在开始发生死循环开始就一直保持不变了,利用任务实体的这个特性就可以用来检测任务是否发生了死循环。如果判断任务的统计变量值不为零且统计变量值不变的时间超过了预先规定的阈值,就说明了任务执行过,且没有重新被调度。但是还不能断定是不是发生死循环,因为也有可能是被切换到别的任务了,所以需要附加判断该任务当前是否为运行状态,且系统总CPU占有率超过预先规定的阈值来认定任务发生了死循环,这样可以确保任务一直在运行状态中且没有切换出去过,从而准确的判断发生了死循环。
插桩代码其实就是将一个任务统计变量递增的代码,代码本身非常简单,且对不同的需要监控的任务也是相同的,可以定义成宏,由于代码的位置固定在任务的循环体入口处,所以称之为插桩代码。
3G系统由多个嵌入式系统组成,这里以其中一个单板嵌入式系统为例说明,这个系统使用PPC755CPU和VXWORKS操作系统。
请参阅图1,先将插桩宏TASKDEADLOOP_CALL加入到所有需要监测任务死循环的任务while循环体的第一条语句之前,使用VXWORKS操作系统TCB的保留字段spare4来保存插桩值,TASKDEADLOOP_CALL宏定义为:
#define TASKDEADLOOP_CALL{
取当前任务TCB;
将TCB中预留字段spare4数值递增。
}
然后设置高优先级系统监测任务,可创建一个优先级30的定时监测任务,如果系统是通过高优先级的监测任务来统计CPU占用率,则不必创建此任务,可以直接利用已经创建的任务,和统计CPU占有率同步进行,在任务while循环之前初始化中将各需要监控任务TCB的预留字段spare4清零,将判定各任务处于第一状态(即近似死循环状态)的次数N清零,并将监测任务调用taskDelay(2*SECONDTOTICK)设置两秒定时延时;在任务中作以下处理:
1)通过系统调用taskIdListGet获取当前系统活动任务列表aiTaskIdList[TaskNum],TaskNum为当前系统活动任务个数;
2)将aiTaskIdList中任务按优先级按高到低顺序排列,设当前系统活动任务列表序号i=0,开始遍历各个任务,转到3);
3)同时判断以下四个条件是否都成立,如果成立,那就表明任务处于第一状态(即近似死循环状态),转入4),否则转入7);
任务i的插桩值不为零;
任务i的插桩值和上次检测时候值一样;
任务i当前为运行状态;
系统总CPU占用率超过预先规定的阈值;
4)N++,如果N大于规定的阈值,则判定该任务发生了死循环,转入5),否则转入6);
5)输出死循环任务相关信息,调试或复位系统;
6)i++,如果i等于TaskNum,转入8),否则转入3);
7)N=0,转8);
8)结束,等待下一次调度。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,应当指出,对于本领域的普通技术人员来说,凡是本发明的精神和原则之内所作的任何修改、等同替换或改进等,均应包含在本发明的保护范围之内。

一种检测多任务操作系统任务死循环的方法.pdf_第1页
第1页 / 共7页
一种检测多任务操作系统任务死循环的方法.pdf_第2页
第2页 / 共7页
一种检测多任务操作系统任务死循环的方法.pdf_第3页
第3页 / 共7页
点击查看更多>>
资源描述

《一种检测多任务操作系统任务死循环的方法.pdf》由会员分享,可在线阅读,更多相关《一种检测多任务操作系统任务死循环的方法.pdf(7页珍藏版)》请在专利查询网上搜索。

本发明公开了一种检测多任务操作系统任务死循环的方法。该方法在各任务入口函数循环体中嵌入插桩代码,在高优先级的监测任务中通过判断被监测的任务的插桩值、任务运行状态和总CPU占用率,实时精确测量任务是否处于死循环状态。本方法通过在所有需要监控的任务的循环体入口处嵌入插桩代码,不仅准确可靠、高效,而且实现方法简单;如果系统是通过高优先级的监测任务来统计CPU占用率,可以将判断死循环的插桩代码附加到CPU。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1