基于VxWorks的软件开发平台内存管理模块的设计与实现.pdf
《基于VxWorks的软件开发平台内存管理模块的设计与实现.pdf》由会员分享,可在线阅读,更多相关《基于VxWorks的软件开发平台内存管理模块的设计与实现.pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第2 l 卷第3 期2 0 0 8 年9 月海南师范大学学报(自然科学版)J o u r n a lo fH a i n a nN o r m a lU n i v e r s i t y(N a t u r a lS c i e n c e)V 0 1 2 1N o 3S e p 2 0 0 8基于V x W o r k s 的软件开发平台内存管理模块的设计与实现贺冰琰,洪联系(集美大学计算机工程学院,福建厦f-3 6 1 0 2 1)摘要:因V x W o r k s 自身提供的内存管理函数采用f i r s t-f i t 算法,不能满足通信应用领域软件对内存管理的高实时性和内存利用率的
2、要求为了解决该问题,基于V x W o r k s 软件开发平台给出新的内存管理实现方法:采用两套完全独立的内存池集进程通信内存池集和应用内存池集,平台直接管理内存。为整个系统提供高效的动态内存管理机制,使新定义的内存管理模块更适合通信产品应用领域的嵌入式软件开发关键词:嵌入式操作系统:操作系统封装层:内存管理;V x W o r k s中图分类号:r I P3 1 1文献标识码:A文章编号:1 6 7 1 8 7 4 7(2 0 0 8)0 3 0 2 6 8 0 5目前,嵌入式软件在软件业中的比重正逐渐加大,所使用的操作系统一般是嵌入式实时多任务操作系统嵌人式系统的硬件环境多样性、硬软件紧
3、密耦合性及严格的实时性等特点决定了所使用的操作系统不可能象U N I X,W I N D O W S 等通用操作系统那样具有方方面面较强的功能这使得针对特定领域的应用对选用的嵌入式操作系统进行再封装成为必要所谓嵌入式操作系统的封装是指为了能缩短特定领域的嵌入式系统软件的开发周期,增强嵌入式操作系统功能和实现嵌入式程序的可移植性、可维护性和代码继承性而对所使用的特定嵌入式操作系统的再“加工”u 1 嵌入式操作系统封装层的目的之一是对上层应用屏蔽底层硬件、O S、网络的差别,给上层应用软件提供统一规范的调用接口,大大降低了应用软件开发人员的开发难度,也使开发出的应用软件有较好的跨平台性、可移植性、
4、可维护性和代码继承性而本文提到的软件开发平台完成了对嵌入式操作系统的封装封装层位于嵌入式操作系统与应用程序之间,封装层一般会对进程调度、内存分配等核心功能进行重新定义和优化以适应特定应用领域的开发需求下面以通信类嵌入式设备应用领域为背景来讨论该平台内存管理模块设计方案和实现1 内存分配子模块设计V x W o r k s 自身提供的内存管理函数采用f i r s t-f i t 算法 2 3 该算法在搜索可用的内存块时,从空闲队列头开始进行搜索,当找到第一个空间足够的空闲内存块时,即将该空闲块分配给其使用,剩余部分重新加入空闲队列这种算法不适用于通信系统采用f i r s t f i t 算法
5、,一是内存分配的实时性得不到保证。具体的搜索时间和已分配的内存块个数成O(N)的关系,二是会产生内存碎片对于长期运行、实时性要求高的系统,必须自己对内存进行管理内存管理模块主要由内存分配和内存保护两个相互独立的子模块组成,图收稿1 5 1 期:2 0 0 8 0 5 2 8基金项目:福建省教育厅2 0 0 7 年第一批B 类科技项目0 8 0 7 1 3 2)万方数据第3 期贺冰琰等:基于V x W o r k s 的软件开发平台内存管理模块的设计与实现2 6 91 是本模块在平台中的位置内存分配子模块按用途,可以分为如下三个部分:1)进程通信使用内存(消息构造时由通信模块为消息分配内存空间,
6、消息处理完毕,由调度模块释放占用的内存空间);2)上层应用使用内存;3)全局内存分配(只在初始化的时候使用,一般的应用场合不使用)内存保护子模块包括三个部分,1)U B(U s e rB u f f e r)保护;2)进程栈和私有数据区的保护;3)全局变量的保护,需要应用配合完成内存分配子模块主要实现对堆的动态申请和释放,它给上层应用提供两类接口:一个用于申请内存,一个用于释放内存内存分配子模块的设计目标是保证动态申请内存和释放内存的实时性,将内存碎片限制在可控的范围之内内存分配子模块基于内存池集机制(3 对不同的应用场合,使用不同的内存池集平台使用两套完全独立的内存池集,即进程通信内存池集和
7、应用内存池集进程通信内存池集为进程间通信提供内存申请支持,这是平台内部自己使用的内存池集,不对外开放应用内存池集为上层应用提供高效的动态内存申请机制每个内存池集被分成若干个内存池,每个内存池包含相等数目的内存块和内存头,同一内存池中的内存块尺寸相同内存池由循环队列进行管理。以达到实时性内存块的尺寸的最小单位为U B(目前定为,内存块的尺寸从6 4 字节按2 的倍数增长,其大小没有限制内存块个数可以_ S P A N6 4)根据应用需要在文件中自行配置引入循环队列可以加快内存块的申请和释放除去信号量等待的情况,每次申请内存块的时间是一样的上层应用如果需要使用到内存的动态申请,仍然采用内存池集管理
8、机制进程通信内存池集和应用内存池集完全独立,互不干扰,这样做的优点是一套内存池集的耗竭不会影响另一套内存池集的正常工作图2 是队列、内存头和内存体之间的关系图;开平一、上层应用调度管理、内存管理设备管理、定时管理等虚拟操作系统(V O S)商用操作系统V x W o r k s N T硬件内存头指针1荟内存头1L内存块1,内存头指针2内存头2L内存块2rrLr内存婆指针。内存婆nL内存块n操作队列固定内存固定内存图1 内存管理模块在平台中的位置图2队列。内存头和内存块之间的关系从图2 中可以看出,内存头和内存块的排列关系是有规律可循的,这种对应关系在运行过程中不会改变第一个内存头永远被用来控制
9、第一个内存块。而不可能去控制别的内存块但是内存头指针在队列中的位置是会不断改变的从队列中取出的一个内存头指针。可以指向任何一个内存头下面介绍本模块的三个内部接口1 1 初始化接口B O O L E A NI n i t M e m P l(T _ U B I n f o*p t U B I n f 0);传人参数:p t U B I n 缸一指向内存池集的配置信息概括来讲,初始化流程主要完成下面三部分的工作:根据内存配置表进行内存预分配,内存配置表有两套;创建控制队列,引用V O S 标准模块的队列操作;对内存头和内存体加页保护下面描述对进程通信内存池集的初始化过程,应用内存池集的初始化过程与
10、之相同流程描述:1)进行合法性检查(按内存池号循环),主要是检查用户的数据是否配置正确包括,内存块大小是否为U B _ S P A N 的倍数,内存池中内存块大小是否按序增长;2)获得页尺寸d w P a g e S;3)创建互斥信号量;4)计算虚拟内存总空间,同一个内存队列的U B 头放在一起,间隔N 个保护页在内存头之后,排放内存块内存块之间同样插入N 个保护页:5)调用V O S 提供的虚拟页申请函数,保留一段虚拟内存,这段内存初始状态为不可访问,由p t V i r M e m(临时变量)指定:6)p t V i r M e m 加一个页,为第一个内存池的内存头前面加虚拟保护页;7)从
11、p t V i r M e m 处提交内存头内存这段内存可以读写;8)调用V O S 提供的队列创建接口,创建一个无信号量、不可扩展的队列,将队列句柄存入对应的队列控制块;9)提交内存块(按 万方数据2 7 0海南师范大学学报(自然科学版)2 0 0 8 年内存块号循环),并做块保护;1 0)如果内存保护开关没打开,则将该内存块全部置为0 x 6 B,以便以后检测使用;1 1)将内存块指针存人内存头;1 2)将内存头指针入队1 2 申请内存接口B Y T E 木I n n e r G e t U B(T _ P 1 C t r l*p t P l C t l,W O R D 3 2d w S,
12、W O R D 3 2d w T i m e o u t,B Y T Eu c I f O s s);传人参数:7 r H C t r l 木p t P l C t l 内存池集指针,指定对哪个内存池集进行操作,目前分两个内存池集;W O R D 3 2d w 卜申请的内存大小;W O R D 3 2d w T i m e o u t 超时值,P 等待时间,如果进入P 等待,应该给申请者一段时间,用以获取信号,而不应该立即返回;B Y T Eu c I f o s s 一申请者是平台层本身还是上层应用流程描述:1)参数的合法性检查,尺寸必须介于0 和最大尺寸之间;2)根据尺寸从内存池集中寻找合
13、适的内存池;3)进入信号量保护;4)如果该内存池没有可用内存,则不向更大的内存池申请可用内存这样做的好处是可以避免大块内存被浪费;5)从队列头中取得内存块头指针;6)返回,申:请的内存块;7)释放信号量1 3 释放内存流程B O O L E A NI n n e r R e t U B(T _ P 1 C t r l*p t P l C f l,B Y r I E 车p u c B u f);传入的参数:1 _ P 1 C t r l 謇p t P l C t l 内存池集指针B Y T Ep u c B l l 一待释放的内存指针流程描述:1)合法性检查,指针必须在内存池集的范围之内;2)获
14、得内存体偏移,根据p u c B u f 获得其离内存体头部的偏移位置(由p u c B u f 同各内存池控制头中记录的内存范围进行比较,如果落入该内存池范围,则认为找到对应的内存池);3)获得对应的内存头指针,根据偏移位置得到内存头指针;4)进入信号量保护;5)根据使用标识,判别是否重复释放;6)根据内存头,判别返回指针是否落在内存块限定的范围内;7)置使用标识位为可以使用,然后将内存头指针加入队列;8)如果没有内存保护,则将内存块中相应的内容重置为O X 6 B;9)记录跟踪信息;1 0)释放信号量保护1 4 相关数据结构t y p e d e fs t r u c tt a g U B
15、 I n f oIW O R D 3 2d w S;严U B 块大小宰,W O R D l 6w T o t a l:*U B 块总数水,T _ U B I n f o;严存放配置信息宰,t y p e d e fs t r u c tU B H e a d T a gIW O R D 3 2d w U s e d S;严实际占用的内存尺寸木,W O R D l 6w U s e:,宰该内存区域是否被使用木W O R D l 6w P l:产指向内存池号母,B Y T E*p u c B u f:严指向一块内存区域堆 r-U B H e a d;t y p e d e fs t r u c t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VxWorks 软件 开发 平台 内存 管理 模块 设计 实现
限制150内