Linux内存从0到1学习笔记(6.9,物理内存初始化之Slab分配器)

Posted 高桐@BILL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内存从0到1学习笔记(6.9,物理内存初始化之Slab分配器)相关的知识,希望对你有一定的参考价值。

写在前面

前面提到了伙伴系统初始化,我们知道伙伴系统是以页(≥4KB)为单位进行管理的。但在内核中,有些时候需要申请更小字节单位的内存。

slab由此而生...

slab基于伙伴系统的以字节为单位进行管理的内存分配器。它首先从Buddy系统申请内存,然后再对这部分申请到的内存进行细分化管理。

当然,除了提供更小字节单位内存,slab也用于维护常用对象的缓存和提高cpu硬件缓存的利用率。

slab分配器初内核中始化函数调用栈如下:

一、初始化Slab分配器

kmem_cache_init()主要完成内核slab内存分配体系的初始化。

huang:
linux_mainline-5.17.0/mm/slab.c
//slab(slub)初始化
1199  /*
1200   * Initialisation.  Called after the page allocator have been initialised and
1201   * before smp_init().
1202   */
1203  void __init kmem_cache_init(void)
1204  
1205  	int i;
1206    /*
         * kmem_cache_init创建系统中的第一个slab缓存,以便为kmem_cache的实例提供内存。
         * 为此,内核使

以上是关于Linux内存从0到1学习笔记(6.9,物理内存初始化之Slab分配器)的主要内容,如果未能解决你的问题,请参考以下文章

Linux内存从0到1学习笔记(6.8,物理内存初始化之buddy伙伴系统)

Linux内存从0到1学习笔记(六,物理内存初始化之四 --- 内存分配器)---持续更新

Linux内存从0到1学习笔记(六,物理内存初始化) --- 更新中

Linux内存从0到1学习笔记(6.10 物理内存初始化之vmalloc分配器)

Linux内存从0到1学习笔记(6.7,物理内存初始化之CMA初始化)

Linux内存从0到1学习笔记(六,物理内存初始化之三 --- 物理内存管理数据结构)