加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

深入认识Linux内核之SLOB分配器

发布时间:2021-11-23 16:04:18 所属栏目:教程 来源:互联网
导读:@CopyLeft by ICANTH,I Can do ANy THing that I CAN THink!~ Author: WenHui, WuHan University,2012-5-12 Version:v1.0 Last Modified Time: 2012-5-20 SLOB概述 SLOB(Simple List Of Blocks)分配器,是一个在SLAB分配器类层之中的传统KR/UNIX堆分
@CopyLeft by ICANTH,I Can do ANy THing that I CAN THink!~
 
Author: WenHui, WuHan University,2012-5-12
 
Version:v1.0
 
Last Modified Time: 2012-5-20
 
SLOB概述
SLOB(Simple List Of Blocks)分配器,是一个在SLAB分配器类层之中的传统K&R/UNIX堆分配器。它比LINUX原slab分配器代码更小短小,且更有效率。但它比SLAB更容易产生内存碎片问题,仅应用于小系统,特别是嵌入式系统。
 
SLOB分配器总共只有三条半满空闲链(partial free list),free_slab_large、free_slab_medium和free_slab_small。每条链都由已被分配给SLOB的page元素构成。free_slab_small链只分配小于256字节的块,free_slab_medium只分配小于1024字节的块,而free_slab_large只分配小于PAGE_SIZE的块。
 
若通过SLOB分配器分配大于一页的对象,则SLOB分配器直接调用zone mem allocator (alloc_pages)分配连续页(compound pages)并返回。并修改相应首page结构体的flags字段,private字段中保存该块大小。
 
由于SLOB分配器需要重用page结构体中SLAB相关字段,为避免不必要的混淆,SLOB利用C语言union结构体特性将page重新封装成slab_page。在slab_page中,几个关键字段含义如下:
 
slobidx_t _units
 
在slob page中剩余空闲单元数。此处unit,等同于 slobidx_t、slob_block(其大小视PAGE_SIZE而定,当PAGE_SIZE=4KB时,为16bits)。SLOB将一页内存划分成slobidx_t个大小的单元。
 
slob_t *free
 
SLOB分配器将slob page内存中的空闲块按线性地址升序方式组织成空闲块链,由page中free字段指向链首元素。
 
list_head list
 
在空闲slob page链表中指向下一个slob page

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读