新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > UC/OS-II中动态内存管理方案的改进与实现

UC/OS-II中动态内存管理方案的改进与实现

作者:时间:2012-03-24来源:网络收藏

1、引言

嵌入式系统的内存资源相当有限,所以需对其进行合理的规划和管理,即需要满足其管理特点:【1】快速性、可靠性和高效性。

随着嵌入式应用软件规模的增长,人们希望DSA在满足以上特性的同时,更能够被方便而充分地使用。而UC/OS-II的DSA功能较弱,所以对其进行改进是很有必要的。

2、RTOS的DSA概览【2】【3】【4】【5】

按照记录以及合并空闲内存块的方法,可将RTOS的DSA分成顺序搜索、索引搜索、分类搜索、位图搜索以及伙伴算法等。这些DSA算法都具有分配真实内存,立即合并空闲内存等特点。

2.1 顺序搜索算法

顺序搜索算法采用单向或双向链表维护空闲内存。该算法的时间花费与空闲内存链表长度成正比,时间花费是有界的,但会随着空闲内存块增多而增加,在嵌入式实时系统中并不宜使用。

2.2 索引搜索算法

索引搜索算法用一种比链表复杂的数据结构来记录空闲内存。常见的如排序二叉树,树中每一个节点代表某一个尺寸的空闲内存,存储该尺寸的空闲内存链表指针。索引搜索算法的数据结构和分配、合并内存较为复杂。

2.3 分类搜索算法

分类算法把所有空闲内存按其尺寸范围划归不同的类,同一类内的内存块链接成一个空闲自由内存链表。所有的空闲内存头指针统一由另一个数组链表维护,每个空闲内存头指针对应该数组一个元素。值得注意的是,属同一类的自由内存,并不要求其物理上是相邻的。

分类搜索算法中的链表可以是按空闲内存尺寸排序的,也可以是不排序的。分类算法较为复杂,但不必搜索即可查找合适空闲内存,时间花费不随空闲内存的数量而变化,适合于嵌入式系统采用。

2.4 位图搜索算法

位图搜索算法用一个位图来查找空闲内存,该算法查找空闲内存所需的信息全部存储在一小块内存中,查找响应速度很快。

3、UC/OS-II的DSA不足之处

UC/OS-II中的内存管理模块把动态管理的内存分成多个内存区,每一个内存区又分成一定数量相同尺寸的内存块。具体的UC/OS-II 中,DSA由OS_MEM.c实现,总共只包含5个函数OSMenInit,,OSMemCreate,OSMemGet,OSMemPut 与OSMemQuery,约100行代码,十分精炼。正是由于其精炼,UC/OS-II的DSA提供的功能十分有限,存在以下不足:

1)动态管理的内存块尺寸须在编译时指定,运行时不能更改,限制了系统以后扩展应用程序的灵活性,也造成内存浪费。

2)由于同一分区只能提供唯一尺寸的内存块,而应用中一般需使用到不同尺寸的内存块。为了减少资源浪费,此时则需建立两个以上的内存区,加大了维护开销。

3)不可能提供确定不同内存区的内存块之间尺寸差距的方案,使内存的浪费不可避免。这是由于系统中可能的应用千变万化,而他们申请的内存块尺寸也不尽相同。

4)UC/OS-II的DSA可以归类为2.3中的分类搜索算法,但其并未提供如何搜索到合适分类的方法,也未提供向某一分类申请内存失败后如何向下一分类申请内存的方法,而需要程序员自己提供,加重了程序员负担的同时更是降低了程序的可靠性与稳定性。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