天天看點

虛拟記憶體-2級分頁表原理

虛拟記憶體中的分頁

  • 每個程序都有一個頁表,
  • 每個程序可以占據大量的虛存空間

概念:

  1. 頁表項 : 頁表中的每個項記錄了每個頁對應的頁框号
  • 不帶機關預設為位元組

    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個大頁表分成多個頁表

原理:

  1. 有一個頁目錄,每一項指向一個頁表,

    若頁目錄長度為

    x

    ,且頁表最大長度為

    y

    ,則一個程序可以有

    x*y

  2. 典型情況下: 頁目錄的一個頁表的最大長度被限制為

    1

    頁 (重要限制),

32位位址的兩級方案:

虛拟記憶體-2級分頁表原理
  1. 采用位元組級尋址,因為是

    32

    位一個位址,等價

    4Byte

    一個位址,
    • 不帶機關預設為位元組

      Byte

  2. 規定頁的大小為 4 K B = 2 12 4KB = 2^{12} 4KB=212, 因為頁表隻包含1個頁,下面簡稱此類 頁表 為 頁,
  3. 則 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

    個位元組的位址映射可以找到,
    1. 則建立一個新頁表,每個頁表項是

      4

      個位元組的位址,指向該 2 20 2^{20} 220個頁(頁表),
    2. 新頁表的大小為 2 20 ∗ 4 = 2 22 = 4 M B 2^{20}*4=2^{22}=4MB 220∗4=222=4MB的記憶體空間, (稱為第二次)
    3. 又因為規定了頁的大小 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

    位元組位址
  • 因為每個頁(頁表)都由

    4

    個位元組的位址映射可以找到, 則第二層的頁(頁表)又可以由 2 10 2^{10} 210個 4 4 4位元組位址組成
    1. 這個 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位]
  1. 第一個10位有 2 10 2^{10} 210個選擇,則通過第一層 2 10 2^{10} 210個選擇找到了第二層中 2 10 2^{10} 210個頁(頁表)中的一個
    • 現在位于第二層中的任意一個頁(頁表)
  2. 此時同樣仍有 2 10 2^{10} 210個選擇
  3. 來到了第三層,因為頁表長度為1,找到的頁表恰好有頁的頁框号
  4. 最後 頁框号+12位偏移量 得到在記憶體中的位址
後記
  • 重要是了解頁 頁表 頁表項 的差別和聯系

繼續閱讀