記憶體管理 實體地址擴充套件(PAE)分頁機制

2021-09-30 10:18:22 字數 1784 閱讀 7437

摘要: intel通過在處理器上把管腳數從

32增加到

36,以提高處理器的定址能力,使其達到

2^36=64gb,然而線性位址的位數仍然是32位,為此,需引入一種新的分頁機制。從pentium pro處理器開始,intel引入一種pae機制,另外一種叫做頁大小擴充套件機制(pse)在pentium iii中引入,但是linux沒有採用,本文不討論它。

64gb的

ram被分為

2^24個頁框,頁表項的實體地址欄位從20

位擴充套件到

24位,每個頁表項必須包含

12個標誌位(固定)和

24個物理

位址位(

36-12

),共36

位,因此,每個頁表項須從

32位擴充套件到

64位(36位

>32

位,考慮到對齊,因此應將頁表項擴大一倍到

64位)。

在4kb

的常規分頁情況下,由於每個頁表項大小為

64為,因而,原有

4k大小的頁表中,僅能包含

512個表項,這占用了

32位線性位址中的

9位,同理,由於頁目錄項與頁表項具有同樣的結構,高一級的頁目錄表中也僅能包含

512個頁表項,同樣占用

32位線性位址中的932

位(總位數)

-12位(頁內偏移量)

-9位(指示頁表中的索引)-9位

(指示頁目錄表中的索引)=2

位,同時,

linux

引入了乙個頁目錄指標表(

pdpt

)的頁表新級別,由4個

64位表項構成,剩餘

2位即用來指向

pdpt中4

個項中的乙個。

下面4張圖詳細說明了4種情況下的頁表結構(引自wikipedia)

未啟用pae下的4k分頁的頁表結構

未啟用pae下的4m分頁的頁表結構

啟用pae下4k分頁的頁表結構

啟用pae下2m分頁的頁表結構

線性位址的對映過程如下:

1)cr3:指向乙個pdpt基位址

2)位址的31~30:確定pdpt項

3)位址的29~21:確定頁目錄項中的乙個

此處,發生了分支:

a。如果頁目錄項的ps標誌位等於0,那麼頁大小是4k

4)位址的20~12:確定頁表的某一項

5)位址的11~0:確定偏移

b. 如果ps=1,啟用大頁

4)位址的20~0:確定2m頁中的偏移量。

記憶體實體地址

cpu訪問記憶體時要給出記憶體單元的位址 記憶體位址 每個記憶體單元都有乙個唯一的位址,稱之為實體地址。首先給出乙個公式 實體地址 段位址x16 偏移位址 實體地址指的是cpu訪問記憶體資料的記憶體位址,段位址指的是8086cpu的16位的位址匯流排,偏移位址也指的是16位的位址匯流排。什麼是段位址...

分頁記憶體管理 虛擬位址到實體地址的轉換

引子 這是邏輯位址 虛擬位址 包括程式中列印的變數位址顯示的都是邏輯位址,並不是記憶體空間上的實體地址。每條指令在被執行時,讀取運算元時需要給出運算元所在的記憶體位址,這個位址不能是物理主存位址,因為該程式在哪種硬體設定的機器上執行並不能事前確定,那作業系統就不能在此給出對應於某台機器的實體地址。一...

分頁記憶體管理 虛擬位址到實體地址的轉換

此篇部落格內容在於著重幫助讀者明白在分頁記憶體管理下,虛擬位址和實體地址轉換計算是怎麼進行的。有關分頁記憶體管理的其他知識請事先參閱有關資料。1.對每個程式而言,就好像自己獨佔了記憶體空間從0到極限的計算機。虛擬位址都是以0開始到某個上限結束。這是因為某個程式在何種硬體裝置的機器上執行並不能事先確定...