vxWorks memory.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
vxWorks memory.pdf

VxWorks 操作系统编程之道 VxWorks 操作系统内存分配解析 嵌入式操作系统分配内存的算法有很多,如最先匹配算法,最优匹配算法,最坏匹配算 法,伙伴算法,还有很多人研究了各式各样的各有优势的算法。目前,常用的有VxWorks 操 作系统使用的最先匹配算法,linux 操作系统使用的伙伴算法等。 VxWorks 操作系统中,内存有分区(partition )和块(block )的概念,代码中的表现是 结构体PARTITION 和BLOCK_HDR 。一个分区可以分成无数个块。其使用的最先匹配算法 原理是这样的:将整个系统内存当作一个内存分区,创建内存分区时建立一个空闲链表,用 来管理空闲内存块。申请内存时,有哪些信誉好的足球投注网站空闲链表,找到最先满足内存大小的块,建立新的malloc 块,同时更新空闲链表;释放内存时,空闲的内存将被聚合形成更大的空闲块。 内存的分配和管理主要通过两个库文件实现:memLib.c 和 memPartLib.c 。其中 memPartLib.c 提供的函数如memPartCreate ()、memPartAlloc ()和memPartFree ()等主要 用于创建内存分区,从内存分区中分配、释放、管理内存块,同时提供malloc ()和free () 等从系统分区中分配和释放内存的标准接口。memLib.c 则进一步提供内存的管理的功能,如 系统内存是初始化函数memInit ()、系统内存属性设置函数memOptionsSet ()等。 1 VxWorks 映象的内存布局 VxWorks 映象在RAM 中运行后,其内存布局如图一。从图中知道能malloc 到的系统内 存位于FREE_RAM_ADRS + WDB_POOL_SIZE 和sysMemTop ( )之间。 图一 VxWorks 映象的内存布局 LOCAL_MEM_LOCAL_ADRS :所使用 RAM 的起始地址,常常分配成 0 ; RAM_LOW_ADRS :当VxWorks 映象从ROM 拷贝到RAM 时在RAM 中所处的起始位置; FREE_RAM_ADRS :由编译器根据代码编译后情况决定,其值为 VxWorks 映象的结束地址 (end) 。如果定义了INCLUDE_WDB,调试代理任务会进行模块的动态加载,占用内存的大小 为WDB_POOL_SIZE ,这时,系统内存就从WDB_POOL_SIZE 之后到sysMemTop ()。如果 没定义INCLUDE_WDB,则从FREE_RAM_ADRS 到sysMemTop ()都是系统内存空间。 操作系统是怎么知道这个区域的呢?原来在内核初始化函数kernelInit ()中会传递系统 内存初始化的参数。如kernelInit ((FUNCPTR) usrRoot, ROOT_STACK_SIZE, (char *) FREE_MEM_START_ADRS, sysMemTop (), ISR_STACK_SIZE, INT_LOCK_LEVEL); 函数原型是: 1 void kernelInit ( FUNCPTR rootRtn, /* 用户启动的根任务 */ unsigned int rootMemSize, /* 根任务的堆栈大小 */ char * pMemPoolStart, /* 系统内存起始地址 */ char * pMemPoolEnd, /* 系统内存结束地址 */ unsigned int intStackSize, /* 中断堆栈大小*/ int lockOutLevel /* 中断屏蔽级*/ ) 所以,系统内存的起始和结束

文档评论(0)

zhiminwei + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档