分頁置換與輾轉現象
最佳分頁置換(optimal page replacement)
想像你在決定把哪本書放回之前,能偷看一整天接下來的安排:你顯然會移走那本你最久都不會用到的書。最佳分頁置換演算法——稱為 OPT 或 MIN——做的正是這件事。當它必須挑犧牲頁時,它逐出那個在未來最久都不會再被參考到的頁。依定義,這在給定的參考字串與頁框數下,產生可能最少的分頁錯誤。
它的流程很容易說清楚。在記憶體已滿時發生錯誤,就往參考字串的前方看,對每個常駐頁找出它下一次會在何時被用到;逐出那個下一次使用離現在最遠的(或往後再也不會用到的)。舉例來說,若頁框裡的頁分別會在第 6、9、14 步被用到,你就逐出第 14 步才用到的那個。每次錯誤都重複這件事。因為它在擁有完美預知的前提下,總是做出最佳的個別選擇,沒有任何其他演算法能贏過它的錯誤數。
為什麼它無法被建造卻仍然重要:OPT 需要知道未來——程式將會碰觸的確切頁序列——對一個真正執行中的程式而言這是不可能的。所以它從不被用來做實際置換。它反而是黃金標準的基準:你在一份錄好的參考字串上跑 OPT,得知理論上最少的錯誤數,再衡量像 LRU 這種真實演算法距離那個下限有多近。OPT 恰好也是堆疊演算法,所以它絕不會遭遇貝雷迪異常。
頁框 = 3,裝著頁 2、0、3。接下來的參考是 0, 4, 2, 3, 0。頁 0 下一個被用到(很快),頁 2 稍晚,頁 3 更晚,而 4 是全新的。要載入 4,OPT 逐出 3——那個未來最久才會用到的常駐頁。
逐出下一次使用離現在最遠的頁——可被證明錯誤最少。
最佳法無法被實作,因為它需要對未來的知識;它唯一真正的角色,是作為一個無法被超越的下界,用來衡量實用演算法(如 LRU)。
又稱
另見