能否合理有效的对内存进行管理是衡量一个操作系统的重要指标之一,特别对于实时操作系统,还应保证系统在动态分配内存时,他的时间必须是可确定的。
UCOS对ANSI C用来动态分配和释放内存的函数malloc()和free()进行了改进,使这两个函数的执行时间可确定。
主要内容:
UCOS对内存的分区和分块;
描述内存块的数据结构——内存控制块;
内存控制块与内存分区之间的关系;
对内存的操作;
一. 内存控制块
UCOS对内存进行了两级管理,先将一个大的连续内存空间分成若干个内存分区,每个分区有分成若干个大小相等的内存块来进行管理。操作系统管理内存分区,任务管理内存块。内存分区和内存块的使用情况由表——内存控制块来记录。
1. 可动态分配内存的划分
在内存中划分一个内存分区和内存块的方法非常简单,只要定义一个二维数组即可:INT16U IntMemBuf[10][10]。
若要真正的实现对内存进行动态分配,还需要将内存块与内存控制块关联起来。
2. 内存控制块OS_MEM的结构
调用OSMemCreate()之后
3. 空内存控制块链表
调用OSMemInit()之后
二. 动态内存的管理
1. 创建动态内存分区:OSMemCreate()
2. 请求获得一个内存块:OSMemGet()
3. 动态内存的释放:OSMemPut()
4. 查询一个内存分区的状态:OSMemQuery()