Demand Paging

Basic Concept

swapping with paging 雖然解決了 contiguous memory allocation 需要連續記憶體的問題,但是每次 swap out 還是得將整個分配給 process 的記憶體搬出去,不管有沒有被用到

Demand paging 就是為了解決這個問題,它的想法是:我們只將被 process 需要的 page swap in 進來

Advantage

  • 減少不必要 I/O(因為 swap in/out 的 page 數量減少
  • 節省記憶體(memory 只放 process 真正需要的 page)
  • 啟動更快(只需要將程式剛開始的需要的 data 放進 memory 就好)
  • 可以同時支援更多使用者(因為每個 process 同時需要的記憶體減少)

How it works

當發生 D-OS-Ch10ba-Page_Fault 時:

  1. frame ID ≠ 0:該 page 目前在 backing store 裡(page fault)
  2. frame ID = 0:此 page ID 根本不合法
  • 如果是情況一,就 trap in kernel 將對應的 page swap in(page fault handling
  • 如果是情況二,就報錯

Locality of Reference

Problem

如果每次執行 instruction 都可能需要存取多個 new page,那不就會一直 page fault,讓效能變超爛

Explanation

實際上程式執行的行為高度集中——在某段時間內,程式傾向於反覆存取同一小塊的記憶體區域。因此,當某個 page 被 swap in 後,短時間內會被頻繁使用,page fault 會比理論最壞情況低很多