大部份的人從不知道Pentium的原始設計中有包括36位元的定址,而且有存取2M分頁大小的能力,這些延伸就是分頁定址延伸(PAE),且在CR4被致能。當CR4.PAE=1(CR4[5]=1),分頁定址延伸被致能,當CR4.PAE=0,A[35..32]就會被強制設為0,不管什麼位址能被保護模式以一個近4G的描述器指標產生和一個大於4G位址空間的偏移指標, 即使當CR4.PAE=1,大於4G的位址不會被產生除非它們是分頁模式,分頁轉換的結果。為了定址超過4G的記憶體的唯一方法就是經由分頁定址延伸。這份文件是我基於從Pentium所知的和從前的P6文章一些來描述PAE,這份文件也同時包含專為P6設計的PAE延伸。
不論PAE在Pentium越過概念的舞台不知道,不過它存在的痕跡在Pentium的文件和結構中是可見的,它們至少在各式各樣的Pentium簡介中有四個2M頁[1,2,3,4]。除了這些參考文件,CR4[5]被標示成保留,而可以致能PAE;CPUID.flags[6]被標示成保留,而可以指示出PAE的存在;MSR TR8被標示成保留,而包含給TLB測試的高四位元組。現在它出現P6要實現36位元定址和2M分頁大小。
為了支援36位元定址,實施改變分頁的機構是必須的,32位元線性位址仍被使用,但它們被轉換到36位元實際定址。Intel選擇用三階段分頁機構來使得PAE有4K的分頁,和兩階段機構用2M分頁,當CR4.PAE=1,CR3指到一個小的分頁目錄指標(PDPs),每個PDP進入參考到一個分離的分頁目錄,每個分頁目錄指到一個分頁表,共4K分頁或分頁框架目錄,2M分頁。圖1詳細描述全部CPU結構裡關於當PAE致能時的分頁轉換。圖2詳細描述全部CPU結構裡關於當分頁大小延伸(PSE)致能時(4M分頁)的分頁轉換。
圖1 -- PAE的分頁結構
[63..36] | [35..32] | [31..21] | [20..12] | [11..09] | 08 | 07 | 06 | 05 | 04 | 03 | 02 | 01 | 00 | |
CR3 | 分頁目錄基底指標[31..12]或[31..05]* |
未使用* | PCD | PWT | 未使用+ | |||||||||
分頁目錄指標 | 保留 | 分頁目錄位址[35..12] | AVL | 保留 | 保留 | 保留 | 保留 | PCD | PWT | 保留 | 保留 | P | ||
分頁目錄進入2M | 保留 | 分頁框架位址[35..21] | 保留 | AVL | 保留 | PS* | D | A | PCD | PWT | U | W | P | |
分頁目錄進入4K | 保留 | 分頁表位址[35..12] | AVL | 保留 | PS+ | 保留 | A | PCD | PWT | U | W | P | ||
分頁表進入4K | 保留 | 分頁框架位址[35..12] | AVL | G | 保留 | D | A | PCD | PWT | U | W | P |
圖2 -- PSE分頁結構
[31..21] | [20..12] | [11..09] | 08 | 07 | 06 | 05 | 04 | 03 | 02 | 01 | 00 | |||
CR3 | 分頁目錄基底指標[31..12] |
0 | 0 | 0 | 0 | 0 | PCD | PWT | 0 | 0 | 0 | |||
分頁目錄進入2M | 分頁框架位址[31..21] | 保留 | AVL | 保留 | PS* | D | A | PCD | PWT | U | W | P | ||
分頁目錄進入4K | 分頁表位址[31..12] | AVL | 保留 | PS+ | 0 | A | PCD | PWT | U | W | P | |||
分頁表進入4K | 分頁框架位址[31..12] | AVL | G | 保留 | D | A | PCD | PWT | U | W | P |
除了CR4.PAE能致能分頁定址延伸,CR4包含了額外的增強分頁模式•CR4.PGE(位元7)致能分頁全域延伸(PGE),PGE決定CR3是否從TLB趕出全部的PTE或只是那些G位元(全域位元)沒被設定,一樣地,為了作業暗示要設CR3,CR4,PGE控制TLB以相同的方法趕出。
如圖一所示,CR3仍然有32位元的暫存器,且因此PDP必須屬於4G的位址空間,每一個PDP被較高線性位址的2位元所選擇 -- A[31..30],因此PDP只包含4個進入點,每一個PDP進入點對到一個實際的分頁目錄,且有64位元寬,有36位元被使用,所以,每一個PDP能參考任何一個64G位址空間的分頁目錄,分頁目錄索引(PDE)是決定在線性位址位元 -- A[29..21],分頁目錄是因此限制每8位元有512個進入點(2^9)。即使PDE減少為512個進入點,它的結構當CR4.PAE=0(4096位元組)能用相同數量的記憶體空間,因為增加在它們的元素大小(到8位元組). 在4K分頁中,每8位元組的PDE指到分頁表的實際位址,在2M分頁中,每8位元組的PDE分頁指到它自己分頁框架的實際位址,在4K分頁中,分頁表進入索引(PTE)是被線性位址位元所決定 -- A[20..12],像是PDE,每一個分頁表被線制在每8為元組一個的512個進入點;每8位元組進入點指向分頁框架位置(PFA). 圖3說明當CR4.PAE=1時4K分頁的分頁轉換。
2M分頁的分頁轉換是虛擬相同於4M分頁轉換,這主要的分別在於兩轉換機構是增加在PDP參考上,且在PDE的索引位元數量上。像有PAE致能的4K分頁轉換,每一PDP進入點對應一個分頁目錄的實際位址,分頁目錄索引(PDE)是被線性位址位元所決定 -- A[29..21],在剩下的線性位址A[20..00]所剩下的位址位元被用來直接索引分頁框架。即偏移有21位元寬,分頁大小有2M(2^21)。圖4說明一個2M分頁的分頁轉換圖表。
圖4 -- 2M分頁定址延伸分頁轉換
無論PAE和PSE相互包含一些區別都會被產生,而且有較高的執行程序,就像是PDE.PS位元在分頁定址延伸被致能時扮演的角色,我會假設那兩個特色是相互包含的,而PAE有比PSE較高的執行程序,所以表1詳細描述PAE,PSE,和PDE.PS的可能組合。
表1 -- 分頁延伸控制位元
CR4.PAE | CR4.PSE | PDE.PS | 描述 |
0 | 0 | 不在乎 | Intel486相容分頁轉換。 |
0 | 1 | 0 | Intel486相容分頁轉換,延伸程式致能分頁失敗錯誤。 |
0 | 1 | 1 | 4M分頁轉換,延伸程式致能分頁失敗錯誤。 |
1 | 不在乎 | 0 | Intel486相容4K分頁轉換,延伸程式致能分頁失敗錯誤。 |
1 | 不在乎 | 1 | 2M分頁轉換使用36位元實際位址,延伸程式致能分頁失敗錯誤。 |
分頁結構圖的定義表:
名稱 | 描述 |
未使用* | 無論這個位元是否有意義,在這個情況下沒有宣告。一些較早的分頁位址描述器包含這些分頁目錄基底指標暫存器(PDBPR)位元,如果被包含,PDBPR將不會在被限制在4k範圍內,但仍被限制在32位元內。 |
未使用+ | 無論這些位元有任何意義,在這個時候沒有被宣告。 |
0 | 設定或清除這個位元沒有效果。 |
保留 | 保留。如果設定(RSV=1)也許會導致分頁錯誤,只有在分頁轉換的時候設定這個位元會導致分頁錯誤,如果這個參考分頁進入點不在TLB,則設定這個位元然後參考到這個分頁將不會導致分頁錯誤,如果進入點不在TLB,或者被TLB趕出,則下一個參考到這個頁的將會導致分頁錯誤。這在堆疊的分頁錯誤碼將會有RSV位元被設定(位元3)。 |
AVL | 系統程式設計者使用。 |
G | 全域的。當被設定時,會禁止這個頁的進入點從被TLB趕出•操作這個能使的正常的趕出TLB,會傳回有關這個位元被設定的進入點。 |
PS* | 這個位元總是被設為1。當設為1時這個分頁目錄進入點指到一個2M的分頁。 |
PS+ | 這個位元總是被清為0。當清除時這個分頁目錄進入點指到一個分頁表。 |
D | 沒用的。 |
A | 可被存取的。 |
PCD | 分頁快取除能。 |
PWT | 分頁寫過。 |
U | 使用者。 |
U | 使用者。 |
W | 可寫的。 |
P | 現在的。 |
影子區域 | 指示新加在P6的文章,或在Pentium處理器可以獲得的分頁延伸。 |