Page-Buffering Algorithms
Page-buffering algorithms 有三個策略:
1. 保留一個 free frame pool
問題背景:標準的 page replacement 流程是:
- 選出 victim frame
- 把 victim 寫回 disk(若 dirty)
- 讀入新頁面
這樣要等兩次 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 重新讀入