一种用于vxWorks的CPU占用率检测方法和系统的制作方法

文档序号:8258294阅读:3208来源:国知局
一种用于vxWorks的CPU占用率检测方法和系统的制作方法
【技术领域】
[0001]本发明涉及一种用于vxWorks的CPU占用率检测方法和系统,属于嵌入式操作系统领域。
【背景技术】
[0002]Vxfforks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RT0S),是嵌入式开发环境的关键组成部分,具有良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。在美国的F-16、FA-18战斗机、B-2隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器、2008年5月登陆的凤凰号,和2012年8月登陆的好奇号也都使用到了 VxWorks。
[0003]目前有多种在嵌入式计算机操作系统中检测CPU占用率的方法,例如,目前在嵌入式操作系统vxWorks中主要有两种CPU占用率检测的方法。
[0004]第一种:通过spy工具利用辅助定时器产生中断,并且为每个任务维护一个计数器。然后记下被中断的任务,并且将该任务的计数器加一。经过一段时间后,每个任务的计数器反映了该任务占用CPU利用率的情况。很明显,这是利用抽样技术。并且得到的CPU利用率的准确程度取决于任务的持续性和周期性。
[0005]第二种:通过创建两个特殊的任务,一个优先级别最高的任务和一个优先级别最低的任务,在这个优先级别最高的任务里运行一个循环次数很大的循环用于占用所有的CPU时间,记录一段时间内计数值;然后再设置一个优先级别最低的任务,当所有任务都停止时CPU才会调度此任务,此任务记下在无其他任务占用CPU的情况下计数,最后通过算法CPU 占用率=(total -1dle) % total。
[0006]但这两种算法都需要硬件系统配备相应高精度的辅助时钟,为了节约成本,通常没有这样的时钟,相对第一种方法来说,精确计算各任务CPU占用率没有必要,作为报警需要,计算系统总的CPU占用率即可;第二种虽然是计算整个系统的占用率,但必须需要硬件时钟的中断才能实现。

【发明内容】

[0007]为了克服现有技术的缺陷,本发明分别提出了一种用于vxWorks的CPU占用率检测方法和系统,以在不需要精度相当高的硬件时钟下计算系统的总的CPU占用率。
[0008]为了实现上述目的,根据本发明的采用以下的技术方案:
根据本发明的一个方面,提出了一种用于vxWorks的CPU占用率检测方法,其包括步骤:
S1:在VxWorks系统任务启动后,用户任务启动前,启动一最低优先级的任务,同时设置一统计时间,以从统计时间开始对一静态变量进行递加并记录其计数值,直至该统计时间结束;
52:对应该最低优先级的任务的统计时间结束时,将记录的静态变量的计数值保存至一比较基数中,以及将静态变量清零;
53:在一统计时间内,该最低优先级的任务在VxWorks系统空闲时对静态变量进行递加并记录其计数值;
54:启动一较高优先级的任务,以计算每一统计时间内的静态变量的增量值;
55:利用记录的静态变量的增量值与比较基数之比,计算出CPU占用率。
[0009]优选地,所述统计时间由一延时函数提供。
[0010]优选地,在步骤S5中,CPU占用率=100-增量值/比较基数。
[0011 ] 优选地,在步骤S2中,在将静态变量的计数值保存至一比较基数之前,先将静态变量整除100。
[0012]优选地,在步骤S3中,最低优先级的任务仅在无其他任务占用CPU时执行,以在统计时间内CPU空闲时对静态变量进行递加。
[0013]根据本发明的另一个方面,提出了一种用于vxWorks的CPU占用率检测系统,包括:
统计计数模块,在VxWorks系统任务启动后,用户任务启动前,启动一最低优先级的任务,同时设置一统计时间,以从统计时间开始对一静态变量进行递加并记录其计数值,直至该统计时间结束;
比较基数获取模块,对应该最低优先级的任务的统计时间结束时,将记录的静态变量的计数值保存至一比较基数中,以及将静态变量清零;
空闲计数模块,在一统计时间内,该最低优先级的任务在VxWorks系统空闲时对静态变量进行递加并记录其计数值;
增量计算模块,启动一较高优先级的任务,以计算每一统计时间内的静态变量的增量值;
占用率计算模块:利用记录的静态变量的增量值与比较基数之比,计算出CPU占用率。
[0014]优选地,所述统计时间由一延时函数提供。
[0015]优选地,占用率计算模块还设置为,使CPU占用率=100-增量值/比较基数。
[0016]优选地,比较基数获取模块还设置为,在将静态变量的计数值保存至一比较基数之前,先将静态变量的整除100。
[0017]优选地,空闲计数模块还设置为,以使最低优先级的任务仅在无其他任务占用CPU时执行,以在统计时间内CPU空闲时对静态变量进行递加。
[0018]与现有技术相比,本发明具有以下显著优点和有益效果:
根据本发明的用于vxWorks的CPU占用率检测方法和系统,不需要硬件系统配备相应高精度的辅助时钟,只需要一延时函数,例如系统函数taskDelay ()来实现。根据本发明的CPU占用率检测实现简单,易用,灵活性高,若采用软件实现代码非常简短,通用性强,可作为一个独立单元,可随时加入系统或从系统中剥离。
【附图说明】
[0019]下面结合附图对本发明的【具体实施方式】做进一步的说明,其中: 图1是根据本发明一实施例的流程图;
图2是根据本发明另一实施例的流程示意图。
【具体实施方式】
[0020]现结合图1-2,对本发明的具体实施例进行详细描述,以示例性地说明本发明的技术方案。
[0021]如图1所示,为根据本发明的用于vxWorks的CPU占用率检测方法的一实施例的流程图,包括步骤:
S1:在VxWorks系统任务启动后,用户任务启动前,启动一最低优先级的任务A,同时设置一统计时间t,以从统计时间t开始对一静态变量s进行递加并记录其计数值i,直至统计时间t结束。
[0022]具体地,所述统计时间t可由一延时函数f提供,例如通过一系统函数taskDelay()的一段2秒的延时来提供,也可设置为更长或更短的其他稳定的统一的延时,作为统计时间t。
[0023]S2:对应最低优先级的任务A的统计时间t结束时,将记录的静态变量s的计数值i保存至一比较基数r中,以及将静态变量s清零。
[0024]S3:示例性地,在用户任务启动后,设置统计时间t,在统计时间t内,使最低优先级的任务A在VxWorks系统空闲时对静态变量s进行递加并记录其计数值。
[0025]S4:启动一较高优先级的任务B,以计算每一统计时间t内的静态变量s的增量值
Co
[0026]具体地,最低优先级的任务A仅在无其他任务占用CPU时执行,以在统计时间t内CPU空闲时对静态变量s进行递加。因此,增量值c也是通过对静态变量S进行计数而得到,但由于最低优先级的任务A仅在无其他任务占用CPU时执行,静态变量s可能并非一直连续计数,有可能在其他具有更高优先级的任务插入时,即在CPU不空闲时中止计数,待该更高优先级的任务结束时,即在CPU再度空闲时继续计数,最终输出静态变量S。
[0027]假设在第η个统计时间t内,最低优先级的任务A计数并记录静态变量s ;在第n+1个统计时间t内,同样地,最低优先级的任务A继续计数并记录静态变量S。较高优先级的任务B在每一个统计时间t执行一
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1