看了很多关于slab的资料,今天终于有了一点眉目,现记录于此;
1、主要结构
在系统初始化初始化一个cache链表cache_chain,用于将所有cache连接起来;
每个cache中包含3个slab链表,分别是满、部分满、空,而slab其实就是数个page;这些page中存放对象object;
当slab中的page都未填object,则属于slabs_empty链表;
当sllab中的page部分已填object,则属于slabs_partial链表;
当slab中的page都被object填满时,就将这个slab移动到slabs_full链表上;
2、主要函数
kmem_cache_create创建一个cache结构体,并添加到cache_chain中; kmem_cache_alloc从slab中申请一个obj;kmem_cache_free将对象obj释放给slab;kmem_cache_destroy销毁cache;