在分頁置換使用FIFO方式時,即使增加了實體記憶體的分頁數,分頁錯誤有時反而會增加。這種現象稱為什麼?
- A輪替癱瘓(thrashing)
- B貝萊迪異常(Belady's anomaly)
- C寫入時複製(copy-on-write)
在虛擬記憶體中,實體記憶體的頁框已滿時,由分頁置換演算法決定要置換出哪一個分頁。本工具以每次參考一欄的表格顯示其動作。可切換 FIFO、LRU、OPT、Clock,比較分頁錯誤次數與命中率。也可用來核對考試常見的「會發生幾次分頁錯誤」這類題目的答案。
收藏與最近使用的工具只儲存在這個瀏覽器(localStorage)中。
紅色是因分頁錯誤而載入的頁框,綠色是命中的頁框。Clock 會在分頁的右上方顯示參考位元。
以相同參考字串、頁框數為 1~8 個時的分頁錯誤次數。加底線的是目前的頁框數。
FIFO 有頁框增加反而使分頁錯誤增加的地方(紅字)。這就是 Belady 異常。
一開始所有頁框都是空的,有空頁框時從左側的頁框開始使用(此時也計為分頁錯誤)。在 OPT 中,若有多個今後不會再被參考的分頁,或下次被參考的時間相同,則置換出左側頁框的分頁。
其他輸入維持目前的值,只讓選擇的輸入在目前值的 1/4 到 4 倍之間變化時的結果。紅點是目前的值。
虛擬記憶體把程式的位址空間分成固定大小的分頁,只把需要的分頁載入實體記憶體的頁框。參考的分頁不在記憶體中時就會發生分頁錯誤,由作業系統從儲存裝置載入該分頁。若沒有空的頁框,就必須置換出某個分頁以騰出空間。決定要置換出哪個分頁的,就是分頁置換演算法。從儲存裝置讀取比存取記憶體慢好幾個數量級,因此減少分頁錯誤次數會直接影響效能。
FIFO 置換出最早載入的分頁。機制簡單,但即使是經常使用的分頁,只要舊了就會被置換出。LRU 置換出最久沒有被參考的分頁。它利用「最近使用過的分頁很可能再被使用」的局部性,因此表現通常比 FIFO 好。OPT(最佳置換)置換出今後最久不會被參考的分頁,分頁錯誤次數在理論上最少;但由於必須知道未來的參考,實際上無法使用,而是作為評估其他方式的基準。以範例的 20 次參考字串、3 個頁框為例,FIFO 會發生 15 次、LRU 12 次、OPT 9 次分頁錯誤。
通常增加頁框會使分頁錯誤減少,但 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 那一列數字增加的地方。
要精確實作 LRU,每次參考都必須更新順序,硬體的負擔很大。因此實際的作業系統常使用時鐘演算法(Clock),利用每個分頁的參考位元(存取分頁時由硬體設為 1)來近似 LRU。把頁框排成圓形並以指針指向其中之一,需要置換時,若指針所指分頁的參考位元為 1,就清為 0 並前進到下一個(給予第二次機會),找到位元為 0 的分頁時就將其置換出。最近被參考的分頁不容易被置換出,因此能以少量的工作得到接近 LRU 的表現。
正確答案: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的命中所得的次數。
正確答案:B. 雖然無法實現,但可作為其他方式未命中數下限的基準
最佳替換(Belady的OPT)假設已知未來的存取順序,逐出下次使用時間最遠的資料,未命中數在理論上最小。然而實際的硬體無法得知未來的存取,因此無法實現,而是套用到已記錄的存取序列上,用來評估LRU等方式距離最佳有多近。由於與LRU逐出的資料不同,未命中數一般也不相同。
本工具會計入。最初的載入(初次參考造成的錯誤)也因為分頁不在記憶體中,本來就是分頁錯誤。若考題有「不含最初的載入」等條件,請扣除這部分。
LRU 看過去,置換出最久沒有使用的分頁。OPT 看未來,置換出今後最久不會使用的分頁。OPT 的分頁錯誤最少,但不知道未來的參考就無法實作。
可以。在全相聯方式的快取中,把快取行視為頁框、區塊視為分頁,就能以相同的計算求出未命中次數。在組相聯方式的快取中,則對每個集合分別計算。
在日本的基本資訊技術士考試、應用資訊技術士考試等資訊類證照考試中,常見的題型是給定參考字串與頁框數,問 FIFO 或 LRU 會發生幾次分頁錯誤,或最後留下哪些分頁。表格中「錯誤」那一列的 × 數目就是答案。