当前位置:首页 > 芯闻号 > 充电吧
[导读]1、vxworks内存管理基本概念(1)内存和外部存储器的概念:一般RAM属于内存而Flash、ROM、NVRAM是嵌入式操作系统的外部存储器;(2)操作系统的内存分配一般都在系统启动或者复位的情况下

1、vxworks内存管理基本概念

(1)内存和外部存储器的概念:一般RAM属于内存而Flash、ROM、NVRAM是嵌入式操作系统的外部存储器;

(2)操作系统的内存分配一般都在系统启动或者复位的情况下进行,在运行时尽量避免内存动态申请和释放,因为这样会带来系统的不稳定性;

(3)vxworks为用户提供了2中内存区域:一种是Region内存域,是可变长的内存区域;另一种是partition内存分区,是定长的;vxworks内核和应用程序对内存的操作都是基于内存分区进行的;

2、vxworks中的内存布局

(1)vxworks 中主要涉及到的内存单元的概念有:内存分区、内存池、内存块;

①内存池是一块连续的内存区域,包含一块或者多块内存块;这些区域由memPartAlloc和memPartFree来申请和释放;

②内存分区:包含自身的描述信息和一个或者多个内存池,描述信息保存在内存分区中而内存池就是该内存分区拥有的实际内存空间;内存分区在刚创建的时候

只有一个内存池,用户程序可以往该内存分区中增加别的内存池,操作系统和通常大部分用户对内存的操作,都发生在系统的内存池中;

(2)vxworks启动的是BootRom+vxworks方式,那么系统中先后存在2种内存布局;

①BootRom运行时的内存布局:

reboot启动系统时,内存RESERVED和USE_REVERSE_MEM不会清楚UIqing这俩快内存区域,系统冷启动时会清楚所有的内存区域;因此可以利用热启动不进行清清除这俩块内存区域来记录一些非常关键的信息写入USE_REVERSE_MEM中来 解决问题,

②vxworks运行时内存布局


3、内存分配的算法 (1)内存的管理方法分为2种,可用表和自由链;

①可用表:即一张二维表格,每个表项记录了一个空闲内存块,主要参数包括块号、长度、起始地址;管理比较简单,但是表的大小无法确定,自身需要占用内存;

②自由链:自由链利用每个空闲块开始的几个内存单元存放本空闲块的大小以及下个空闲块的起始地址;缺点是查询量较大,但是自由链指针利用了自身的空闲单元,因此不需要额外占用内存块;链表大小没有限制,容易添加或者删除节点,vxworks中利用自由链来管理内存空闲块;

(2)内存分配算法:可以分为三种,最先适应法、最佳适应法和最坏适应法;

①最先适应法:可用表和自由链按起始地址递增的次序排列,特点:一旦找到大于或者等于所要求的内存长度的内存块,则结束搜索;该算法将从找到的内存划分出用户需要的内存分配给用户,如果相邻的有空闲块则将剩余部分与空闲块合并;

②最佳适应法:要求空闲内存块按照从小到大的次序组成可用表或自由链。当系统申请一个内存时,内存管理程序从表头开始查找直到找到大雨裹着等于需要的空闲内存块为止,当内存块大于申请的内存块时,按照最先适应法去处理;

③最坏适应法:与最佳适应法正好相反,要求空闲块按照从大到小的次序组成可用表或者西游链,当系统申请内存时首先检查第一个空闲块的大小是否等于或大于所要求的内存块大小,如果大于则分配给用户,然后调整空闲块的可用表或者自由链;

三种方法最佳适应法具有最佳性能,由于最先适应法和最坏适应法都需要对空闲内存块进行排序,而最佳适应法只是调整空闲块的大小,位置并未发生改变;最先适应法得到的内存空间最接近用户所需求内存的大小,往往剩下的空闲内存块会很小,不便于得到利用,容易产生碎片;相反最坏适应法剩下的空闲块可能会大,容易被使用,相对减少内存碎片的产生;vxworks基于以上原因和嵌入式系统的实时性采用了最先适应法;vxworks没有清楚碎片的功能,因此在实时系统设计中应该尽量避免内存碎片的产生;

