内核模块开发者的内核内存分配 - 第2部分
1. 自定义 slab 缓存的使用
kmem_cache_create() API 只能在进程上下文调用,很多内核代码(包括许多驱动)会创建并使用自己的自定义 slab 缓存。例如,在 5.4.0 Linux 内核中,该 API 被调用了 350 多次。
创建自定义 slab 缓存后,使用 kmem_cache_alloc() API 来分配内存对象,其函数签名如下:
void *kmem_cache_alloc(struct kmem_cache *s, gfp_t gfpflags);
参数说明:
- 第一个参数是指向之前创建的自定义缓存的指针,即 kmem_cache_create() 的返回值。
- 第二个参数是常用的 GFP 标志,正常进程上下文分配使用 GFP_KERNEL ,原子或中断上下文使用 GFP_ATOMIC 。
使用完分配的内存对象后,使用 kmem_cache_free() 释放:
void kmem_cache_free(struct kmem_cache *, void *);
参数说明:
- 第一个参数是指向之前创建的自定义 slab 缓存的指针。
- 第二个参数是要释放的
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



