Page-Buffering Algorithms

Page-buffering algorithms 有三個策略:

1. 保留一個 free frame pool

問題背景:標準的 page replacement 流程是:

  1. 選出 victim frame
  2. 把 victim 寫回 disk(若 dirty)
  3. 讀入新頁面

這樣要等兩次 disk I/O 才能 restart process,很慢。

解法:預先維護一個「空閒 frame 的池子」。發生 page fault 時:

  • 先從 pool 拿一個 free frame,立即把新頁讀進來
  • 同時才慢慢把 victim 寫出去

Process 可以更早 restart,不用等 victim 寫完

也就是讓 swap out, swap in 變成 asynchornous


2. 維護 modified pages 的清單

問題:Dirty page 在被 replace 時才寫回,增加延遲。

解法:當 paging device 閒置時,OS 主動把 modified pages 寫回 disk,並重置其 modify bit

→ 未來這些頁面若被選為 victim,就不需要再寫一次(already clean),減少 page fault 的 I/O 時間


3. Free frame pool + 記住每個 frame 裡放的是哪頁

問題:Free frame pool 中的 frame 雖然「空閒」,但資料其實還在裡面,沒有被清除。

解法:記錄每個 free frame 原本存的是哪個 page。發生 page fault 時:

  • 檢查想要的頁面是否剛好還在 free frame pool 裡
  • 如果有 → 直接用,不需要讀 disk(省掉一次 I/O!)
  • 如果沒有 → 才選一個 free frame 重新讀入