常規分頁機制32位地址線理論上可以尋址4GB的RAM地址空間,但是,大型的服務器需要大雨4GB的RAM來同時運行數以千計的進程,因此,Intel通過在處理器上把管腳數從32增加到36,以提高處理器的尋址能力,使其達到2^36=64GB,同時引入了一種新的分頁機制PAE(Physical Address Extension,物理地址擴展)把32位線性地址轉換為36位物理地址才能使用所增加的物理內存,通過設置CR4的第5位來開啟對PAE的支持.引入PAE就是為了訪問大於4GB的RAM,線性地址仍然是32位,而物理地址是36位.
64GB的RAM被分為2^24個頁框,頁表項的物理地址字段從20位擴展到24位,每個頁表項必須包含12個標志位(固定)和24個物理地址位(36-12),共36位,因此,每個頁表項須從32位(4Byte)擴展到64(8Byte)位(36位>32位,考慮到對齊,因此應將頁表項擴大一倍到64位).這樣就導致,一個4KB的頁表可以包含512個表項而不是1024個表項.線性地址仍是32位,用其中的9位足以表示(2^9=512),由於頁目錄項與頁表項具有同樣的結構,高一級的頁目錄表中也僅能包含512個頁表項,同樣占用了32位線性地址中的9位,此時,線性地址剩余位數為:32位(總位數)-12位(頁內偏移量)-9位(指示頁表中的索引)-9位(指示頁目錄表中的索引)=2位,同時,Linux引入了一個頁目錄指針表(PDPT)的頁表新級別,由4個64位表項構成,剩余的2位即用來指向PDPT中4個項中的一個.
下面4張圖詳細說明了4種情況下的頁表結構(引自Wikipedia)
圖1. 未啟用PAE下的4K分頁的頁表結構
圖2. 未啟用PAE下的4M分頁的頁表結構
圖3. 啟用PAE下4K分頁的頁表結構
圖4. 啟用PAE下2M分頁的頁表結構
本文轉自:http://blog.csdn.net/crazyingbird/article/details/7175559