目的
( slab块分配器分配内存),编写个内核模块,创建名称为
“mycaches"的slab描述符,小为40字节, align为8字节, flags为0。 从这个slab描述符中分配个空闲对象。
代码大概
内核模块中
#include <linux/version.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/slab.h>
static int size 40;
static struct kmem_cache *my_caches;
module_parma(size,int,0644); //内核模块接受用户空间的内容
static int __init myslab_init(void)
{
if(size>KMALLOC_MAX_SIZE){
return -1;
}
//创建slab缓存
my_caches = kmem_cache_create("my_cache",size,0,SLAB_HWCACHE_ALIGN,NULL);
//SLAB对象大小 和硬件高速缓存大小对其SLAB_HWCACHE_ALIGN
if(!my_caches){
return -1;
}
//分配空间
kbuf = kmem_cache_alloc(my_caches,GFP_ATOMIC);
if(!kbuf){
(void)kmem_cache_destroy(my_caches);//销毁创建的slab
return -1;
}
printk("sucess kbuf_addr%p\n",kbuf);
}
运行
在目录 /proc/sys/slab 查看刚刚创建的slab对象