您的位置:首页 > 运维架构

vxworks环境下的CPU\内存\任务\异常 监控

2013-03-19 16:25 1376 查看
任务运行状态监控

任务运行时的状态信息主要包括任务名、任务状态、当前占用CPU的比率、任务优先级等。VxWorks的Spy工具利用辅助时钟的中断服务程序,在指定的统计周期内,统计应用任务、Interrupt、Kernel、Idle状态等所获得的ticks总数,以此分别统计它们的CPU占用率。VxWorks的spyLib函数库提供了对任务名、ID、优先级等任务属性信息以及CPU空闲率信息进行监控的函数接口[3]。其中,spy()函数默认将这些信息在标准输出STD_OUT打印,可以通过任务级的输出重定向将此类信息保存到指定的文件中。此外,VxWorks5.5内核的spyReportCommon(FUNCPTR printRtn) 函数在执行过程中针对每一个任务分别调用printRtn函数,将任务的各项属性值赋给printRtn函数的参数。系统基于此设计了taskInfoSave()函数代替printRtn作为spyReportCommon()的参数,在taskInfoSave()中将任务的各项属性值保存到任务属性结构体taskInfoNode中,并将各任务的任务属性结构体组成链表,从而实现了对任务运行状态的监控。保存任务信息的结构体taskInfoNode列出如下:

struct taskInfoNode

{

char name[15]; /*任务名*/

int status; /*任务状态*/

int ID; /*任务ID*/

int priority; /*优先级*/

int cpu; /*cpu占用率*/

struct taskInfoNode *next;

}

1.1.3 资源状况监控

分布式嵌入式系统的资源状况信息是指节点正常工作状态下的CPU运行情况信息和内存使用状况信息。VxWorks操作系统提供了对CPU占用率和内存使用状况进行监控的接口。其中,CPU占用率信息可以在任务运行状态监控部分的taskInfoSave()函数中处理得到;当前可用内存信息、最大分配内存信息、内存占用率信息可以通过调用memShow()函数获取,由于memShow()默认将内存信息打印到标准输出,因此获取内存信息的一种较为直观的方式就是通过将memShow()的打印信息输出重定向至指定的文件,然后从中提取系统需要的内存信息。除此之外,VxWorks5.5内核中的内存分区结构体mem_part提供了内存分区信息,在程序中通过系统内存分区(ID为memSysPartId)引用该结构体的数据可以实时得到有关内存资源的信息,如调用memSysPartId->curWordsAllocated得到当前分配内存的字数。除此之外,mem_part结构体中与资源状况监控相关的信息还包括分区中内存总字数totalWords、内存累计分配字数cumWordsAllocated等。

1.1.4 异常监控

VxWorks为用户提供了较为完备的异常处理机制。对于与体系结构相关的异常处理,可以使用VxWorks提供的接口函数来替换异常处理程序,直接获取异常硬件上下文;对于通用的异常处理,VxWorks 提供了处理异常的通用初始化工具库,用来捕获和报告由程序错误产生的异常[4]。VxWorks的excLib库提供了excHookAdd()函数接口,用于将用户指定的异常处理钩子函数绑定到系统的异常处理流程中,当发生异常时由系统自动调用该函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: