筆記 C 記憶體分頁機制

2021-10-05 08:51:13 字數 1248 閱讀 2091

學習資料來自於

虛擬位址與實體地址一一對應。

將位址以212=4k大小分頁,即加入4gb的虛擬記憶體=220 *212 ,即220 頁。

把所有的頁整合成為乙個陣列,即這個陣列有220 個元素,每個元素對應實體地址的相應頁位址,每個元素佔4位元組,即頁表大小4mb。

那麼實體地址=物理頁位址+偏移值。

所以虛擬位址=20的陣列下標+12的偏移位址

為什麼要這樣切割呢?因為頁表陣列共有 2^20 = 1m 個元素,使用虛擬位址的高20位作為下標,正好能夠訪問陣列中的所有元素;並且,乙個頁面的大小為 2^12 = 4kb,使用虛擬位址的低12位恰好能夠表示所有偏移。

例如乙個虛擬位址 0xa010ba01,它的高20位是 0xa010b,所以需要訪問頁表陣列的第 0xa010b 個元素,才能找到資料所在的物理頁面。假設頁表陣列第 0xa010b 個元素的值為 0x0f70aaa0,它的高20位為 0x0f70a,那麼就可以確定資料位於第 0x0f70a 個物理頁面。再來看虛擬位址,它的低12位是 0xa01,所以頁內偏移也是 0xa01。有了頁面索引和頁內偏移,就可以算出實體地址了。經過計算,最終的實體地址為 0x0f70a * 2^12 + 0xa01 = 0x0f70a000 + 0xa01 = 0x0f70aa01。

將220 頁分割成210 *210 ,若將其分成1024個頁表目錄,每個頁表目錄中含有1024個頁表。

即虛擬位址高10位在乙個1024個元素的陣列中查詢頁目錄,找到這個頁目錄即乙個1024個元素,中間10位在查詢到相關頁,再加上偏移位址得出實體地址。

例如乙個虛擬位址 0011000101 1010001100 111100001010,它的高10位為 0011000101,對應頁目錄中的第 0011000101 個元素,假設該元素的高20位為 0xf012a,也即對應的頁表在物理記憶體中的編號為 0xf012a,這樣就找到了頁表。虛擬位址中間10位為 1010001100,它對應頁表中的第 1010001100 個元素,假設該元素的高20位為 0x00d20,也即物理頁的索引為 0x00d20。通過計算,最終的實體地址為 0x00d20 * 2^12 + 111100001010 = 0x00d20f0a。

記憶體分段與分頁機制

邏輯位址 線性位址 實體地址 8086cpu 作業系統保護模式下的,啟用分頁機制的位址即虛擬位址,實模式下,虛擬位址和邏輯位址相同 物理記憶體劃分 幀 frame 邏輯記憶體劃分 頁 page 位址匯流排 intel早期cpu20位 記憶體1m 286的位址匯流排24位 記憶體64m 386的位址匯...

虛擬記憶體 分頁機制

1.2 分頁 1.3 頁表 1.4 加速分頁過程 1.5 針對大記憶體的頁表 虛擬記憶體的基本思想 每個程式都有自己的位址空間,這個空間被分割成多個塊,每乙個塊被稱作一頁或頁面。每一頁有連續的位址範圍。這些頁被對映到物理記憶體,但並不是所有的頁都必須在記憶體中才能執行程式。當程式引用到一部分在物理記...

記憶體的分段 分頁機制

摘錄自 程式設計師的自我修養 1.5節 早期的計算機中,記憶體有限,在執行多個程式時有如下問題 1.位址空間不隔離 程式直接訪問物理記憶體,程式間互相影響 2.記憶體使用效率低 需要將整個程式載入記憶體,程式切換時候,在記憶體和磁碟間交換效率低下 3.程式執行位址不確定 因為直接訪問物理記憶體,使用...