源码基于:Linux5.4
在博文 内存架构和内存模型简述 中简单描述了处理器中对于内存共享技术的架构NUMA 和 UMA,以及基于这两个架构衍生的内存模型FLATMEM、DISCONTIGMEM、SPARSEMEM,其中FLATMEM 和 DISCONTIGMEM 因为各自的缺点而被放弃,SPARSEMEM 是Linux 中最多用途的内存模型,也是唯一一个支持多种高级features 的内存模型,例如物理内存的hot-plug 和 hot-remove、非易失性内存设备的替代内存映射、延迟大型系统内存映射的初始化。
在博文 内存架构和内存模型简述 中只是简单阐述了SPARSEMEM 的内存模型概念,本文将结合代码分析SPARSEMEM 模型的初始化过程。
memblocks_present()函数是sparse内存模型初始化接口,意思是有一个新的内存块上线,不管是初始化还是热插拔内存都会进入到该函数里面。
例如,在博文 memblock初始化 中,我们知道kernel 在启动会进入start_kernel(),而