分类: LINUX
2009-06-25 15:48:17
分区页框分配器 (伙伴系统)
__alloc_pages (保留的页框池)
|
bffered_rmqueue (if one page, get from per-cpu页框高速缓存,else below)
|
__rmqueue (从管理区对应的free_area中分配页框)
Slab分配器
创建调整缓存 (专用kmem_cache_create for kernel, 普通包含13个几何分布的内存区,for slab分配器).
cache_grow()分配slab, kmem_getpages()从分区页框分配器得到页框,then alloc_slabmgmt() alloc slab description.
分配slab对象,kmem_cache_alloc → get from slab per_cpu本地高速缓存, if not → cache_alloc_refill填充高速缓存.
Kmalloc是入口, 先从普通高速缓存开始分配, then invoke kemem_cache_alloc.
内存池:different from 保留的页框池(用于中断),是动态内存的储备,只能用于池的拥有者,mempool_alloc() → kmalloc(), if fails, use pool....