分頁置換演算法計算工具

在虛擬記憶體中,實體記憶體的頁框已滿時,由分頁置換演算法決定要置換出哪一個分頁。本工具以每次參考一欄的表格顯示其動作。可切換 FIFO、LRU、OPT、Clock,比較分頁錯誤次數與命中率。也可用來核對考試常見的「會發生幾次分頁錯誤」這類題目的答案。

參考字串與頁框

結果

分頁錯誤次數
–
命中次數
–
命中率
–

紅色是因分頁錯誤而載入的頁框,綠色是命中的頁框。Clock 會在分頁的右上方顯示參考位元。

各頁框數的分頁錯誤次數

以相同參考字串、頁框數為 1~8 個時的分頁錯誤次數。加底線的是目前的頁框數。

一開始所有頁框都是空的,有空頁框時從左側的頁框開始使用(此時也計為分頁錯誤)。在 OPT 中,若有多個今後不會再被參考的分頁,或下次被參考的時間相同,則置換出左側頁框的分頁。

分頁錯誤與分頁置換

虛擬記憶體把程式的位址空間分成固定大小的分頁,只把需要的分頁載入實體記憶體的頁框。參考的分頁不在記憶體中時就會發生分頁錯誤,由作業系統從儲存裝置載入該分頁。若沒有空的頁框,就必須置換出某個分頁以騰出空間。決定要置換出哪個分頁的,就是分頁置換演算法。從儲存裝置讀取比存取記憶體慢好幾個數量級,因此減少分頁錯誤次數會直接影響效能。

FIFO、LRU、OPT 的差異

FIFO 置換出最早載入的分頁。機制簡單,但即使是經常使用的分頁,只要舊了就會被置換出。LRU 置換出最久沒有被參考的分頁。它利用「最近使用過的分頁很可能再被使用」的局部性,因此表現通常比 FIFO 好。OPT(最佳置換)置換出今後最久不會被參考的分頁,分頁錯誤次數在理論上最少;但由於必須知道未來的參考,實際上無法使用,而是作為評估其他方式的基準。以範例的 20 次參考字串、3 個頁框為例,FIFO 會發生 15 次、LRU 12 次、OPT 9 次分頁錯誤。

Belady 異常

通常增加頁框會使分頁錯誤減少,但 FIFO 有時反而會增加。這稱為 Belady 異常。以參考字串 1 2 3 4 1 2 5 1 2 3 4 5 為例,FIFO 在 3 個頁框時發生 9 次分頁錯誤,4 個頁框時則是 10 次。LRU 與 OPT 具有「頁框為 n 個時在記憶體中的分頁,頁框為 n+1 個時也一定在記憶體中」的性質(堆疊演算法),因此不會發生這種異常。請在比較表中確認 FIFO 那一列數字增加的地方。

實際作業系統使用的 Clock

要精確實作 LRU,每次參考都必須更新順序,硬體的負擔很大。因此實際的作業系統常使用時鐘演算法(Clock),利用每個分頁的參考位元(存取分頁時由硬體設為 1)來近似 LRU。把頁框排成圓形並以指針指向其中之一,需要置換時,若指針所指分頁的參考位元為 1,就清為 0 並前進到下一個(給予第二次機會),找到位元為 0 的分頁時就將其置換出。最近被參考的分頁不容易被置換出,因此能以少量的工作得到接近 LRU 的表現。

練習作業系統題目

