Thrashing

How it happens?

OS 認為:「當 CPU 的使用率低,代表 CPU 都閒著,所以不如塞入更多 process」

然而,CPU 使用率太低不一定是因為 process 少,有可能是因為每個 process 都在等 page fault handling

如此導致一個惡性循環:

  1. 一個 process 需要某個 page 不在記憶體觸發 page fault
  2. OS 為了 swap in 需要 swap out,I/O 時間長造成 CPU 利用率低
  3. OS 覺得 CPU 太閒又塞入新的 process
  4. page fault rate 升高,更容易 page fault
  5. 於是 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

Comparison

Comparison: Working-Set Strategy vs. PFF