庖丁解牛式剖析详解linux内核内存管理子系统-kernel阶段之bootmem_init()
·
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






zone_sizes_init的作用是初始化内存管理伙伴系统策略的落地本质zone->free_area[order]
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)