# Demand Paging
## 定義
1. 一個page,當有需要的時候,才load到memory裏頭
- 減少I/O
- 減少對memory的需求,能有更多的user
2. 一個page被需要時機為,當有==reference==指到它
- invalid reference -> abort
- not in memory -> page fault
3. pure demand paging
- Start a process with ==no== page
- 只有被需要才送到memory
4. prepaging
- 預測哪些page將被使用,將他們置換進來
- 避免pure demand paging一開始大量的page fault
## Support
1. ==Swapper==(midterm scheduler)管理整個process
2. ==Pager==管理一個process中的各個page
3. Hardware
- ==Page Table==:valid-invalid bit (in or not in memory)
- ==Secondary memory==(swap space, backing store):disk
## Page Fault
Note:page fault OS造成的;segmentation fault user造成的
第一次reference會引發trap給OS(page fault trap)
### STEP
1. OS查看PCB所指到的page table
- Invalid reference -> abort
- not in memory -> continue
2. 找一個空的frame
3. 將page從disk swap進frame
4. 重設page table,valid bit = 1
5. 重新執行指令

## Page Replacement
發生page fault,但是沒有free frame時,需要置換
### STEP
1. swap一個frame回去backing store(replacement algorithms)
2. swap目標page進來frame
## Demand Paging Performance
### Effective Access Time (EAT): (1 – p) x ma + p x pft
1. Parameter
- p:page fault rate
- ma:mem. access time
- pft:page fault time
2. 存取時間會正比於page fault time(因為page fault time所花時間大)
3. program通常都是locality的reference(access在附近的memory) ---> 一個page fault會帶進4KB的memory content,降低page fault發生的機會
4. page fault time的組成
- page-fault ==interrupt==
- **read page from disk最耗時**
- restart process