[linux内存管理] 第026篇 从内核源码看 slab 内存池的创建初始化流程 3周前查看 评论
[linux内存管理] 第026篇 从内核源码看 slab 内存池的创建初始化流程

本文详细介绍了Linux内核中slab内存池的创建过程,从源码层面剖析了slab cache的创建、内存布局以及相关数据结构的初始化。文章首先介绍了slab cache的创建接口函数kmem_cache_create,并解释了其参数与slab cache结构体属性之间的对应关系。随后,文章深入探讨了slab cache的创建过程,包括参数校验、锁的获取、复用已有slab cache的尝试以及创建新slab cache的详细步骤。文章还详细介绍了slab对象的内存布局,包括对齐、red zone、freepointer等关键概念,并解释了如何计算slab所需的物理内存页个数。最后,文章介绍了slab cache在NUMA节点和CPU本地缓存中的结构初始化过程,以及slab allocator体系的初始化过程,包括如何解决“先有鸡还是先有蛋”的问题。通过本文的学习,读者可以深入了解slab内存池在Linux内核中的实现细节。