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

- 先確認 page fault 是因為訪問 invalid address 還是 page 在 backing store
- 如果是前者的話直接報錯
- 如果是後者的話就繼續下面步驟
- 從 physical memory 找一個 free frame(如果沒有要做 page replacement)
- 透過 I/O request 將目標從 swap space 搬移到該 free frame
- 更新 page table
- 把該 page 指向剛分配的 frame
- 把 valid-invalid bit 設為 v
- 重新執行當初造成 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 內容清乾淨