Pentium Pro處理器的頁定址延伸 -- by Robert Collins

大部份的人從不知道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分頁的分頁轉換。

圖3 -- 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處理器可以獲得的分頁延伸。

附注:

  1. The PentiumTM Processor User's Manual Volume 1 (241428-001), Chapter 2 Overview, paragraph 8.
  2. The PentiumTM Processor User's Manual Volume 1 (241428 all revisions), Figure 3-4.
  3. The PentiumTM Processor at iCOMPTM Index 735\90 MHz (241997 all revisions), Section 1.1, paragraph 5.
  4. The PentiumTM Processor at iCOMPTM Index 610\75 MHz (242323-001), Section 2.1, paragraph 7.

From: http://www.x86.org/articles/2mpages/2MPages.html