在分頁置換使用FIFO方式時,即使增加了實體記憶體的分頁數,分頁錯誤有時反而會增加。這種現象稱為什麼?

  1. A輪替癱瘓(thrashing)
  2. B貝萊迪異常(Belady's anomaly)
  3. C寫入時複製(copy-on-write)
查看答案與解析

正確答案:B. 貝萊迪異常(Belady's anomaly)

直覺上增加實體分頁應該會讓分頁錯誤減少,但已知在FIFO方式中,對於特定的存取序列,將分頁數從3增加到4,錯誤反而會增加。這稱為貝萊迪異常。像LRU這類即使增加分頁數,保留的分頁集合也必定包含先前集合的方式(堆疊演算法),則不會發生。輪替癱瘓是因記憶體不足而持續置換的狀態,寫入時複製則是寫入時才複製的方式。

容量為2條快取行、採LRU替換的全相聯快取一開始為空,依A、B、A、C、B、A的順序參照區塊時,會發生幾次未命中?

  1. A4次
  2. B5次
  3. C6次
查看答案與解析

正確答案:B. 5次

依序追蹤:A(未命中,[A])、B(未命中,[A,B])、A(命中,A變成最近使用)、C(未命中,逐出最舊的B,[A,C])、B(未命中,逐出最舊的A,[C,B])、A(未命中,逐出最舊的C,[B,A]),共未命中5次。算成4次,是例如在放入C時誤以為逐出了A等的算法,在LRU中重點在於命中的A已變成最新。6次是漏看第3次A的命中所得的次數。

相對於逐出最久未被使用者的LRU,逐出今後最長時間不會被使用者的方式(最佳替換,OPT),下列說明何者正確?

  1. A是實際快取中廣泛使用、最一般的替換方式
  2. B雖然無法實現,但可作為其他方式未命中數下限的基準
  3. C無論什麼存取順序,未命中數都與LRU完全相同
查看答案與解析

正確答案:B. 雖然無法實現,但可作為其他方式未命中數下限的基準

最佳替換(Belady的OPT)假設已知未來的存取順序,逐出下次使用時間最遠的資料,未命中數在理論上最小。然而實際的硬體無法得知未來的存取,因此無法實現,而是套用到已記錄的存取序列上,用來評估LRU等方式距離最佳有多近。由於與LRU逐出的資料不同,未命中數一般也不相同。

下列何種情況會發生分頁錯誤(page fault)?

  1. A快取中沒有資料,而從主記憶體讀取時
  2. B所存取的分頁尚未配置到實體記憶體時
  3. CTLB中有轉換結果,立即得知實體位址時
查看答案與解析

正確答案:B. 所存取的分頁尚未配置到實體記憶體時

分頁錯誤是在下列情況發生的例外:所存取分頁的頁表項目無效,也就是尚未配置到實體記憶體(被換出到磁碟、尚未載入等)時,或是對唯讀分頁進行寫入等不被允許的存取時。作業系統會準備好分頁,然後重新執行指令。快取未命中僅由硬體處理,不會變成例外。若TLB中有轉換結果即可立即轉換,因此不會發生錯誤。

常見問題

一開始載入空頁框時也算分頁錯誤嗎?

本工具會計入。最初的載入(初次參考造成的錯誤)也因為分頁不在記憶體中,本來就是分頁錯誤。若考題有「不含最初的載入」等條件,請扣除這部分。

LRU 與 OPT 有什麼不同?

LRU 看過去,置換出最久沒有使用的分頁。OPT 看未來,置換出今後最久不會使用的分頁。OPT 的分頁錯誤最少,但不知道未來的參考就無法實作。

也能用於快取的置換嗎?

可以。在全相聯方式的快取中,把快取行視為頁框、區塊視為分頁,就能以相同的計算求出未命中次數。在組相聯方式的快取中,則對每個集合分別計算。

考試中會怎麼出題?

在日本的基本資訊技術士考試、應用資訊技術士考試等資訊類證照考試中,常見的題型是給定參考字串與頁框數,問 FIFO 或 LRU 會發生幾次分頁錯誤,或最後留下哪些分頁。表格中「錯誤」那一列的 × 數目就是答案。

相關術語

頁面錯誤 LRU(最近最少使用) 虛擬記憶體 隨需分頁 輪替癱瘓(Thrashing)

相關計算工具

半導體、電子電路與資訊計算工具 →