OS21操作系统-存储管理

内存管理在很多嵌入式系统里都是非常重要的,因为可用内存经常很小所以必须被充分利用。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三种类型之一的分区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值