4、内存管理API函数

1、创建内存分区memPartCreate,该函数创建了一个内存分区,包含一个内存值,返回值为分区ID,以便之后进行操作,有了内存分区就方便管理多个内存池;

PART_ID memPartCrete

{

/*内存分区的起始地址*/

char *pPool;

/*内存分区的大小*/

unsigned poolSize;

}

2、memPartAddToPool在内存分区中增加一个额外单独的内存池,每调用一次memPartAddToPool分区中的内存池数量就加1;一个分区中相邻的内存池地址不一定连续创建成功返回OK,失败返回ERROR;

STATUS memPartAddToPool

{

/*内存分区的ID*/

FAST PART_ID partId;

/*内存池的起始地址*/

FAST char *pPool;

/*内存池的大小*/

FAST unsigned poolSize;

}

3、memPartAlignedAlloc在指定内存分区的内存池中分配一个内存块时2的整数次幂的内存块;

void *memPartAlignedAlloc

{

FAST PART_ID partId;

unsigned nBytes;

unsigend aligment;

}

在没有内存共享的情况下memPartAlignedAlloc和memPartAlloc作用相同;

4、memPartFree/malloc/free/calloc/cfree登;


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

VxWorks是一款广泛应用于嵌入式系统的实时操作系统(RTOS)。作为实时操作系统领域的领导者,VxWorks以其强大的功能和可靠性,在多个行业领域得到了广泛应用。本文将向读者简要介绍VxWorks系统,包括其定义、特...

关键字: VxWorks 操作系统 嵌入式

关注「Linux大陆」,一起进步!本文作者:度白嵌入式任何程序运行起来都需要分配内存空间存放该进程的资源信息的,C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同,不同的区域又有不同的特性。...

关键字: 嵌入式 内存管理

本次给大家分享一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。mem_malloc代码仓库:❝https://github.com/...

关键字: 单片机 内存管理

↓推荐关注↓内存管理是C最令人切齿痛恨的问题,也是C最有争议的问题,C高手从中获得了更好的性能,更大的自由,C菜鸟的收获则是一遍一遍的检查代码和对C的痛恨,但内存管理在C中无处不在,内存泄漏几乎在每个C程序中都会发生,因...

关键字: 内存管理

以下为CPU内存管理的知识点总结,梳理图见文末。1、作为OS的基础,CPU能支持什么内存访问模型,OS就必须跟随。2、IntelCPU支持分段与分页两种模型。3、IntelCPU的访存模型是先分段再分页的模式,所以涉及到...

关键字: CPU 内存管理

自己目前开发的嵌入式开发所用的操作系统是VxWorks,以前读大学的时候用的最多的是linux操作系统,但是,对于这两种操作系统之间到底有什么区别,还真没有真正去细心的总结过,被别人问起时,难免有些尴尬的感觉,毕竟自己是...

关键字: VxWorks Linux

调试指令,dbgHelp显示所有的调试命令

关键字: VxWorks 调试命令

关注、星标公众号,直达精彩内容来源:嵌入式大杂烩作者:ZhengNL本次给大家分享一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。m...

关键字: 单片机 内存管理

↓推荐关注↓内存管理是C最令人切齿痛恨的问题,也是C最有争议的问题,C高手从中获得了更好的性能,更大的自由,C菜鸟的收获则是一遍一遍的检查代码和对C的痛恨,但内存管理在C中无处不在,内存泄漏几乎在每个C程序中都会发生,因...

关键字: 内存管理

摘要:操作系统的内存管理一直是计算机领域研究的一个重要方向。文中分析了几种常用内存管理中的页面置换算法及其存在的问题,提出了LUR页面置换算法的操作系统内存管理中比较接近理想算法的一种页面置换算法,并阐述了使用矩阵方法实...

关键字: 页面置换 LRU 矩阵 内存管理
关闭
关闭