ํฐ์คํ ๋ฆฌ ๋ทฐ
์ปค๋๋ก ๋ค์ด๊ฐ๋ ์๊ฐ๋ถํฐ Page Fault๊น์ง
Horang๐ฏ 2026. 2. 27. 00:220. ๋ค์ด๊ฐ๊ธฐ
์ด์์ฒด์ ๋ฅผ ๋ณด๋ฉด ์ฉ์ด๊ฐ ํ ๋ฒ์ ๋ฑ์ฅํ๋ค.
- interrupt, system call, exception
- page table, TLB, page fault
- swap, thrashing, working set
์ด ๊ธ์ ๊ฐ๋ ์ ๋์ดํ๊ธฐ๋ณด๋ค, ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๋ฉฐ ์ ๋ฆฌํ๋ ๊ฑธ ๋ชฉํ๋ก ํ๋ค.
1. ์ปค๋๋ก ๋ค์ด๊ฐ๋ ์ฌ๊ฑด์ 3๊ฐ์ง๋ก ๋ฌถ์ธ๋ค
CPU๋ ์๋ ๋ช ๋ น์ด๋ฅผ ์์๋๋ก ์คํํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ค ์๊ฐ์๋ ์คํ์ด ๋๊ธฐ๊ณ ์ปค๋ ์ฝ๋๊ฐ ์คํ๋๋ค.
์ด ์ฌ๊ฑด์ ํฌ๊ฒ 3๊ฐ์ง๋ค.
1.1. Hardware Interrupt (์ธ๋ถ์์ ๋ค์ด์ด)
- ์ธ๋ถ ์ฅ์น/ํ์ด๋จธ/I/O ์๋ฃ/์ ๋ ฅ ๊ฐ์ ์ด๋ฒคํธ๊ฐ ์์ธ์ด๋ค.
- ๋น๋๊ธฐ(asynchronous) ์ฑ๊ฒฉ์ด๋ผ ํ์ฌ ์ฝ๋ ํ๋ฆ๊ณผ ๋ฌด๊ดํ๊ฒ ๋ค์ด์ฌ ์ ์๋ค.
- interrupt handler๊ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ, ์ ํต์ ์ผ๋ก ISR์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
1.2. System Call (์์ฒญํด์ ๋ค์ด๊ฐ)
- ์ ์ ํ๋ก๊ทธ๋จ์ด ํ์ผ/๋คํธ์ํฌ ๊ฐ์ ์ปค๋ ๊ธฐ๋ฅ์ ์์ฒญํ ๋ ๋ฐ์ํ๋ค.
- ๋๊ธฐ(synchronous)์ด๊ณ ์๋์ ์ธ ์ง์ ์ด๋ค.
- syscall(trap) entry๋ก ์ปค๋์ ๋ค์ด๊ฐ syscall handler๊ฐ ์๋น์ค๋ฅผ ์ํํ๋ค.
1.3. Exception (ํฐ์ ธ์ ๋ค์ด๊ฐ)
- ํ์ฌ ๋ช ๋ น์ด ์ ์ ์ํ๋ ์ ์์ ๋ ์ปค๋์ด ๊ฐ์ ํ๋ค.
- ๋๊ธฐ(synchronous)์ด๊ณ ๋ณดํต ๋น์๋์ ์ด๋ค.
- ๋ํ ์์๊ฐ page fault๋ค. (+ 0์ผ๋ก ๋๋๊ธฐ ๋ฑ)
2. ๊ณตํต ํ๋ฆ: Save → Enter → Handle → Return
์ธ ๊ฐ์ง ์ฌ๊ฑด์ ์ปค๋์ ๋ค์ด๊ฐ ๋ ๋น์ทํ ๊ณจ๊ฒฉ์ ๋ฐ๋ฅธ๋ค.
2.1. Step 1) Context Save(๋ฌธ๋งฅ ์ ์ฅ)
์ปค๋ ํธ๋ค๋ฌ๋ก ์ ํํ๋ฉด ์๋ ์คํ ์์น๋ฅผ ์๋๋ค.
๊ทธ๋์ ๋ณต๊ท์ ํ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
2.1.1. ๋ํ์ ์ผ๋ก ์ ์ฅ๋๋ ๊ฒ
- PC/IP: ๋ค์์ ์คํํ ๋ช ๋ น ์ฃผ์(๋ณต๊ท ์ฃผ์)
- processor state/flags: ์ธํฐ๋ฝํธ enable ๋ฑ CPU ์ํ
- general registers(ํ์๋ถ)
2.1.2. ๋ณด๊ฐ(์ผ๋ฐ ์ง์)
- ์ ์ฅ ๋ฒ์๋ CPU/OS ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์๋ค.
- ๊ตฌํ์์ผ๋ก๋ ์ปค๋์ด ํต์ ํ๋ ์์ญ(์ปค๋ ์คํ/์ปค๋ ์ปจํ ์คํธ)์ ์ ์ฅํ๋ ์ค๊ณ๊ฐ ํํ๋ค.
2.2. Step 2) Handler๋ก ์ง์ (๋ฒกํฐ/์ํธ๋ฆฌ ๊ธฐ๋ฐ)
์ฌ๊ฑด ์ข ๋ฅ์ ๋ง๋ ์ปค๋ ์ง์ ์ ์ผ๋ก ๋ค์ด๊ฐ๋ค.
- ํ๋์จ์ด ์ธํฐ๋ฝํธ: interrupt vector → interrupt handler(ISR)
- ์์ธ(page fault ํฌํจ): exception vector → exception handler
- ์์คํ ์ฝ: syscall/trap entry๋ก ์ง์ ํ syscall number๋ก ์๋น์ค ๋์คํจ์น
2.3. Step 3) Handler ์คํ
๊ฐ handler๊ฐ ๋งก์ ์ผ์ ์ํํ๋ค.
2.4. Step 4) Return ๋๋ Retry
๋๋ถ๋ถ์ ๋ฌธ๋งฅ ๋ณต์ ํ ์๋ ์ฝ๋๋ก ๋ณต๊ทํ๋ค.
page fault๋ ํ์ด์ง๋ฅผ ์ฌ๋ฆฐ ๋ค, ์คํจํ๋ ๋ช ๋ น์ ๋ค์ ์คํ(retry)ํ๋ ํ๋ฆ์ด ํน์ง์ด๋ค.
3. [์์]: ํ์ผ ์ฝ๊ธฐ๋ ์ system call์ธ๊ฐ?
์ฑ์์ ํ์ผ์ ์ฝ์ ๋ ์ ์ ๋ชจ๋์์ ๋์คํฌ/ํ์ผ ์์คํ ๋ด๋ถ์ ์ง์ ์ ๊ทผํ ์ ์๋ค.
๊ทธ๋์ read ๊ฐ์ ์์ฒญ์ ์์คํ ์ฝ์ ํตํด ์ปค๋๋ก ๋ค์ด๊ฐ๋ค.
3.1. ํ๋ฆ
- ์์คํ ์ฝ๋ก ์ปค๋ ์ง์
- ์ปค๋์ด ๊ถํ/์ ํจ์ฑ ๊ฒ์ฌ
- ํ์ผ ์์คํ ์ฝ๋๊ฐ I/O ์ํ
- ๊ฒฐ๊ณผ ๋ฐํ
4. ๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ก ๋์ด๊ฐ๊ธฐ (page fault๋ฅผ ์ดํดํ๋ ค๋ฉด)
page fault๋ ์์ธ์ ํ ์ข ๋ฅ์ด๊ณ , ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๋ณํ ๊ณผ์ ์์ ๋ฐ์ํ๋ค.
๋ฐ๋ผ์ ๊ฐ์์ฃผ์๊ฐ ์ด๋ป๊ฒ ๋ฌผ๋ฆฌ์ฃผ์๋ก ๋ฐ๋๋์ง๋ถํฐ ์ ๋ฆฌํด์ผ ํ๋ค.
5. ๊ฐ์๋ฉ๋ชจ๋ฆฌ: ์ฃผ์๋ [VPN | offset]์ผ๋ก ํด์๋๋ค
ํ์ด์ง ๋จ์๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ฃผ์๋ ์ด๋ ๊ฒ ๋๋๋ค.
5.1. VPN๊ณผ offset
- VPN(๊ฐ์ ํ์ด์ง ๋ฒํธ): ๋ช ๋ฒ์งธ ํ์ด์ง์ธ๊ฐ
- ํ์ด์งํ ์ด๋ธ์ด ํ๋ ์ผ์ VPN์ PFN์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ
- offset์ “๊ทธ ํ์ด์ง ์์์์ ์์น”๋ผ์ PFN์ด ๋ฐ๋์ด๋ ๊ทธ๋๋ก ๋ถ๋๋ค
5.2. ํ์ด์ง ํฌ๊ธฐ๊ฐ 4KB๋ผ๋ฉด (1kb = 1024)
- offset ๋ฒ์๋ 0~4095
- VPN = ์ฃผ์ / 4096, offset = ์ฃผ์ % 4096 (๋ชซ/๋๋จธ์ง)
5.3. ํ์ด์ง์ ํ๋ ์ offset์ด ๊ทธ๋๋ก์ธ ์ด์
ํ์ด์ง/ํ๋ ์ ํฌ๊ธฐ๊ฐ ๊ฐ์์ ํ์ด์ง ๋ด๋ถ ์์น๊ฐ ์ ์ง๋๊ธฐ ๋๋ฌธ์ด๋ค.
6. Page / Frame / Page Table / TLB
6.1. Page์ Frame์ ์ฐจ์ด
๊ฐ์๋ฉ๋ชจ๋ฆฌ์์ Page์ Frame์ “์ด๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณด๋๋”๊ฐ ๋ค๋ฅด๋ค.
- Page(ํ์ด์ง)
- ํ๋ก์ธ์ค๊ฐ ๋ณด๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ผ์ ํฌ๊ธฐ๋ก ๋๋ ์กฐ๊ฐ
- “๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์์์ ๋จ์”
- Frame(ํ๋ ์)
- ์ค์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ(RAM) ๋ฅผ ๊ฐ์ ํฌ๊ธฐ๋ก ๋๋ ์นธ
- “RAM์์์ ๋จ์”
๋์ ๊ด๊ณ๋ ๋ค์์ฒ๋ผ ๊ธฐ์ตํ๋ฉด ๋๋ค.
- ํ์ด์ง๋ “๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์กฐ๊ฐ”
- ํ๋ ์์ “RAM ์นธ”
- ํ์ด์ง ํ๋๊ฐ ํ๋ ์ ํ๋์ ์ฌ๋ผ๊ฐ๋ค(ํฌ๊ธฐ๊ฐ ๊ฐ๊ธฐ ๋๋ฌธ)
6.2. Page Table
ํ์ด์งํ ์ด๋ธ์ ๋งคํ/์ํํ๋ค.
- VPN → PFN(๋ฌผ๋ฆฌ ํ๋ ์ ๋ฒํธ) ๋งคํ
- valid/present(๋ฉ๋ชจ๋ฆฌ์ ์๋)
- ๊ถํ(R/W/X, user/kernel)
6.3. TLB
์ฃผ์ ๋ณํ ๊ฒฐ๊ณผ(VPN→PFN)๋ฅผ ์บ์ํด ๋ ๋ฒํผ๋ค.
- hit๋ฉด ๋ฐ๋ก ๋ณํ
- miss๋ฉด page table์ ์กฐํํ๋ค
7. TLB miss์ Page Fault
7.1. TLB miss
- ๋ณํ ์บ์์ ์๋ค๋ ๋ป์ด๋ค.
- page table ์กฐํ๋ก ์ด์ด์ง๋ค.
- ์ด ์์ฒด๋ก RAM์ ํ์ด์ง๊ฐ ์๋ค๊ณ ๋จ์ ํ ์ ์๋ค.
7.2. Page fault
page table์ ๋ดค๋๋
- valid=0(= RAM์ ์์) ์ด๊ฑฐ๋
- ๊ถํ ์๋ฐ์ด๋ฉด
- ์ปค๋ ์์ธ ์ฒ๋ฆฌ ๊ฒฝ๋ก๋ก ์ง์ ํ๋ค.
8. ์์: page fault๋ ์ด๋ค ์๊ฐ์ ํฐ์ง๋?
8.1. ํ๋ฆ
- CPU๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์๋
- TLB miss → page table ์กฐํ
- valid=0 → page fault ๋ฐ์ → ์ปค๋ ์ง์
- swap-in(ํ์ํ๋ฉด swap-out)
- page table/TLB ๊ฐฑ์
- ์คํจํ๋ ๋ช ๋ น์ retry
9. swap๊ณผ thrashing
page fault๊ฐ “๋๋ฌด ์์ฃผ” ๋ฐ์ํ๋ฉด ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋๋ค.
9.1. swap-in / swap-out
- RAM์ ์๋ฆฌ๊ฐ ์์ผ๋ฉด swap-in
- ์์ผ๋ฉด victim ์ ํ → swap-out → swap-in
9.2. thrashing
- page fault ํญ์ฆ → swap I/O ๋๊ธฐ ์ฆ๊ฐ
- CPU๊ฐ ๊ณ์ฐ๋ณด๋ค ๋๊ธฐ๋ฅผ ๋ ๋ง์ด ํ๊ฒ ๋๋ ์ํ
9.3. working set / PFF
- working set: ์ต๊ทผ Δ ๋์ ์ค์ ๋ก ์ฐธ์กฐํ ํ์ด์ง ์งํฉ
- PFF: page fault ๋น๋๋ก ํ๋ ์์ ์กฐ์
- PFF ๋์ → ํ๋ ์ ๋๋ฆผ(๋๋ ๋ถํ ์กฐ์ )
- PFF ๋ฎ์ → ํ๋ ์ ํ์/์ฌ๋ถ๋ฐฐ
10. ๋ง๋ฌด๋ฆฌ
์ ๋ฆฌํ๋ฉด์ ๊ฒฐ๊ตญ ์ค์ํ ๊ฑด “์ฉ์ด”๊ฐ ์๋๋ผ ํ๋ฆ์ด์๋ค.
CPU๊ฐ ์ปค๋๋ก ๋ค์ด๊ฐ๋ ์๊ฐ์ ํ๋์จ์ด ์ธํฐ๋ฝํธ / ์์คํ ์ฝ / ์์ธ๋ก ๋๋ ์ ๋ณด๋,
๊ฐ๊ฐ์ด ์ ๋ค๋ฅด๊ฒ ๋์ํ๋์ง(๋น๋๊ธฐ vs ๋๊ธฐ)๊ฐ ํ ๋ฒ์ ์ ๋ฆฌ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ ์ด ํ๋ฆ ์์ ๊ทธ๋๋ก ์นํ ์์๋ค.
TLB miss → page table → (valid=0์ด๋ฉด) page fault → swap → retry๋ก ์ด์ด์ง๋ ํ ์ค์ด ์กํ๋๊น,
TLB miss์ page fault๋ฅผ ์์ด ๋ณด๋ ์ง์ ๋ ์์ฐ์ค๋ฝ๊ฒ ํ๋ ธ๋ค.
๋ง์ง๋ง์ผ๋ก thrashing / working set / PFF๋
“๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๋ OS๊ฐ ์ด๋ป๊ฒ ๋ฌด๋์ง๊ณ , ๋ ์ด๋ป๊ฒ ๋ฒํฐ๊ฒ ๋ง๋๋๊ฐ”๋ฅผ ์ค๋ช ํ๋ ๊ฐ๋ ์ด๋ผ๋ ๊ฑธ ์๊ฒ ๋๋ค.
์ด์ ๋ ์๋ก์ด ํค์๋๋ฅผ ์ธ์ฐ๊ธฐ๋ณด๋ค,
์ปค๋ ์ง์ → ์ฃผ์ ๋ณํ → fault ์ฒ๋ฆฌ → ์ฑ๋ฅ ๋ถ๊ดด/์ํ
์ด ํ๋ฆ์ผ๋ก ์ดํด๋ฅผ ํ์ฅํด๋ณด๋ ค ํ๋ค.

- cs
- xcode26.3
- speculative
- page fault
- BOJ
- ์์ง๋์ด
- Jetsam
- ์คํฐ๋
- cpu
- Xcode
- Memory
- TLB
- spatial locality
- ๊ฐ๋ฐ์
- tipkit
- 2025๋ ํ๊ณ
- ๋ชจ๋ฐ์ผ์์ง๋์ด
- C++
- ์๋ฃ ๊ตฌ์กฐ
- temporal locality
- Meet agentic coding in Xcode
- Swift
- 2026๋ ๊ณํ
- ํ๊ณ
- misprediction
- branchless
- IOS
- ์คํ
- 24๋ ํ๊ณ
- ํ
- Total
- Today
- Yesterday