4.Linux内存管理中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为页中的位移量;flags为Slab标志;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()返回的指针 |
|