Thrashing
How it happens?
OS 認為:「當 CPU 的使用率低,代表 CPU 都閒著,所以不如塞入更多 process」
然而,CPU 使用率太低不一定是因為 process 少,有可能是因為每個 process 都在等 page fault handling
如此導致一個惡性循環:
- 一個 process 需要某個 page 不在記憶體觸發 page fault
- OS 為了 swap in 需要 swap out,I/O 時間長造成 CPU 利用率低
- OS 覺得 CPU 太閒又塞入新的 process
- page fault rate 升高,更容易 page fault
- 於是 CPU 更閒了
Locality
程式在執行時不會隨機存取所有 page 而是在短時間內只會頻繁使用一小組 page。在程式推進的過程中他會從一個 locality 移動另一個 locality,且不同 locality 可能重疊(e.g., share page)
而 Thrashing 發生的原因可以用以下式子解釋:
一個緩解方式是用 local replacement,但這會造成 frame 閒置
Way to Avoid Thrashing
Working Set
D-OS-Ch10fda-Working-Set_Strategy
Page Fault Frequency (PFF)
D-OS-Ch10fdb-Page_Fault_Frequency