首页 > 范文大全 > 正文

浅析VxWorks内存泄露检测机制存在的不足及改进

开篇:润墨网以专业的文秘视角,为您筛选了一篇浅析VxWorks内存泄露检测机制存在的不足及改进范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:随着信息技术的不断发展,嵌入式设备也越来越多的在国防科技、网络通信以及工业控制领域中应用,因此对于系统的安全性与可靠性也越来越提出更多的要求,其中VxWorks操作系统,不仅具有可抢占式调度、中断延迟小、系统内核可剪裁的优势,而且也被应用到大多数的嵌入式产品中。以下本篇就将浅析vxworks系统中其内存泄露检测机制中存在的不足以及改进对策。

关键词:VxWorks系统;内存泄露检测;不足

中图分类号:TN929.53;TP319

基于当前嵌入式设备存储器容量较小的特征,因此对嵌入式系统的性能以及可靠性都提出较高的要求,特别是对于嵌入式操作系统的内存管理问题,更是成为当前的重点,不仅会直接影响到嵌入式设备的正常运行,还将会影响系统的安全性和可靠性。以下本篇就对VxWorks内存管理中存在的不足进行探讨,并给出有效的改进对策。

1 VxWorks操作系统内存泄露介绍

VxWorks操作系统中内存管理作为其重要的研究领域,解决以及处理内存泄漏问题以成为重点,就根据程序在申请到动态内存,且使用完动态内存后,不释放动态内存,并将其保存动态内存的地址变量用作其它时期,使动态内存并不能被释放,其它程序不能再使用动态内存,也无法被VxWorks操作系统回收,因此就会造成内存泄漏[1]。内存泄漏是因为疏忽以及错误而造成的程序在使用完之后未能释放动态内存的情况,针对内存泄露问题,不仅会使VxWorks应用程序申请动态内存的行为失败,也会导致服务中止,并且还会导致整个系统的资源崩溃。一般内存泄露就是指系统中堆内存的泄露,在云计算中虚拟技术作为关键技术,针对虚拟机的内存管理依然存在着内存泄露风险。

2 当前VxWorks系统内存泄露检测机制

针对当前内存管理中面对于内存泄漏的检测方法中,可以分为动态检测方法与静态检测方法两类。其中动态检测方法中,根据程序动态内存分配时,就可以在内存堆中作出标记,那么当程序退出的时候,释放所分配内存,可以通过检查堆上的残留的对象[2],以检测程序内存是否泄露。静态检测方法,就是通过程序源代码进行分析,之后再模拟所有可能执行路径,以此来判定程序中的可执行路径中是否存在安全缺陷,这样的检测不需要实际执行程序,不仅能够克服动态分析的开销较大弊端,还可以提高检测性能。

3 VxWorks系统内存泄露检测机制中存在的不足

对于当前VxWorks操作系统之中,在内存泄露检测中,依然存在一定的不足,动态检测方法虽然可以直接发现在实际程序中的缺陷,然而这样的检测机制中,时间开销大,且程序执行路径覆盖中还存在死角,其内存泄露检测结果的完备性不足[3],且实际中的漏报率较高。对于静态分析检测中,并不能精确判断程序输入以及环境变量等数据信息,因此在其检测之中的模拟执行路径可能会存在不可行路径,静态分析方法的误报率也较高。内存泄漏检测机制中,主要基于静态代码插桩、中断式插入、热补丁三种方式,但是这些都无法满足嵌入式操作系统对内存泄漏检测机制的需求,不能满足实时性、便捷性以及可靠性的要求,还会导致操作系统内存崩溃。

4 改进后的VxWorks 操作系统内存泄露检测机制

