分頁置換與輾轉現象

犧牲頁選擇(victim-page selection)

當書桌已滿、必須放下新書時,唯一真正的決定就是該移走哪一本。在分頁裡這稱為犧牲頁選擇:在目前所有位於記憶體中的頁裡,要逐出哪一個來騰出空間?我們挑中的那一頁就是犧牲頁。分頁置換是「載入並逐出」的整個操作;犧牲頁選擇則是它狹窄而關鍵的核心——那個指名輸家的策略。

有兩件事決定一個頁是好犧牲者還是壞犧牲者。第一,它會不會很快又被用到?逐出一個行程即將再次使用的頁,只會引發另一次錯誤,所以我們想移走那些最久都不會被用到的頁。沒有演算法能確切預知未來,因此每一種都用一個替身:一個頁多久以前被用過、它最近有沒有被參考過、它到達的先後順序。第二,逐出它有多昂貴?一個乾淨(未修改)的頁可以立刻丟掉,因為磁碟上的副本仍然有效;一個髒(已修改)的頁則必須先寫回,多花一次磁碟寫入。增強型第二次機會演算法甚至會基於這個理由偏好選乾淨的犧牲者。

為什麼重要:犧牲頁選擇的好壞,到頭來就是你的虛擬記憶體系統的好壞。挑得好,大多數參考都留在快速的 RAM 裡;挑得差,機器就淹沒在磁碟流量中。本領域裡每一個有名字的演算法——FIFO、最佳、LRU、第二次機會、各種計數法——其實都只是對同一個問題的不同回答:誰是犧牲者?

頁框裝著 A(髒、很久前用過)、B(乾淨、最近用過)、C(乾淨、很久前用過)。為了避免寫回,作業系統寧可逐出一個乾淨又老舊的頁——C——而不是髒的 A 或剛被碰過的 B。

好的犧牲者是「不太可能很快用到」又「逐出便宜(乾淨)」的頁。

犧牲頁選擇要在兩種代價間取捨:逐出一個即將用到的頁的風險,對上寫回一個髒頁的成本。聰明的演算法兩者都會權衡,而不只看新近程度。

又称
choosing a victimvictim frame犧牲頁面受害頁