頁錯誤頻率(page-fault frequency)
輾轉有一個可以直接量測的單一症狀:一個行程出錯太頻繁。頁錯誤頻率方法不去精確建模一個行程需要哪些頁,而是只盯著那支發燒溫度計——該行程產生分頁錯誤的速率——並給它多一些或少一些頁框,把這個速率維持在健康的區間內。它把錯誤率本身當作控制訊號。
機制如下。作業系統為每個行程的頁錯誤率設定一個上界與一個下界。若一個行程的錯誤率攀升到上界之上,表示它頁框不足——快要輾轉了——於是作業系統多給它一些頁框。若它的錯誤率掉到下界之下,表示它的頁框比所需的多,於是作業系統可以安全地拿走一些去給別人。當它的速率維持在兩個門檻之間時,這個行程就不被打擾。所以 PFF 不去計算工作集,而是用回饋直接調整每個行程的頁框配額,就像恆溫器加熱或散熱以把房間維持在範圍內。若即使這麼做後需求仍超過總記憶體——每個行程都在它的上界之上、又沒有空閒頁框了——作業系統就必須整個暫停某個行程,把它的頁框釋放給其餘的。
為什麼重要:PFF 是比維護工作集視窗更簡單、更直接的反輾轉控制,因為錯誤率量測起來便宜,而且正是我們在乎的那個量。它和工作集模型關係密切——兩者都想給每個行程足夠其當前區域性的頁框——但 PFF 對觀察到的症狀做反應,而非估計成因。誠實的限制:門檻必須調校,而 PFF 是在錯誤已經開始上升之後才反應,所以它控制輾轉,而非完美地預防它。
把區間設為每個行程每秒 1 到 5 次錯誤。一個每秒錯 9 次的行程在上界之上,所以作業系統多撥給它頁框,直到它的速率掉進區間。一個每秒只錯 0.5 次的行程在下界之下,所以作業系統收回它的部分頁框去給別人。
靠增減頁框把每個行程的錯誤率維持在一個區間內。
PFF 靠對錯誤率做反應來控制輾轉,而非建模工作集;若總需求仍超過記憶體,它必須暫停某個行程。它在錯誤上升之後才反應,所以它是限制輾轉,而非完美預防。