资源描述:
《vxworks内存管理机制研究及改进》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、VxWorks内存管理机制研究及改进第7卷第6期2007年3月1671-1819(2007)6-1218-04科学技术与工程ScienceTechnologyandEngineeringVo1.7No.6Mar.2007⑥2007Sci.Tech.Engng.VxWorks内存管理机制研究及改进刘东栋(西北工业大学软件与微电子学院,西安710065)摘要对于没有内存管理单元MMU机制的嵌入式系统,采用实存储器管理策略的关键问题是有效,安全,可靠地使用内存.文中通过研究嵌入式开发对内存管理的基本要求,嵌入式开发内存管理的关键问题和VxWorks内存
2、管理机制,给出了新的内存分配方案,即把除VxWorks系统保留内存以外的内存分为三种类型进行管理:固定大小的缓冲池,动态可变的堆以及由各种固定大小的缓冲区组成的队列.这种分配方案有效的满足了不同上层应用使用内存的需求,并且有效地避免了内存碎片问题.关键词嵌入式系统内存管理快速内存分配内存碎片VxWorks中图法分类号TP316.2;文献标识码目前,对有内存管理单元MMU(MemoryMan-agementUnit)的处理器设计的一些桌面操作系统¨J,如Windows,Linux,使用了虚拟存储器的概念.虚拟内存地址被送到MMU映射为物理地址,实际
3、存储器被分割为相同大小的页面,采用分页的方式载人进程.大多数嵌入式系统对没有MMU的处理器设计,不能使用处理器的虚拟内存管理技术,采用的是实存储器管理策略.因而,对于内存的访问是直接的,它对地址的访问不需要经过MMU,而是直接送到地址线上输出,所有程序中访问的地址都是实际的物理地址;而且,大多数嵌入式操作系统对内存空间没有保护,各个进程实际上共享一个运行空间.一个进程在执行前,系统必须为它分配足够的连续地址空间,然后全部载入主存储器的连续空间.由此可见,嵌入式系统的开发人员不得不参与系统的内存管理.从编译内核开始,开发人员必须告诉系统这块开发板到
4、底拥有多少内存;在开发应用程序时,必须考虑内存的分配情况并关注应用程序需要运行空间的大小.另外,由于采用实存储器管理策略J,用户程序同内核以及其他用户程序在一个地址空间,程序开发时要保证不侵犯其他程序的地址空间,以使得程序不至于破坏系统的正常工作,或导致其他程序的运行异常;因而,嵌入式系统的开发人员对软件中的一些内存操作要格外小心.1嵌人式系统中对内存分配的要求嵌入式系统开发中对内存的分配有很高的要求,①内存能快速申请和释放,即快速性.嵌入式系统中对实时陛的保证,要求内存分配过程要尽可能地快;②内存分配保持原子性,即可靠性.也就是内存分配的请求必
5、须得到满足,如果分配失败,可能会带来灾难性的后果;③内存应该各尽其用,即高效性.内存分配要尽可能地少浪费.不可能为了保证满足所有的内存分配请求而将内存配置得无限大.2VxWorks内存管理机制2006年l1月15日收到第一作者简介:刘东栋(1978一),男,甘肃省镇原县人,硕士,研VxWorks采用用户程序,内核处于同一个地址究方向:领域为软件工程技术及其应用.E-mail:liu?dongdong@空间的内存管理策略,软件开发人员在开发程序时如?"‰必须保证不侵犯其他程序和内核的地址空间,以免6期刘东栋:VxWorks内存管理机制研究及改进破坏
6、系统的正常工作,或导致其他程序异常运行.内核负责为程序分配内存,动态分配内存和回收内存.VxWorks为用户提供两种内存区域:内存域re—gion和内存分区partition,region是可变长的内存区,可以从创建的region中在分配段segment,region的特点是容易产生碎片,但灵活,不浪费,partition是定长的内存区,用户可以从创建的partition中分配内存块,或在某个内存分区中再创建一个内存分区Opartition的特点是无碎片,效率高,但浪费.通常,VxWorks内核和应用程序对内存的操作是基于内存分区进行的.内存池是
7、一块连续的内存区域,包含一个或多个内存块.内存分区包含分区自身的描述信息(一个结构体)和一个或多个内存池,描述信息保存在系统内存分区中,内存池是该分区实际拥有的内存空间.内存分区刚创建完毕时,只有一个内存池,以后用户程序可往该分区中添加内存池.内存池之间的地址不一定连续,VxWorks在启动过程中会创建一个包含系统内存池的系统内存分区J,如图1所示.USERRI落踟EDM蹦$y,tlraMem,p∞lWDBFO0LSIZEVxw口
8、k晚姆矗强(d矗舡,lext,,bss)InllialSt.ckRESE】孵E1)LOCAL~AM.LOCALADR
9、SSP蛔MemTopOFREEAM-^D舔RAM_LOW_ADR$LOCAL-MEMMEM_ADI~图1VxWorks的内存布局VxWo