- 论坛徽章:
- 0
|
Slab allocator简解
如果把page allocator当成memory space的一级代理商,那么slab allocator就是二级代理商。由此,
用户想要"拿货"(申请内存),可以从一级代理商拿,也可以从二代拿,当然也可以从其他的代理商那里拿,
"退货"(释放内存)当然得到对应的代理商那里,同样C库的malloc内存分配也是个内存代理商(应该也是二级)。
上述的意思是说,对于内存的管理在不同的层级或区域提供了不同内存粒度的管理机制,对于使用者,则须根据
实际情况从特定的管理机制进行内存的申请和释放。
由于只是对slab做top level的了解,没有深入到具体的细节,只是了解到slab allocator的管理方式是怎么
组织管理的。这里对其主要的数据结构的组织做勾勒,其实也就是给出了slab的组织结构图,至于slab的全貌,
这里就不另辟"奇文"给大家了(能力有限,也辟不出来),还是多看看ULK等相关书中的章节比较好。
因为对于概念的描述,逻辑的表达,这些书籍(原版)毕竟是大师级典著,会更准确细致。只看一遍,我是觉得不好懂,
但是再多看却更觉得恰到好处,这样的书才真值。当然源码定是不可以偏废的。
管中窥豹,只见一斑,要是对各位有所帮助,那就皆大欢喜了。没有"奇文",大家也不要吝啬,疑义相与析。
Slab同page allocator交互(申请和归还)是以slab为单位的,一个slab是2的n次幂连续页。
拿到页内存后,就对其宰割了,作cache-object的管理,大抵有以下几个组织特征:
1)object是组织在slab中;
2)slab中的空闲的object是通过object控制区来记录空闲号做跟踪;
3)同一cache组内的object的大小是相同的,一个cache组可以有多个slab;
4)同一cache组内的slab是通过将slab描述符组织为链表;
5)不同的cache组则通过cache描述符组织为链表;
其他2个效率上的特征:
1)每一cpu的缓存数组及所有cpu的共享缓存;
2)为配合硬件上的高速缓存(cache line)做的着色区处理;
Ref:
M. Tim Jones.Anatomy of the Linux slab allocator(Linux slab 分配器剖析).
Jeff Bonwick .The Slab Allocator_An Object-Caching Kernel Memory Allocator(1994).
Daniel P. Bovet, Marco Cesati. Understanding the Linux Kernel 3rd,Section 8.2.
[ 本帖最后由 foonix 于 2009-9-14 14:11 编辑 ] |
|