您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术嵌入式系统slab分配器的研究与实现 正文
嵌入式系统slab分配器的研究与实现

嵌入式系统slab分配器的研究与实现

点击数:7835 次   录入时间:03-04 11:39:27   整理:http://www.55dianzi.com   嵌入式系统-技术

    2.3.1 对象的分配

    当系统需要小内存块或者专用对象时,系统会调用对象分配操作,完成对对象的分配,具体流程如图4所示。

     

0

     

    (1)找到对应的cache。根据申请对象的大小定位相应的cache。

    (2)确定对应的e_slab。检查cache中的e_slab,找到满足本次请求的e_slab,如果所有的e_slab均不能满足,则创建一个新的e_slab并添加到cache管理的队列中。

    (3)从e_slab中分配一个空闲对象。从e_slab为系统分配一个空闲对象和object_t结构,将对象返还给系统,调整e_slab中对象,管理数组结构。

    2.3.2 对象的释放

    系统使用完对象后,应及时释放对象,否则内存会越用越少。对象释放流程如图5所示。

     

9

    (1)确定对象对应的cache与e_slab。根据对象的地址可以获得所在页面的描述符结构,从而获得对应的cache和e_slab。

    (2)释放对象。获得对象在e_slab中的偏移,采用头插法将对象加入空闲对象队列,并使e_slab中空闲内存增加释放值。

    (3)e_slab的调整。检查e_slab中空闲内存大小,若等于e_slab中所有对象都释放,则清除页面的e_slab标志,并把e_slab占用页块归还给物理内存管理器。

    2.4 e_slab分配器的回收

    在系统退出、内存回收等不再需要e_slab分配器时,需进行e_slab分配器的回收,主要完成e_slab的释放和cache的释放。

    2.4.1 e_slab的释放

    在对象释放过程中,若发现某个e_slab已经全部空闲,没有分配的对象,则将其释放,流程如下:

    (1)将e_slab从cache结构中删除。e_slab从cache的list队列中摘掉。

    (2)清除页面标志。将e_slab所在物理页面的e_slab标志清除,并清除页面与e_slab和cache的关联,使页面回到初始状态。

    2.4.2 cache的释放

    当系统不再使用某种对象时,系统要销毁管理对象的cache。cache销毁流程如下:

    (1)将cache从管理队列摘掉。将cache从cache_cache组成的双向队列中删除。

    (2)确定cache中没有e_slab。在cache销毁前,必须确定所管理的对象都已释放,检查cache的list队列,为空则cache中没有e_slab,否则进行e_slab释放。

    (3)释放cache结构占用的内存。由于cache是cache_cache管理的对象,cache结构的释放过程就是对象的释放过程。

    3 性能测试

    在嵌入式系统内存管理设计过程中,分别采用页面分配器与slab分配器相结合的方案和页面分配器与e_slab分配器相结合的方案,比较两种方案中slab和e_slab管理结构的内存占用量和内存分配释放中的性能。

    在管理结构内存占用方面,e_slab比slab节省了43%的空间;在对象的c过程中,e_slab的速度比slab快8%;内存释放过程中,e_slab比slab快5%。可见,不管在时间上还是空间上,e_slab性能都比slab优越。



上一页  [1] [2] 


本文关键字:嵌入式  分配器  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术