深入认识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 (编辑:济南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |