1. 程式人生 > >Linux虛擬記憶體組織結構淺析(一)

Linux虛擬記憶體組織結構淺析(一)

為了支援NUMALinux將實體記憶體劃分成不同的節點(node),節點用結構體pg_data_t表示,以上圖為例,圖中每個CPU的本地實體記憶體都稱為一個節點;即使在UMA結構中也有節點的概念,此時系統中就只有一個節點;系統中的多個節點被連線起來儲存在一個稱為pgdat_list的連結串列上。每個節點又被劃分成不同的區(zone),節點是通過其結構體內的陣列node_zones來跟蹤節點內的區的。區是指一個節點內一段連續的實體記憶體範圍。Linux中主要有3個區:ZONE_DMAZONE_NORMALZONE_HIGHMEM,它們的劃分如下:ZONE_DMA位於實體記憶體開始的一段區域內,主要用來供一些
ISA裝置使用;ZONE_NORMAL位於ZONE_DMA後面,這個區域被核心直接對映到線性地址的高階部分;ZONE_HIGHMEM指系統中剩下的實體記憶體,這個區域不能直接被核心對映。為了清晰起見,我們可以看看在x86平臺上的區是如何劃分的: