在低资源的嵌入式主控上进行内存管理
最近在做的一个嵌入式的项目中,需要使用到大量的内存空间对数据进行缓存。但是缓存的数据块大小的不确定的,最小可能只有20个字节,最多的能达到400多字节。并且有多少这样的数据包还是不确定的。查看了原本的实现方式,为每个包都分配了最大的字节数,也就是400,然而大部分的数据包都远小于这个值,这样的处理方式势必会造成大量的内存浪费,在低端嵌入式处理器上不太可行。所以,笔者打算实现一个动态内存分配的方法,来解决这个问题。
首先,来回顾一下操作系统中的知识。
1.单一连续分配
这是最简单的一种存储管理方式,就是将整块内存直接进行分配。只能用于单用户、单任务的操作系统中。
2.固定分区分配
将整块内存划分为数个分区,这些分区的大小可以都相同也可以不相同。然后每次有申请者申请内存的时候,就分配其中一块可以满足申请大小的分区给申请者。固定分区式分配是最简单的一种可运行多道程序的存储管理方式。比如将内存用户空间划分为若干个固定大小的区域,在每个分区中只装入一道作业,这样,把用户空间划分为几个分区,便允许有几道作业并发运行。分区的空间可以大小都相等,也可以分区大小不等。
3.动态分区分配
个人认为动态分区是建立在固定分区的基础上。首先动态分区也需要将整个内存划分为数个分区都进行分配。与固定分区分配不同的是,在分配分区时,不会将整个分区在实现可变分区分配时,而是会将分区中多余的空间进行分割,产生一个新的空闲分区。将涉及到分区分配中所用的数据结构、分区分配算法和分区的分配与回收操作这样三个问题。其中,分配算法主要包括:首次适应算法、循环首次适应算法、最佳适应算法、最坏适应算法、快速适应算法以及伙伴系统等。
4.可重定位分区分配
进行内存移动之后,需要进行重定位。
程序执行时,需要硬件地址转化机构。
内存紧凑算法
离散管理