Linux之物理頁面的分配

Linux中存儲空間按連續與否可分爲連續存儲空間和不連續存儲空間。連續存儲空間以UMA爲表明,非連續存儲空間以NUMA爲表明。在內核中,經過條件編譯選擇項CONFIG_DISCONTIGMEM能夠選擇不一樣類型的存儲空間。針對不一樣的存儲空間,Linux內核有不一樣的alloc_pages()函數以供調用,以實現物理頁面的分配。

Linux中物理頁面分配的主函數爲:struct page * alloc_pages(int gfp_mask, unsigned long order)

先考慮NUMA結構的存儲空間。咱們知道,NUMA結構的存儲空間有不一樣的存儲節點(pg_data_t),每一個存儲節點有多個不一樣類型的存儲管理區(最多3個),而每一個存儲管理區又管理多個連續的物理頁面。若是有進程要求分配頁面,則依次在由存儲節點構成的單鏈表中嘗試分配2的order次冪頁面個數,若是成功就返回申請成功的頁面塊的首個頁面結構的地址。

相對於UMA結構的存儲空間,其頁面分配就相對簡單多了。它只有一個存儲節點,只需在該節點的各個存儲管理區上去獲取2的order次冪頁面個數便可。
相關文章
相關標籤/搜索