Linux物理内存管理

1 物理内存初始化——引导分配器memblock

  Linux内核启动时,先要初始化物理内存,这个阶段的作用主要是确定物理内存大小,哪些是可用的?哪些是预留的?完成这一阶段工作的是memblock引导分配器。

  内核启动时初始化物理内存的处理函数调用路径大概是(基于Linux 5.10.1源码查看):

  start_kernel(void)

    -->setup_arch(&command_line)

      -->setup_machine_fdt

        -->early_init_dt_scan_nodes

          -->of_scan_flat_dt

            -->early_init_dt_scan_memory

  上文中early_init_dt_scan_memory会读取dts中的memory节点,然后调用early_init_dt_add_memory_arch-->memblock_add-->memblock_add_range在memblock数据结构中添加物理内存。这里我们仔细看下memblock的数据结构(memblock.h文件中):

  从以上三个结构体我们不难看出,memblock结构体保护成员struct memblock_type memory成员和struct memblock_type reserved成员,memory就是可以的内存区域,而reserved就是预留的内存区域。struct memblock_type中又有指针指向memblock_region,memblock_region则记录了每个内存分区。

   我们接下来仔细看下代码memblock_add和memblock_reserve(在mm/memblock.c中),

 

 

1.1 memblcok中memory和reserved的差别

  

先休息,明天继续~

 

参考链接:Linux内存管理 (1)物理内存初始化 - ArnoldLu - 博客园 (cnblogs.com)

  

posted @ 2024-11-28 23:37  Riemann$Hypothesis  阅读(8)  评论(0编辑  收藏  举报