虛拟記憶體中的分頁
- 每個程序都有一個頁表,
- 每個程序可以占據大量的虛存空間
概念:
- 頁表項 : 頁表中的每個項記錄了每個頁對應的頁框号
- 不帶機關預設為位元組
Byte
問題
假設程序的虛存空間為 2 G B = 2 31 2GB=2^{31} 2GB=231,若使用 2 9 = 512 2^9 = 512 29=512個位元組的頁,那麼程序需要 2 31 / 2 9 = 2 22 2^{31}/2^9 = 2^{22} 231/29=222個頁表項.
導緻程序加載到記憶體時,建立的頁表占用的記憶體空間太大.
- 大多數虛拟記憶體方案都在虛存中儲存頁表, 那麼說明頁表也能像頁一樣能夠被分開,(分頁技術)
- 分頁技術 同樣來 分頁表 : 将1個大頁表分成多個頁表
- 使得當一個程序正在運作時,頁表至少有一個部分在記憶體中,且該部分包含正在運作的頁 的頁表項
使用二級方案來組織大型頁表
- 分頁技術 同樣來 分頁表 : 将1個大頁表分成多個頁表
原理:
-
有一個頁目錄,每一項指向一個頁表,
若頁目錄長度為
,且頁表最大長度為x
,則一個程序可以有y
頁x*y
- 典型情況下: 頁目錄的一個頁表的最大長度被限制為
頁 (重要限制),1
32位位址的兩級方案:
- 采用位元組級尋址,因為是
位一個位址,等價
32
一個位址,
4Byte
- 不帶機關預設為位元組
Byte
- 規定頁的大小為 4 K B = 2 12 4KB = 2^{12} 4KB=212, 因為頁表隻包含1個頁,下面簡稱此類 頁表 為 頁,
- 則 4 G B = 2 32 4GB=2^{32} 4GB=232虛拟位址空間需要 2 32 / 2 12 = 2 20 2^{32}/2^{12}=2^{20} 232/212=220個頁(頁表)組成 (稱為第三層)
- 如何優化查詢頁表?
- 若上面的每個頁(頁表)都由
個位元組的位址映射可以找到,4
- 則建立一個新頁表,每個頁表項是
個位元組的位址,指向該 2 20 2^{20} 220個頁(頁表),4
- 新頁表的大小為 2 20 ∗ 4 = 2 22 = 4 M B 2^{20}*4=2^{22}=4MB 220∗4=222=4MB的記憶體空間, (稱為第二次)
- 又因為規定了頁的大小 2 12 2^{12} 212,則該新頁表有 2 22 / 2 12 = 2 10 2^{22}/2^{12}=2^{10} 222/212=210個頁(頁表),每個頁(頁表)含有 2 10 2^{10} 210個 4 4 4位元組位址
總結:
第二層( 4 M B 4MB 4MB) = 2 10 2^{10} 210個頁(頁表) = 2 20 2^{20} 220 個
位元組位址4
- 則建立一個新頁表,每個頁表項是
- 因為每個頁(頁表)都由
個位元組的位址映射可以找到, 則第二層的頁(頁表)又可以由 2 10 2^{10} 210個 4 4 4位元組位址組成4
- 這個 2 10 2^{10} 210個 4 4 4位元組位址 2 10 ∗ 4 = 2 12 2^{10}*4=2^{12} 210∗4=212組成根頁表,占據記憶體 2 12 = 4 K B 2^{12}=4KB 212=4KB (稱為第一層)
虛拟位址如何通過第一層的根頁表找到在記憶體中的位址
32位虛拟位址結構
- [ 10 位 ] [ 10 位 ] [ 12 位 ] [10位][10位][12位] [10位][10位][12位]
- 第一個10位有 2 10 2^{10} 210個選擇,則通過第一層 2 10 2^{10} 210個選擇找到了第二層中 2 10 2^{10} 210個頁(頁表)中的一個
- 現在位于第二層中的任意一個頁(頁表)
- 此時同樣仍有 2 10 2^{10} 210個選擇
- 來到了第三層,因為頁表長度為1,找到的頁表恰好有頁的頁框号
- 最後 頁框号+12位偏移量 得到在記憶體中的位址
後記
- 重要是了解頁 頁表 頁表項 的差別和聯系