内核模块作者的内核内存分配(第二部分)
1. 技术要求
在开始之前,需要准备一个运行 Ubuntu 22.04 LTS(或更高稳定版本)的虚拟机(或本地系统),并安装所有必需的软件包。同时,建议克隆代码仓库,以便实际操作代码,代码仓库地址为:https://github.com/PacktPublishing/Linux-Kernel-Programming_2E 。
另外,后续会运行一个非常消耗内存的应用程序,可能会导致内核采取一些极端措施(杀死某些进程),因此建议在安全、隔离的系统上进行测试,最好是没有重要数据的 Linux 测试虚拟机。
2. 创建自定义 slab 缓存
Slab 缓存背后的核心设计理念是对象缓存。通过缓存频繁使用的对象(即数据结构),可以显著提高内存分配和释放的速度,从而提升整体性能。
当编写驱动程序时,如果发现某个数据结构经常被分配和释放,通常会使用 kzalloc() (或 kmalloc() )和 kfree() 来分配和释放该对象。而 Linux 内核为模块和驱动程序开发者提供了 slab 层 API,允许创建自定义 slab 缓存。
2.1 创建和使用内核模块中的自定义 slab 缓存
创建、使用和销毁自定义 slab 缓存通常需要以下三个步骤:
1. 使用 kmem_cache_create() API 创建指定大小的自定义 slab 缓存,这通常在模块的初始化代码路径(或驱动程序的探测方法)中完成。
2. 使用 sla
超级会员免费看
订阅专栏 解锁全文

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



