Linux實體記憶體管理

Riemann$Hypothesis發表於2024-11-28

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)

  

相關文章