UC/OS-II中动态内存管理方案的改进与实现
按物理地址相邻链接起来。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编程接口函数与配置常数
- UCOS-II 操作系统在数码相框中的应用(03-02)
- ucOS-II消息邮箱的使用(06-14)
- uCOS-II的嵌入式串口通信模块设计(12-01)
- UCOS-II中OS_CPU_IRQ_ISR移植过程分析(12-01)
- UC/OS-II的内存管理OSMemCreate()分析(12-01)
- 关于uC/OS-II中的任务挂起讨论(12-01)