第7章内存管理1.doc

第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)

1亿VIP精品文档

相关文档