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

任务运行状态监控
任务运行时的状态信息主要包括任务名、任务状态、当前占用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()函数接口,用于将用户指定的异常处理钩子函数绑定到系统的异常处理流程中,当发生异常时由系统自动调用该函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值