源码基于:Linux5.4
在Linux kernel 初始化完成之后,系统中的内存分配和回收是由 buddy 系统、slab分配器来管理,但是在kernel 初始化阶段时内存的分配和释放是由memblock 分配器管理,记录物理内存的使用情况,本文主要介绍在系统启动阶段memblock 的初始化过程。
early boot memory 即系统上点到内核内存管理模型创建之前这段时间的内存管理,严格来说它是系统启动过程中的一个中间阶段的内存管理,当sparse 内存模型数据初始化完成之后,将会从boot memory 中接管内存管理权限。
那么就会有疑问为什么不等到sparse 内存模型构建完毕之后,使用sparse 内存模型申请内存呢?
因为,sparse 模型本身的内存管理数据也是需要复杂的初始化过程,而这个初始化过程也需要申请内存,比如mem_map,因此需要在sparse 模型之前需要一个内存管理子系统为其分配内存,尤其针对NUMA 系统,需要指明各个node 上申请到的相应的内存。与sparse 模型相比,early boot memory 不需要考虑复杂的场景,尤其此时系统还在初始化阶段,因此,也不需要考虑任何业务场景。所以相对来说early boot memory 相对来说比较简单,内存碎片等文件也不需要考虑。
详细可以查看:《