首页 理论教育 内存管理算法及应用-嵌入式系统原理与应用

内存管理算法及应用-嵌入式系统原理与应用

时间:2023-11-23 理论教育 版权反馈
【摘要】:由于内存管理算法上的原因,malloc()和free()函数的执行时间是不确定的,这在嵌入式实时操作系统中是非常危险的。为了消除多次动态分配与释放内存所引起的内存碎片和分配、释放函数执行时间的不确定性,μC/OS-Ⅱ将连续的大块内存按分区来管理。释放内存时将该块放回它以前所属的分区,就能有效解决内存碎片问题,而且每次调用malloc()和free()分配和释放的都是整数倍的固定内存块长度,这样执行时间就是确定的了。

内存管理算法及应用-嵌入式系统原理与应用

ANSI C 中,一般采用malloc()和free()两个函数动态地分配和释放内存。 这样,随着内存空间的不断分配与释放,就会将原来很大的一块连续内存区域逐渐地分割成许多非常小的但彼此之间又不相邻的内存块,也就是产生内存碎片问题。 系统中大量碎片的存在,使得后来一个程序要求为之分配存储空间时,可能出现总的内存空闲容量比所要求的大,但彼此不连续,也就是都以碎片的形式存。 由于内存管理算法上的原因,malloc()和free()函数的执行时间是不确定的,这在嵌入式实时操作系统中是非常危险的。

为了消除多次动态分配与释放内存所引起的内存碎片和分配、释放函数执行时间的不确定性,μC/OS-Ⅱ将连续的大块内存按分区来管理。 每个分区中都包含整数个大小相同的内存块,但不同分区之间内存块的大小可以不同。 用户需要动态分配内存时,选择一个适当的分区,按块来分配内存。 释放内存时将该块放回它以前所属的分区,就能有效解决内存碎片问题,而且每次调用malloc()和free()分配和释放的都是整数倍的固定内存块长度,这样执行时间就是确定的了。

(1)内存控制块OS_MEM

为了便于内存的管理,μC/OS-Ⅱ中使用内存控制块的数据结构跟踪每一个内存分区系统,每个分区都有属于自己的内存控制块,系统是通过内存控制块数据结构OS_MEM 来管理内存的。 其结构如下:

(2)内存管理

对内存管理主要使用以下四个函数来实现:(www.xing528.com)

①OSMemCreate()函数,用于建立一个内存分区。 该函数共有四个参数:内存分区的起始地址、分区内的内存块数、每个内存块的字节数和一个指向错误信息代码的指针

②OSMemGet()函数,用于分配一个内存块,当调度某任务执行时,必须先从已经建立的内存分区中为该任务申请一个内存块。

③OSMemPut()函数,释放一个内存块。 当某一任务不再使用一个内存块时,必须及时地将它放回到相应的内存分区中,以便下一次的分配操作。

④OSMemQuery()函数,用于查询一个特定内存分区的状态。 如查询某内存分区中内存块的大小、可用内存块数和正在使用的内存块数等信息,所有这些信息都放在OS_MEM_DATA 数据结构中。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