针对以上内存泄露检测机制中的不足,可以在基于Xen虚拟机的内存管理机制,采取动态检测虚拟机取检测内存泄露,其主要原理就是在虚拟机运行时,可以修改开源软件Valgrind中的源码,将其内插入监测代码,以便去动态截获虚拟机中申请的内存函数和释放内存函数,将其记录下来,以此来检测内存泄露,该内存检测机制不仅不需要修改被探测程序源代码,也不需要去重新编译,简化检测力度,降低内存泄露检测的漏报率。

4.1 动态截获虚拟机内存原理

该检测机制中,对于内存申请、释放的接口均具有统一、简单的特色,通过动态检测方法通对内存管理机制进行研究,用来截获内存申请以及释放的函数,可重载内存管理函数、内存读取函数以及进行指针运算,有效控制内存的操作功能。在内存分配以及回收中,主要是通过malloc与free实现,通过钩子程序与宏定义的方式进行替换,并且还具备记录调用函数源文件、与源文件所处位置的功能,还可以在自定义表中增加以及删除调用信息,不管是针对管理内存块、堆、栈以及全局变量,只要是有指针引用该内存,内存块的起始地址和内存块大小等信息就会被记录到全局表中,从符号表中得到静态内存,通过重载内存管理函数实现对堆里动态内存的分配。

4.2 自动内存泄漏检测机制的优势

在基于VxWorks操作系统自动内存泄漏检测机制中,可以预定义内存泄漏的门限以及内存驻留时间门限,并通过中断服务去唤醒检测任务,以此例收集泄漏内存信息,不仅具有实时性、便捷性;自动内存泄漏检测机制,在可靠性方面也有很大的应用价值,可以满足不同内存用户环境下的内存泄漏检测需求。

4.3 自动内存泄漏检测机制实际应用

在VxWorks操作系统的自动内存泄漏检测机制中,主要包括内存块头结构、中断及检测任务以及检测结果三个部分,从而实现对VxWorks内存泄露的有效检测。其中在内存块头结构中,VxWorks 系统会在分配每个内存块的同时,也为其分配一个块头Block_Hdr,不仅标记有指向前一块指针,还包括块大小、块标识等信息,其块头结构如下所示:

Typedef struct blockHdr

{

struct blockHdr * pPrevHdr;

unsigned int nWords:31;

unsigned int free:1;

} BLOCK_HDR;

可以标记任务ID、任务栈信息、内存创建时间、内存状态以及内存块大小等。在VxWorks的中断及检测任务中,为提高VxWorks 的实时性,以中断方式告知系统外部事件,判断系统内存占用率,提高中断服务程序能力,进行针对硬件的中断处理。追加定位信息的内存块头结构如下所示:

Typedef struct memInfoHdr

{

unsigned int moduleID;

unsigned int taskID;

unsigned int stack[MAX_CALLLS];

unsigned int crtTime;

unsigned int isFreed;

unsigned int size;

} MEM_INFO_HDR;

在内存泄露检测中,实现内存泄漏检测的自动运行,通过中断及检测任务,保证检测机制的实时性,提高内存泄露检测的灵活性,进一步定位内存泄漏点及问题代码,实施中断处理,自行启动态内存头的信息,确保系统资源使用情况。

5 结束语

综上所述,针对嵌入式操作系统的内存泄漏问题,可以采取动态检测虚拟机中内存泄露的方法,对应用程序中资源的申请、释放以及资源使用情况进行检测,并插入有效的监测代码,以便检测出VxWorks系统内存泄露代码,不仅具有一定的可行性,对提高VxWorks内存泄露检测机制也发挥不小的作用。

参考文献:

[1]朱筱菲,黄凤岗.一种基于VxWorks的内存分配算法[J].工业控制计算机,2010,21(14):56-57.

[2]何先波,钟乐海,芦东昕.嵌入式操作系统封装层的设计与实现[J].计算机应用,2011,14(12):76-77.

[3]万逸珠,戚文芽.嵌入式实时操作系统Vx Works的内存管理方案[J].信息工程大学学报,2012,07(18):41-42.

作者单位:西安近代光学研究所,西安 710065