[OS] Virtual Memory
3๋ ๊ฐ ์ฐ์ ๊ธฐ๋ฅ์์์ผ๋ก ๋ณต๋ฌด ํ๊ณ , ๋ณตํํด ์ปด๊ณต๊ณผ ์์ ์ ๋ฃ๊ณ ์์ต๋๋ค. ๊ทธ๋์ ๋ง์ด ๋ฐฐ์ ๋ค๊ณ ์๊ฐํ๋๋ฐ, ์ฌ์ ํ ๋ถ์กฑํ ๋ถ๋ถ์ด ๋ง๋ค์ ^^;; ์ญ์ ์ธ์๋ ๋๊ณ ๊ณต๋ถ์ ๊ธธ๋ ๋์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ค์ด๊ฐ๋ฉฐ
์ ํฌ์คํธ๋ ์ด์์ฒด์ ๋ฅผ ๊ณต๋ถํ๋ฉด์ ์งง๊ฒ ๋ฉ๋ชจ ํ๋ ๊ฒ๋ค์ ๋ชจ์ ๊ธ ์ ๋๋ค. OS ๋ด์ฉ์ ๋ณต์ตํ๋ฉด์ ์ดํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค ๐
Interrupt Frame
Interrupt๊ฐ ๋ฐ์ํ๋ฉด, ์คํ ์ค์ธ ์ฐ๋ ๋๋ CPU ์์์ Kernel(Interrupt Handler)์๊ฒ ๋บ์ด๊ฒ ๋ฉ๋๋ค. ์ด๋, ์ฐ๋ ๋๋ Interrupt ๋ฐ์ ๋น์์ ๋ ์ง์คํฐ ๊ฐ๋ค์ ๋ชจ๋ Memory์ ์ ์ฅํด๋์ด์ผ ํฉ๋๋ค.
์ด๋, ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ โInterrupt Frameโ ์ ๋๋ค! Pintos P2์์ ๋ง์ด ๋ค๋ฃฌ ๋ ์์ด์ฃ !
Gate Mechanism
โsunshoutโ๋์ โ[Gate] Task Gate, Trap Gate, Interrupt Gate, Call Gateโ ๊ธ์ด ๊ฐ๋ ์ ์ดํดํ๋๋ฐ ๋์์ด ๋์์ต๋๋ค.
๋ฎ์ ํน๊ถ(Ring 3)์์ ๋์ ํน๊ถ(Ring 0)์ผ๋ก ์ ํํ๋ ํต๋ก(Gate)
- Trap Gate
- System call์ด ์ ๋ฐฉ์์.
- Exception Handling๋ ์ ๋ฐฉ์์.
- ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ๋์ค์ ๋ค๋ฅธ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ์ฌ ์ค์ฒฉ ๋ ์ ์์!
- Interrupt Gate
- ํ๋์จ์ด์ ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํจ.
- Interrupt Flag๋ฅผ ๋นํ์ฑํ ํ์ฌ, ์ถ๊ฐ์ ์ธ ์ธํฐ๋ฝํธ๋ฅผ ๋ฐฉ์งํจ.
- ์๋ํ๋ฉด, ํ๋์จ์ด ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ ๋, ์ธํฐ๋ฝํธ ์ค์ฒฉ์ ๋ฐฉ์งํด์ผ ํ๊ธฐ ๋๋ฌธ์!
Virtual Memory
Segment ๊ธฐ๋ฒ์ด๋ Paging ๊ธฐ๋ฒ์ด๋ Code์ Data ์์ญ์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๊ณต์ ๊ฐ๋ฅํจ. ๊ทธ๋ฐ๋ฐ, Stack ์์ญ์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๊ณต์ ๋ถ๊ฐ์!
System Call for Heap Allocation
int brk(void *addr)
- ํ ์์ญ์ ๋์ ์ง์ ๋ ์ฃผ์๋ก ํ์ฅ
void sbrk(intptr_t increment)
- ํ์ฌ ํ์ break๋ฅผ ๊ธฐ์ค์ผ๋ก increment ํฌ๊ธฐ ๋งํผ ํ์ ํ์ฅํ๊ฑฐ๋ ์ถ์ํจ.
โbreakโ๋? ํ ์์ญ์ ๋์ ๋งํจ. ์ด ์ฃผ์๋ฅผ ์กฐ์ ํด ํ ์์ญ์ ํ์ฅํ๊ฑฐ๋ ์ถ์ํจ.
malloc()
๊ณผ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํจ์๋ ๋ด๋ถ์ ์ผ๋ก brk
sys call์ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค๊ณ ํจ. ๊ทธ๋ฌ๋ brk
, sbrk
๋ฅผ ์ง์ ํธ์ถํ๋ ๊ฑด ๊ถ์ฅ๋์ง ์์!
UNIX fork
process์์ fork()
๋ฅผ ์คํํ๋ฉด, ๋ชจ๋ ๊ฒ์ด ๋๊ฐ์ ๋ณต์ ๋ณธ์ ๋ง๋ฆ. ์์๋ ์๋์ ๊ฐ์.
- ๋ถ๋ชจ์ Segment Table์ ์์์๊ฒ Copy
- ์ฆ, ๋ฉ๋ชจ๋ฆฌ ์์ผ๋ก๋ ์๋ฌด๋ฐ Copy๊ฐ ์ผ์ด๋์ง ์์.
- ๊ณต์ ์ค์ธ ๋ถ๋ชจ์ ์์์ ๋ชจ๋ ์ธ๊ทธ๋จผํธ๋ฅผ RO ๊ถํ์ผ๋ก ๋ณ๊ฒฝ
- ์์ ํ๋ก์ธ์ค ์์
- ๋ง์ฝ ์์/๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์ด๋ค ์ธ๊ทธ๋จผํธ(stack, heap)๋ write ์์
์ด ์ผ์ด๋๋ค๋ฉด
- Trap into OS Kernel
- Trap(Exception) Handler๊ฐ ํธ๋ค๋ง ํ๋ฉด์ ํด๋น ์ธ๊ทธ๋จผํธ์ ๋ํ Copy ๋ณธ์ ๋ง๋ค๊ณ ์คํ์ ์ด์ด๊ฐ.
์๊ฒ Paging ๋ฒ์ ์ผ๋ก ๋ฐ๋์ด๋ ๋น์ทํจ.
- ๋ถ๋ชจ์ Page Table์ ์์์๊ฒ Copy
- ๊ณต์ ์ค์ธ ๋ถ๋ชจ์ ์์์ ๋ชจ๋ Page๋ฅผ RO ๊ถํ์ผ๋ก ๋ณ๊ฒฝ
- ์์ ํ๋ก์ธ์ค ์์
- ๋ง์ฝ ์์/๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์ด๋ค Page(stack, heap)๋ write ์์
์ด ์ผ์ด๋๋ค๋ฉด
- Trap into OS Kernel
- Trap(Exception) Handler๊ฐ ํธ๋ค๋ง ํ๋ฉด์ ํด๋น Page์ ๋ํ Copy ๋ณธ์ ๋ง๋ค๊ณ ์คํ์ ์ด์ด๊ฐ.
Zero-on-reference
๊ทธ๋ฅ Stack ํ์ฅ์ด ์ผ์ด๋ ๋, ์๋ก ํ ๋น ๋ฐ์ ์์ญ์ ์ฒ์์ 0์ผ๋ก ์ด๊ธฐํ ํ๋ค๋ ๋ง์.
์ด์ ๋ ์ฐ์ฐํ๋ผ๋ ์ ๋ณด๊ฐ ์ ์ถ๋๋ ๊ฑธ ์ํ์ง ์์์, ์ฐธ์กฐ ์ ์ 0์ผ๋ก ์ด๊ธฐํ ํ๋ ๊ฒ์.
Big Page: Pros & Cons
[์ฅ์ ]
- ํ์ด์ง ํ
์ด๋ธ ํฌ๊ธฐ๊ฐ ๊ฐ์
- PTE ๊ฐฏ์๊ฐ ์ค๊ธฐ ๋๋ฌธ
- ๋์คํฌ I/O ํจ์จ์ฑ ์ฆ๊ฐ
- Page Fault ๋ฐ์์ ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ด
- TLB ํํธ์จ ์ฆ๊ฐ
- ์ ์ฅ๋ ํ์ด์ง๊ฐ ๋ ๋์ ์ฃผ์๋ฅผ ์ปค๋ฒํ๋ฉด์, TLB์์ ๋ ๋ง์ ์ฃผ์๋ฅผ ์กฐํํ ์ ์์
[๋จ์ ]
- ๋ด๋ถ ๋จํธํ๊ฐ ์ปค์ง
- ๊ฐํ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ์ํด ํฐ ํ์ด์ง๋ฅผ ๋ก๋ ํด์ผ ํจ
- Page Fault ์ฒ๋ฆฌ๊ฐ ๋๋ ค์ง
- ๋์คํฌ I/O๋ก ๋ถ๋ฌ์ฌ ๋ฐ์ดํฐ๊ฐ ๋ ๋ง์์ ธ์
Big Virtual Address: Pros & cons
โSparse Address Spaceโ, ์ฃผ์ ๊ณต๊ฐ์ด ์ฐ์์ ์ด์ง ์๊ณ ๋๋ฌธ๋๋ฌธ ์กด์ฌํด์ผ ํ๋ ์ด์ ์ ๋ํด์ ์ ๋๋ฆ ๋๋ก ์ดํด ํด๋ณธ ๋ด์ฉ์ ๋๋ค.
[ํ์์ฑ]
- per-thread stacks
- ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ ๊ฐ ์ฐ๋ ๋๋ ๋ ๋ฆฝ์ ์ธ ์คํ ๊ณต๊ฐ์ ํ์๋ก ํฉ๋๋ค.
- ๊ฐ ์ฐ๋ ๋์ ์คํ ๊ณต๊ฐ์ด ๊ฒน์น์ง ์๊ธฐ ์ํด์ ์ฃผ์ ๊ณต๊ฐ์ด ์ถฉ๋ถํ ๋์ด์ผ ํฉ๋๋ค.
- Memory-mapped files
- ํ์ผ์ ๋ด์ฉ์ ์ ์ ์ฃผ์ ๊ณต๊ฐ์ ๋งคํํ ๋, ์ฃผ์ ๊ณต๊ฐ์ด ์ถฉ๋ถํ ๋์ด์ผ ํฉ๋๋ค.
- ๊ทธ๋์ผ ํ์ผ ํฌ๊ธฐ๊ฐ ์ปค๋ ๊ทธ๊ฒ์ ์ ์ ๊ณต๊ฐ์ ๋งคํํ ์ ์์ต๋๋ค.
[๋จ์ ]
- ํ์ด์ง ํ
์ด๋ธ ์ฌ์ด์ฆ๊ฐ ์์ฃผ ์ปค์ง
- PTE ๊ฐฏ์๊ฐ ์์ฃผ ๋ง์์ง๊ธฐ ๋๋ฌธ
[ํด๊ฒฐ๋ฐฉ๋ฒ]
- ๋ค๋จ๊ณ ํ์ด์ง ํ
์ด๋ธ ์ฌ์ฉ
- ํ์ด์ง ํ ์ด๋ธ ์ ์ฒด๋ฅผ Memory์ ์ฌ๋ ค๋ ํ์ ์์.
- ์ง๊ธ ์ฐ๋ ๋ถ๋ถ์ ๋ํ ํ์ด์ง ํ ์ด๋ธ๋ง ์ฌ๋ ค๋๋ ๊ธฐ๋ฒ
- ์ธ๋ฒ์ค ํ์ด์ง ํ
์ด๋ธ
- ํ์ฌ ์ฌ์ฉ ์ค์ธ ํ์ด์ง๋ง ํ ์ด๋ธ์ ์ ์ฅ
x86 Multi-level PAged Segmentation
์ธ๊ทธ๋ฉํ ์ด์ ๊ณผ ๋ค๋จ๊ณ ํ์ด์ง ํ ์ด๋ธ์ ๊ฒฐํฉํ ๊ธฐ๋ฒ์. (์์ฃผ ๋ณด์ด๊ฒ ๋๋ x86๋ Intel ๋ชจ๋ธ์์ ๋์ ๋์๋ค๋ ๋ป)
- Global Descriptor Table (GDT)
- ์ธ๊ทธ๋จผํธ ํ ์ด๋ธ์
- ๊ฐ ํ์ ๋ด๊ธด ์ ๋ณด๋ ์๋์ ๊ฐ์.
- ๊ฐ ์ธ๊ทธ๋จผํธ ๊ด๋ฆฌํ๋ ํ์ด์ง ํ ์ด๋ธ์ ํฌ์ธํฐ๋ฅผ ๊ฐ๋ฆฌํด
- ์ธ๊ทธ๋จผํธ์ ๊ธธ์ด
- ์ธ๊ทธ๋จผํธ์ ์ ๊ทผ ๊ถํ (RWXA)
- GDTR(GDT Registry)๋ผ๋ ๋ ์ง์คํฐ์ ์ ์ฅ๋ ํฌ์ธํฐ๋ฅผ ๋ณ๊ฒฝํจ์ผ๋ก์จ ๋ค๋ฅธ ํ๋ก์ธ์ค์ GDT๋ก ์ ํ๋จ.
- Context Switch ๊ณผ์ ์ ์ GDTR ๋ ์ง์คํฐ์ ํฌ์ธํฐ๊ฐ ๋ฐ๋๋ ๊ฒ์.
- Multi-level Page Table
- ํ์ด์ง ํฌ๊ธฐ๋ 4 Kb ($2^12$)
- ํ์ 12 ๋นํธ๊ฐ offset bit๋ก ์ฌ์ฉ๋จ.
- 32-bit ์์คํ
์ 2๋จ๊ณ ํ์ด์ง ํ
์ด๋ธ๋ก ๋๋
- $2^{32} = 2^{10} \cdot 2^{10} \cdot 2^{12}$
- 64-bit ์์คํ
์ 4๋จ๊ณ ํ์ด์ง ํ
์ด๋ธ๋ก ๋๋
- $2^{64} = 2^{16} \cdot (2^{9} \cdot 2^{9} \cdot 2^{9} \cdot 2^{9}) \cdot 2^{12}$
- ์ฒซ 16 ๋นํธ๋ Unused bit์.
- ์๊ธฐ ๋ค์ด์ด๊ทธ๋จ์ ์ฐธ๊ณ ํ ๊ฒ
- $2^{64} = 2^{16} \cdot (2^{9} \cdot 2^{9} \cdot 2^{9} \cdot 2^{9}) \cdot 2^{12}$
- ํ์ด์ง ํฌ๊ธฐ๋ 4 Kb ($2^12$)
Kernel Memory is not swapped out
์ปค๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ Demand Paging์ ๋์์ด ๋์ง ์์ต๋๋ค. ์ฆ, ์ง๊ธ๊น์ง Paging๊ณผ ๊ด๋ จ๋์ด ์ดํด๋ณธ ๋ชจ๋ ๊ฒ์ User ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ํ ํ ํฌ๋ ์ ๋๋ค.
์ปค๋์ ๋์์ ํญ์ ์ ์ํ๊ฒ ์ํ ๋์ด์ผ ํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ๋ด๋ฆฌ๊ฑฐ๋ ์ฌ๋ฆฌ๋ Demand Paging ๊ธฐ๋ฒ์ ์ปค๋ ๋์์ ๋๋ฆฌ๊ฒ ๋ง๋ค์ด ์ ์ฒด ์์คํ ์ ํผํฌ๋จผ์ค๋ฅผ ๋จ์ด๋จ๋ฆฌ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์, ์ปค๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผ(resident)ํ๊ฒ ๋ฉ๋๋ค.
Page Address Extension
PAE
Buddy System
Linux์์ ์ปค๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉํจ.
๋ฉ๋ชจ๋ฆฌ๋ฅผ 2์ ์ ๊ณฑ ํฌ๊ธฐ๋ก ๋๋์ด ๊ด๋ฆฌํจ.
์์ฒญ ํฌ๊ธฐ์ ๊ฐ์ฅ ๊ฐ๊น์ด 2์ ์ ๊ณฑ ํฌ๊ธฐ๋ฅผ ํ ๋นํ๊ณ , ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ โbuddyโ์ ๋ณํจํ์ฌ ํฐ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ผ๋ก ๋ณต๊ตฌํจ.
์ปค๋์์๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์์ฃผ ์ผ์ด๋๋๋ฐ, ๋น ๋ฅธ ํ ๋น๊ณผ ํด์ ๊ฐ ๊ฐ๋ฅํจ.
๋จ, ๋ด๋ถ ๋จํธํ๊ฐ ๋ฌด์กฐ๊ฑด ๋ฐ์ํจ.
Slab Allocator
์ปค๋ ๊ฐ์ฒด๋ค์ ๋์์ผ๋ก ํฉ๋๋ค.
PCB
๋ inode
์ ๊ฐ์ ์ปค๋ ๊ฐ์ฒด๋ค์ ํ๋ก๊ทธ๋จ์ ์ด์ํ๋ฉด์ ์์ฃผ ํ ๋น ๋๊ฑฐ๋ ํ ๋น ํด์ ๋ฉ๋๋ค. ๋ง์ฝ PCB
ํ๋๋ฅผ ์์ฑํ ๋๋ง๋ค, Page๋ฅผ ํ๋ ํ ๋น ํ๊ฒ ๋๋ค๋ฉด, ์ด๊ฒ์ ๋นํจ์จ์ ์ด๊ณ ๋ด๋ถ ๋จํธํ๊ฐ ์ผ์ด๋๊ฒ ๋ฉ๋๋ค. ๊ทธ๋์ ๊ฐ์ ์ข
๋ฅ์ ๊ฐ์ฒด๋ฅผ ํ๋์ ํ์ด์ง์ ํ ๋นํ ์ ์๋ ์ฌ๋ฉ(slab)์ ์ด์ํฉ๋๋ค.
์์๋ฅผ ํตํด ์ดํด ํด๋ด
์๋ค. ํ์ผ ์์คํ
์์ ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ inode
๋ผ๋ ๊ตฌ์กฐ์ฒด๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ ํฌ๊ธฐ๊ฐ 128 ๋ฐ์ดํธ๋ผ๊ณ ํ๊ฒ ์ต๋๋ค.
๋ง์ฝ Slab Allocator๋ฅผ ์ฌ์ฉํ์ง ์์๋ค๋ฉด, inode
๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ธฐ ์ํ ํ ๋น ์์ฒญ์ ํ ๊ฒ ์
๋๋ค. ๋ฉ๋ชจ๋ฆฌ๋ ๋ฒ๋ ์์คํ
์ ์ํด ํ ๋น ๋๋๋ฐ, inode
๋ 128 ๋ฐ์ดํธ์ด๊ธฐ ๋๋ฌธ์ ์ต์ ๋จ์์ธ 4 Kb์ ํ์ด์ง ํ๋๊ฐ ํ ๋น ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด 3 Kb ์ ๋์ ๋จ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋น ๋๊ณ , ์ด๋ ๋ด๋ถ ๋จํธํ๊ฐ ๋ฉ๋๋ค.
Slab Allocator๋ inode
์ฌ์ด์ฆ์ ๋ง๋ 128 ๋ฐ์ดํธ ํฌ๊ธฐ๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ๋ฏธ๋ฆฌ ์ค๋นํ๊ณ ์ด๋ฅผ โ์ฌ๋ฉโ์ด๋ผ๊ณ ํฉ๋๋ค. ์ฌ๋ฉ์ 4 Kb ํ์ด์ง ํ๋๋ฅผ ์ฌ๋ฌ 128 ๋ฐ์ดํธ ๊ฐ์ฒด๋ก ๋๋์ด ๊ด๋ฆฌํฉ๋๋ค.
์๋ก์ด inode
ํ ๋น ์์ฒญ์ด ๋ค์ด์ค๋ฉด, OS๋ ์ฌ๋ฉ์ ๋ฏธ๋ฆฌ ์ค๋น๋ 128 ๋ฐ์ดํธ ์ฌ๋กฏ์ ํ๋ ๊บผ๋ด๊ณ , ๊ทธ ์ฌ๋กฏ์ inode
๊ฐ์ฒด๋ฅผ ํ ๋น ํฉ๋๋ค.
Buddy System vs. Slab Allocator
Buddy System๊ณผ Slab Allocator๋ ๋ฐฐํ์ ์ด์ง ์๊ณ , ๋์ ๊ฐ์ด ์ฐ๊ธฐ๋ ํฉ๋๋ค.
No Swapping in mobile platform
Android OS์ ๊ฒฝ์ฐ, ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ๋ด์ฉ์ ๋์คํฌ๋ก ๋ด๋ฆฌ๋ Swapping์ ์ฑํํ์ง ์์ต๋๋ค.
๋์ , ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง๋ฉด ํ์ฌ ์คํ๋๋ ์ฑ์ ์ข ๋ฃ ํ๋๋ฐ, ์ข ๋ฃ ์ ์ ์ฑ์ ์ํ๋ค์ Flash ์ ์ฅ์์ ๊ธฐ๋กํ๊ณ , ์ฑ์ ์ฌ์์ ํ์ ๋ Flash ์ ์ฅ์์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ ๋น ๋ฅธ ์ฌ์์์ ์ง์ ํฉ๋๋ค.
TLB Miss Handling
Virtual Memory์ ์ฃผ์ ๋ณํ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ์ง ์๊ณ ๋, ๋ ๋น ๋ฅด๊ฒ ๋ณํํ๊ธฐ ์ํด ๋์ ํ๊ฒ TLB ์บ์์ด๊ณ , ์๊ฑด HW์.
TLB Hit ์ํฉ์์์ผ ๋น์ฐํ TLB ์บ์๊ฐ ๋์์ ์ ํ๊ฒ ์ง๋ง, TLB Miss๊ฐ ๋ฐ์ํ๋ฉด ๊ทธ๋๋ถํฐ ์ํฉ์ด ์ข ๋ณต์กํด์ง.
์ผ๋จ TLB Miss๊ฐ ๋ฐ์ํ๋ฉด, MMU(Memory Management Unit)์์ ํ์ด์ง ํ ์ด๋ธ์ ๋ฉ๋ชจ๋ฆฌ์์ ๊ฒ์ํจ. ์ฃผ์ ๋ณํ์ ์ฑ๊ณต์ ์ผ๋ก ์ํํ๋ฉด ๊ทธ ๊ฐ์ TLB ์บ์์ ์ฑ์๋ฃ์.
๊ทธ๋ฐ๋ฐ, ์ต์ ์ ์ํคํ ์ฒ์์๋ TLB Miss๊ฐ ๋ฐ์ํ๋ฉด, MMU ์ฅ์น๊ฐ ์๋๋ผ โKernel Trapโ์ ๋ฐ์์์ผ์ ์ํํธ์จ์ด(์ปค๋)์ด ์ด๋ฅผ ํธ๋ค๋ง ํ๋๋ก ํ๋ ๊ฒฝ์ฐ๊ฐ ์์!! ์๋ฒ ๋๋ ์์คํ ์๊ณผ, ์ผ๋ถ RISC ์ํคํ ์ฒ์ CPU์์๋ ํ๋์จ์ด ๋ณต์ก์ฑ์ ์ต์ํ ํ๊ธฐ ์ํด ์ด๋ ๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ๋ ์๋ค๊ณ ํจ.
๋ท ๋ด์ฉ์ด ์์ง๋ ๋จ์๋ค๋โฆ 82p๋ถํฐ ๋ณด์!