linux内核内存管理子系统-kernel阶段之bootmem_init

各位铁子们好,通过上篇简撸,咱们清楚,建立起虚拟映射后,CPU就可以正确地访问到物理内存,本篇咱们看下bootmem_init都干了什么?
在这里插入图片描述

arm64_numa_init()

在这里插入图片描述
大多情况下都不会配置numa_off,numa_off一般都为false,咱们看下走numa_init(of_numa_init)与
numa_init(dummy_numa_init)这种情况

of_numa_init

在这里插入图片描述
在这里插入图片描述
从DTS设备树解析出内存所属的结点信息

dummy_numa_init

在这里插入图片描述
执行numa_init(dummy_numa_init)函数,先执行dummy_numa_init,dummy_numa_init里通过 numa_add_memblk(0,…)把每个memblock的node设为0,再在numa_init函数里调用numa_register_nodes设置每个numa结点的ID信息及内存范围
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
通过上面可知,arm64_numa_init初始化了struct pglist_data *node_data[MAX_NUMNODES]中各数组元素的nodeI id及所管理的内存范围

zone_sizes_init

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4879fc61172f4efb937a225a96f21359.png
在这里插入图片描述
zone_sizes_init的作用是初始化内存管理伙伴系统策略的落地本质zone->free_area[order]

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