欢迎来到天天文库
浏览记录
ID:36199255
大小:1.70 MB
页数:68页
时间:2019-05-07
《mocor平台内存管理介绍及案例分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、MOCOR平台内存管理介绍及案例分析主讲人:GSM_FAEMOCOR平台内存管理介绍MOCOR内存管理的基本架构ThreadX的内存管理MOCOR的内存管理MOCOR内存bug实例分析9/21/20212MOCOR内存管理的基本架构一般的嵌入式系统中最基本的内存管理方案有两种——静态分配和动态分配。静态分配是指在编译或链接时将程序所需的内存空间分配好。采用这种分配方案的内存段,其大小一般在编译时就能够确定。静态分配比较简单,一般不需要特殊的管理。动态分配是指系统运行时根据需要动态地分配内存,为实现动态分配,系统里需要有一套完善的
2、管理机制。本文中所指的内存管理,就是指动态分配内存的管理。9/21/20213MOCOR内存管理的基本架构MOCOR内存管理体系的一个大致的调用层次如下图所示:9/21/20214MOCOR内存管理的基本架构从可用的内存资源的角度,还可以得到下面的一个内存分配图。9/21/20215MOCOR平台内存管理介绍MOCOR内存管理的基本架构ThreadX的内存管理MOCOR的内存管理MOCOR内存bug实例分析9/21/20216ThreadX的内存管理内存字节池(BTYEPOOL)内存块池(BLOCKPOOL)9/21/20217
3、ThreadX的内存管理内存字节池(BTYEPOOL)9/21/20218ThreadX的内存管理---内存字节池1.基本概念:内存字节池是一个连续的内存块。在字节池中,内存的分配以字节为单位,任意大小的内存都可以在字节池上分配(受限于内存的容量)。内存字节池类似于C语言里的堆(heap),所以,字节池我们也可以把它叫做字节堆,代码里我们也可以看到创建的字节池通常以heap来命名。但与一般意义上的堆的不同在于,ThreadX里的字节池可以有多个,MOCOR平台也是利用了这一特性,根据不同的需求而创建了多个heap。每一个字节池都
4、有一个相应的字节池控制块,通常是一个全局结构。控制块包括对内存池的定义和状态,比如内存池的名字,可用的字节数等。该结构的定义如下:9/21/20219ThreadX的内存管理---内存字节池9/21/202110ThreadX的内存管理---内存字节池2.分配方式:从字节池中分配内存类似于C语言的malloc调用,该调用返回所需内存的数量(以字节为单位)。分配的原则是“首次符合”原则,就是说,当第一个空闲内存块的大小满足需求时,就从该内存块分配内存,然后将该内存块的剩余内存转换成一个新块。字节池在初始状态下,只有一个空闲块,以后
5、随着随着分配的进行,内存块会随之增多。除了上述的分配原则之外,字节池里还定义了一个值BYTE_POOL_SLIP_SIZE。这是在代码里实现指定的一个具体数值,在分配内存时,如果要分配的内存大小大于这一数值,则从字节池的底部开始分配。采用这种分配方式是为了减少内存碎片的产生,尽量把大内存的分配区域和小内存的分配区域分开。目前系统里定义的BYTE_POOL_SLIP_SIZE为80K。9/21/202111ThreadX的内存管理---内存字节池3.内存布局:以一个分配了两次的字节池为例,在内存中的情况如下:9/21/202112
6、ThreadX的内存管理---内存字节池注意:首先要注意的问题是碎片,一个字节池可能有2000字节的可用空间,但不保证一定能分配到2000字节的连续空间,内存池对连续字节的数量不做保证。分配一块内存所需要的时间跟分配内存的大小,字节池中的碎片数等因素有关,如果字节池有2000字节的空闲块,花多长时间找到这块内存也是没有保证的。因此,在时间要求苛刻的任务中应避免使用字节池。字节池不能在中断函数里使用,也不能在timer回调函数里使用。9/21/202113ThreadX的内存管理---内存字节池思考:假定系统中有一个内存字节池,并
7、且已经从中分配了几次内存。当内存池中还有500字节的剩余内存时,应用程序申请200字节的内存,在什么情况下,这样的申请不能满足?9/21/202114ThreadX的内存管理内存块池(BLOCKPOOL)9/21/202115ThreadX的内存管理---内存块池1.基本概念:内存块池也是一个连续的字节块,但它是由一定数量的固定szie的内存块组成的。因此,从一个内存块池中分配出的内存总是固定大小的。相比字节池,内存块池的两个主要优势是:没有碎片。因为内存块池是固定size的块构成,所以没有碎片的产生。分配和释放的速度很快。所需
8、的时间相当于简单的链表操作,分配时不需要搜索整个内存块列表,它总是使用链表头部的内存块来分配。内存块池的主要缺点是缺乏灵活性。固定尺寸既是它的优点也是它的缺点。如果一个内存块池的尺寸足够大,可以满足用户最极限的内存分配需求,那么,这个内存块池上分配许多不同尺寸的
此文档下载收益归作者所有