摘要: 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開始到某個上限結束。這是因為某個程式在何種硬體裝置的機器上執行並不能事先確定...