微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > UC/OS-II中动态内存管理方案的改进与实现

UC/OS-II中动态内存管理方案的改进与实现

时间:03-24 来源:互联网 点击:

按物理地址相邻链接起来。www.51kaifa.com

4.3 TLSF算法分析

参考文献的推导,TLSF的malloc,free的时间复杂度并不随空闲内存块的数量而变化,都是O(1)。

4.4 TLSF的碎片

由于TLSF的分类内的自由空闲内存链表是不排序的,分配时也不搜索,所以申请尺寸属于某一类别的内存块时,却要从下一个类别分配内存。TLSF内存碎片的计算公式为:

4.5 TLSF参数的控制

TLSF有3个可以配置的参数常量。

FLI:是第一层次类别的数目,类别都是2的n次方。FLI最大可去到31,

SLI:是第二层次类别的数目。出于性能考虑,SLI必须是2的n次方,并且范围在[1, 32]之间,以便用单字处理指令。一般,SLI用第二层次类别数目的 来表示,如SLI=2则表示第二层次类别把对应的第一层次类别分为4份。

MBS(Minimum block size):最小块的尺寸,一般为16Bytes。www.51kaifa.com

5、TLSF向UC/OS-II的移植定制

为了克服UC/OS-II原有DSA的不足,本文引进了TLSF动态内存管理算法,并做了适当的修改以便适合于UC/OS-II。

由于TLSF可以在同一内存池分配不同尺寸的内存块,为了充分发挥TLSF这一优点、减少管理开销,在其移植后只使用物理地址连续的一块内存。在 TLSF的移植过程中,仿照了UC/OS-II系统的风格,把其定制成可裁减的模块,只有配置了相关常数后,才编译该模块。提供的编程接口函数与配置常数如表1。

函数

功能

时间复杂度

在OS_CFG.h配置常数为1,表示允许

tlsf_malloc

类似c语言的内存函数malloc

O(1)

OS_MEM_EN,OS_MEM_DESTROY

tlsf_free

类似c语言的内存函数free

O(1)

tlsf_init

初始化内存池

O(1)

tlsf_destroy

销毁内存池

O(1)

OS_MEM_DESTROY

表1 UC/OS-II的TLSF编程接口函数与配置常数

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top