第四阶段 是 以 slab 机制 为基础,建立 kmalloc 机制
kmalloc 只是 slab 一些列实例的初始化
如果你想初始化一个 slab 实例,只需要调用 kmem_cache_create 即可
slab 的 api 是 从buddy 建立好就可以用的
而 一个slab 实例, 从 调用 kmem_cache_create 创建 好 即可使用
一般为一个page,如果用完了再申请一个page
slab 的使用方法
slab 不同于 kmalloc机制
kmalloc(非函数,而是机制) 的使用方法
kmalloc 机制 只是 基于slab 实现了很多 slab 实例,然后 向用户 提供 了 kmalloc 和 kfree 接口
kmalloc
unsigned int index;
index = kmalloc_index(size);
kmem_cache_alloc_trace( kmalloc_caches[kmalloc_type(flags)][index], flags, size);
kmem_cache_alloc
slab_alloc
slab_alloc_node
__slab_alloc
___slab_alloc
freelist = get_freelist(s, page);
return freelist;