第7章内存管理1.doc
第7章 内存管理 1
7.0 内存控制块 1
7.1 建立一个内存分区,OSMemCreate() 3
7.2 分配一个内存块,OSMemGet() 6
7.3 释放一个内存块,OSMemPut() 7
7.4 查询一个内存分区的状态,OSMemQuery() 8
7.5 Using Memory Partitions 9
7.6 等待一个内存块 11
内存管理
我们知道,在ANSI C中可以用malloc()和free()两个函数动态地分配内存和释放内存。但是,在嵌入式实时操作系统中,多次这样做会把原来很大的一块连续内存区域,逐渐地分割成许多非常小而且彼此又不相邻的内存区域,也就是内存碎片。由于这些碎片的大量存在,使得程序到后来连非常小的内存也分配不到。在4.02节的任务堆栈中,我们讲到过用malloc()函数来分配堆栈时,曾经讨论过内存碎片的问题。另外,由于内存管理算法的原因,malloc()和free()函数执行时间是不确定的。
在μC/OS-II中,操作系统把连续的大块内存按分区来管理。每个分区中包含有整数个大小相同的内存块,如同图F7.1。利用这种机制,μC/OS-II 对malloc()和free()函数进行了改进,使得它们可以分配和释放固定大小的内存块。这样一来,malloc()和free()函数的执行时间也是固定的了。
如图 F7.2,在一个系统中可以有多个内存分
原创力文档

文档评论(0)