Page Fault Handling

Occurrence

demand paging 如果 invalid bit 的 frame ID = 0,此時該 page 在 backing store,此時我們就需要 page fault handling 將這個 page 搬到 memory

Steps

  1. 先確認 page fault 是因為訪問 invalid address 還是 page 在 backing store
    • 如果是前者的話直接報錯
    • 如果是後者的話就繼續下面步驟
  2. 從 physical memory 找一個 free frame(如果沒有要做 page replacement
  3. 透過 I/O request 將目標從 swap space 搬移到該 free frame
  4. 更新 page table
  5. 重新執行當初造成 page fault 的 instruction

每次 page fault 如果訪問 invalid address 的話 process 就會從 running state 變成 terminated state;如果是因為 page 在 backing store 就會先到 waiting state 等待 I/O 完成後回到 ready state


Details

Instruction Restart

D-OS-Ch10ca-Instruction_Restart

Free-Frame List

Issue

Page fault 發生時我們需要找到 free frame,但要怎麼找到?

Solution

我們維護一個 linked list 將所有 free frame 接起來,需要 free frame 時就先從這裡拿

free frame 上可能有此 frame 上一個使用者的敏感資料,所以在將 free frame 分配出去前我們會先用 zero-fill-on-demand 將 frame 內容清乾淨