您的位置:首页 > 其它

OS21操作系统-存储管理

2014-08-28 15:55 197 查看
内存管理在很多嵌入式系统里都是非常重要的,因为可用内存经常很小所以必须被充分利用。OS21提供了三种不同的内存管理方式:heap, fixed和simple,这给用户提供了灵活的内存分配手段,并达到时空上的平衡。

1.分区(partition)

内存管理的目的是允许应用程序能从一大块内存中分配和释放一小块内存,这是在内存分配器的控制下进行的。在OS21系统中,将这大块内存称作partition(分区)。内存的一个分区结构体存在如下属性:1)被管理的内存块;2)当前被分配的和释放状态;3)内存状态分配与释放的策略。

内存分配/释放的方法与partition被使用的方法相似,仅仅是分配算法上的差异。partition管理的内存区域并无特殊之处,既可是静态数组或局部数组,也可是一块绝对地址,也可是其他partition所分配的一块空间(一个partition又可分配出多个partition)。由于多个内存分区可以互存,使得应用程序的不同部分使用了不同的内存分区,如果某部分应用程序出现错误,不会影响到整个系统,这种机制可以提高OS21系统应用程序的容错性。

Partition控制块结构体如下:

struct partition_s

{

semaphore_t * lock;

partition_t * parent;

memory_allocate_fn allocate;

memory_deallocate_fn deallocate;

memory_reallocate_fn reallocate;

memory_status_fn status;

void * state;

size_t size;

};

第一个元素用于对该partition的加锁,互斥操作,通过两个宏来实现:_PARTITION_LOCK(p)、_PARTITION_UNLOCK(p)。

2. 内存分配策略

OS21支持三类分区:

1)Heap: 堆分区的分配类似于C语言中的malloc()和free(),使用memory_allocate()与memory_deallocate()。OS21具有将释放后的两块相邻内存合并的功能。尽管这种方式十分通用,但仍有些不足:分配和释放的时机不确定,这取决于之前的分配/释放以及空闲空间的搜索性能。

2)Fixed: 分配固定块大小,克服了heap分配的缺点,意味着分配和释放内存块消耗固定的时间。使用partition_create_fixed()或partition_create_fixed_p()来创建fixed分区,但调用memory_allocate()时不需要分配大小作为参数。

3)Simple: allocate only, no free, zero bytes overhead。

下图是一个分区与多个分区之间的关系:

OS21操作系统-存储管理

一般当创建根分区后,还需要在此基础上创建heap、fixed、simaple三种类型之一的分区。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: