4Linux内存管理中Slab缓冲区

 

函数名

功能

函数形成

参数

描述

kmem_cache_create

创建一个缓冲区

kmem_cache_t * kmem_cache_create (const char * name, size_t size, size_t offset, unsigned long flags, void (*ctor) (void*, kmem_cache_t *, unsigned long), void (*dtor) (void*, kmem_cache_t *, unsigned long));

Name为在/proc/slabinfo中标识这个缓冲区的名字;size

为在这个缓冲区中创建对象的大小;offset为页中的位移量;flagsSlab标志;ctor

dtor分别为构造和析构对象的函数。

 

成功则返回指向所创建缓冲区的指针,失败则返回空。不能在一个中断内调用该函数,但该函数的执行过程可以被中断。当通过该缓冲区分配新的页面时ctor运行,当页面被还回之前dtor运行。

 

 

kmem_cache_shrink

缩小一个缓冲区

int kmem_cache_shrink (kmem_cache_t * cachep)

Cachep为要缩小的缓冲区

为缓冲区释放尽可能多的Slab。为了有助于调试,返回0意味着释放所有的Slab

 

kmem_cache_destroy

删除一个缓冲区

int kmem_cache_destroy (kmem_cache_t * cachep);

cachep为要删除的缓冲区

  Slab缓冲区删除kmem_cache_t 对象,成功则返回0

   这个函数应该在卸载模块时调用。调用者必须确保在kmem_cache_destroy执行期间没有其他对象再从该缓冲区分配内存。

 

kmem_cache_alloc

分配一个对象

void * kmem_cache_alloc (kmem_cache_t * cachep, int flags);

cachep为要删除的缓冲区,flags请参见kmalloc()

从这个缓冲区分配一个对象。只有当该缓冲区没有可用对象时,才用到标志flags

 

 

kmalloc

分配内存

void * kmalloc (size_t size, int flags)

size为所请求内存的字节数,flags为要分配的内存类型

kmalloc 是在内核中分配内存常用的一个函数。flags 参数的取值如下:

GFP_USER – 代表用户分配内存,可以睡眠。

GFP_KERNEL – 分配内核中的内存,可以睡眠

GFP_ATOMIC – 分配但睡眠,在中断处理程序内部使用。

  另外,设置GFP_DMA标志表示所分配的内存必须适合DMA,例如在i386平台上,就意味着必须从低16MB分配内存。

 

 

kmem_cache_free

释放一个对象

void kmem_cache_free (kmem_cache_t * cachep, void * objp)

cachep曾分配的缓冲区,objp曾分配的对象。

释放一个从这个缓冲区中曾分配的对象

kfree

释放以前分配的内存

void kfree (const void * objp)

objp为由kmalloc()返回的指针