[OS] Operating System(10-1): Virtual Memory, Demand Paging
๐ ์ด์์ฒด์ ์ ๊ณต ์์ ์ ๋ฆฌ
์ฐ๋ฆฌ๊ฐ ์ค์ ๋ก ์ฌ์ฉํ๋ ๋ ผ๋ฆฌ ์ฃผ์๋ ์ฌ์ค ๊ฐ์ ์ฃผ์์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์ด๋ค ํ๋ก๊ทธ๋จ์ ๋๋ฆด ๋ ์ ์ฒด ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ง๋ ์๋๋ค ๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ ํ์ํ ๋ถ๋ถ๋ง ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ!
์ฆ, ํ๋ก๊ทธ๋จ ์ ์ฒด๋ฅผ ๊ฐ์ ธ์ค์ง ๋ง๊ณ ์ผ๋ถ๋ง ๊ฐ์ ธ์จ๋ค
- ๋ฌผ๋ฆฌ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ ์ ๊ฒ ์
- ๊ฐ ํ๋ก๊ทธ๋์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒ ์ฐ๊ธฐ ๋๋ฌธ์ ๋ ๋ง์ ํ๋ก๊ทธ๋จ์ ๋์์ ๊ฐ์ ธ์ฌ ์ ์๋ค
- I/O๋ ์ ๊ฒ ์ฌ์ฉํ๊ฒ ๋๋ค(์ ์ฒด ํ๋ก๊ทธ๋จ์ ๋ก๋ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ)
- ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ํฐ ํ๋ก๊ทธ๋จ๋ ์คํ ๊ฐ๋ฅ
Virtual Memory
๐Virtual Memory: ์ฌ์ฉ์์ ๋ ผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ๋ฆฌํ๋ ๊ธฐ์
- ๋ ผ๋ฆฌ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฌผ๋ฆฌ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ง์ด ์ธ ์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค.
- ์ฌ๋ฌ ํ๋ก์ธ์ค๋ค๊ณผ ์ฃผ์๋ฅผ ๊ณต์ ํ ์ ์๋ค
- ํ๋ก๊ทธ๋จ ์คํ์ ์ํด ์ ์ฒด ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ํ์ X
๐๋์ ๊ณผ์ :
1๋จ๊ณ: ํ๋ก์ธ์ค๊ฐ ๊ฐ์ ์ฃผ์์ ์ ๊ทผ ์๋ 2๋จ๊ณ: MMU๊ฐ ๊ฐ์ ์ฃผ์๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์๋ก ๋ณํ 3๋จ๊ณ: ํ์ด์ง๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์์ผ๋ฉด ์ ๊ทผ, ์์ผ๋ฉด ํ์ด์ง ํดํธ ๋ฐ์ 4๋จ๊ณ: ํ์์ ๋์คํฌ์์ ํ์ด์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋ (ํ์ด์ง ์ค์ํ)
โ virtual memory ๊ตฌํ ๋ฐฉ๋ฒ:
- MMU (Memory Management Unit):
- ๊ฐ์ ์ฃผ์๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์๋ก ๋ณํ
- page table์ ์ด์ฉํ address mapping
- Demand Paging
- Demand Segmentation
์์ธํ๊ฒ๋ ์ฐจ์ฐจ ์์๋ณด์
Virtual-address Space
Virtual address space: ํ๋ก์ธ์ค๊ฐ ์ด๋ป๊ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋์ง์ ๋ํ ๋ ผ๋ฆฌ์ ๊ด์
stack๊ณผ heap์ ์๋ก ํฅํ๋ ๋ฐฉํฅ์ผ๋ก ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํ์ง๋ง ๊ทธ ์ฌ์ด๊ฐ ๊ฑฐ๋ํ๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ๋ง๋ ์ผ์ ์๋ค.
๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ, ๋น ๋ฅธ ๋ก๋ฉ์ ์ด์ ์กด์ฌ
Demand Paging(โญ)
๐Demand Paging: ํ๋ก๊ทธ๋จ์ ๋ชจ๋ page๋ฅผ ์ฒ์๋ถํฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ์ง ์๊ณ , ํ์ํ ํ๋ก์ธ์ค๊ฐ ์์ผ๋ฉด ๊ทธ๋ ๋ถ๋ฌ๋ค์ด๋ ๋ฐฉ์
- ์ฆ ํ์ํ page๋ง ๋ถ๋ฌ๋ค์ด๋ ๊ฒ
- ๋ฉ๋ชจ๋ฆฌ ์ ๊ฒ ์ฌ์ฉ, ์๋ต ๋น ๋ฅด๊ณ ๋๋ง์ ์ฌ์ฉ์๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ
- I/O ์ ๊ฒ ์ฌ์ฉ
- ๋น ๋ฅธ ํ๋ก๊ทธ๋จ ์์
Valid-Invalid Bit
- Valid-Invalid Bit: ์ด ๋นํธ๋ ๊ฐ ํ์ด์ง๊ฐ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋
โ ํน์ง:
- ํ๋ก๊ทธ๋จ ์์ ์ ๋ชจ๋ page์ Valid-Invalid ๋นํธ๋
i
๋ก ์ค์ - page๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋๋ฉด
i
โv
๋ก, swap out ๋๋ฉดv
โi
- MMU๊ฐ ์ด bit๋ฅผ ๊ฒ์ฌํด์ ํน์ ํ์ด์ง๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์๋์ง ํ์ธ
Page Fault ์ฒ๋ฆฌ ๊ณผ์
Page Fault: ํ๋ก์ธ์ค๊ฐ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ํ์ด์ง์ ์ ๊ทผํ ๋ ๋ฐ์ํ๋ ์ธํฐ๋ฝํธ
๐Page fault ๋ฐ์ ์กฐ๊ฑด:
1
2
3
4
5
ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ โ MMU ์ฃผ์ ๋ณํ โ Valid-Invalid Bit ๊ฒ์ฌ
โ
[i] Invalid์ธ ๊ฒฝ์ฐ
โ
๐จ PAGE FAULT! ๐จ
โ
ํ์ด์ง ํดํธ ์ฒ๋ฆฌ ๊ณผ์ (6๋จ๊ณ)
1๏ธโฃ ํ์ด์ง ํดํธ ํธ๋ฉ ๋ฐ์
1
CPU โ MMU โ ํ์ด์ง ํ
์ด๋ธ ๊ฒ์ฌ โ Invalid Bit ๋ฐ๊ฒฌ โ ๐จ TRAP!
- MMU๊ฐ Invalid page ์ ๊ทผ์ ๊ฐ์ง
- trap์ด ๋ฐ์ํ์ฌ ์ด์์ฒด์ ๋ก ์ ์ด ์ ๋ฌ
- ํ์ฌ ์คํ ์ค์ธ ๋ช ๋ น์ด ์ค๋จ
2๏ธโฃ ์ด์์ฒด์ ์ ์ฐธ์กฐ ์ ํจ์ฑ ๊ฒ์ฌ
- Invalid bit๋ 2๊ฐ์ง ์๋ฏธ:
- ์ฃผ์ ๋ฒ์ ๋ฐ์ ์๋ ๊ฒฝ์ฐ - ์๋ชป๋ ์ฐธ์กฐ โ ํ๋ก์ธ์ค ์ข ๋ฃ
- ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๊ฒฝ์ฐ - ์ ์ ์ฐธ์กฐ โ ๊ณ์ ์งํ
3๏ธโฃ ๋น ํ๋ ์ ์ฐพ๊ธฐ
- free frame ์์ โ ๋ฐ๋ก ์ฌ์ฉ
- free frame ์์ โ ๊ธฐ์กด page ๊ต์ฒด(swap out)
- ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ (LRU, FIFO, Clock ๋ฑ)
4๏ธโฃ ํ์ด์ง ์ค์ ์ธ (Swap In)
1
2
3
4
5
6
7
๋์คํฌ I/O ์ค์ผ์ค๋ง
โ
backing store์์ ํ์ด์ง ์ฝ๊ธฐ
โ
์ฐพ์ free frame์ ํ์ด์ง ๋ก๋
โ
โ
ํ์ด์ง ๋ก๋ฉ ์๋ฃ
5๏ธโฃ ํ์ด์ง ํ ์ด๋ธ ์ ๋ฐ์ดํธ
- ํ์ด์ง ํ ์ด๋ธ ์ํธ๋ฆฌ ์์ :
1
2
3
4
5
6
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโ
โ ๋ณ๊ฒฝ ์ โ ๋ณ๊ฒฝ ํ โ
โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโค
โ Page N โ --- โ Page N โ Frame Mโ
โ Valid Bit: i โ Valid Bit: v โ
โโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโ
- ํ์ด์ง ๋ฒํธ โ ํ๋ ์ ๋ฒํธ ๋งคํ ์ค์
- Valid-Invalid Bit๋ฅผ
v
๋ก ๋ณ๊ฒฝ
6๏ธโฃ ๋ช ๋ น์ด ์ฌ์คํ
์์ 6๋จ๊ณ๋ฅผ ๋์ํ
Page fault ์ ํ
- Linux๋ Minor Page Fault๊ฐ Major Page Fault๋ณด๋ค ํจ์ฌ ๋ง์ด ๋ฐ์ํจ!
- ์ด๋ ์์คํ ์ด ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ด๋ฒ์ํ๊ฒ ํ์ฉํ๊ณ ์๋ค๋ ์ฆ๊ฑฐ - ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ์ด ํฌ๊ฒ ํฅ์๋จ
Aspects of Demand Paging
- Pure Demand Paging์ ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ
- ํ๋ก์ธ์ค๊ฐ ์์ํ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์๋ฌด ํ์ด์ง๋ ์๋ ์ํ
- ์ฒซ ๋ฒ์งธ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ค๊ณ ํ๋ฉด ์ฆ์ Page Fault ๋ฐ์
- ์ดํ ํ์ํ ํ์ด์ง๋ค์ด ํ๋์ฉ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋๋จ
- Multiple Page Faults
- ํ๋์ ๋ช ๋ น์ด๊ฐ ์ฌ๋ฌ page์ ์ ๊ทผ ๊ฐ๋ฅ
- ์: ๋ฉ๋ชจ๋ฆฌ์์ ๋ ์ซ์๋ฅผ ๋ํด์ ๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ๋ช ๋ น์ด
- ์ต๋ 4๋ฒ์ page fault๊ฐ ๋ฐ์ํ ์ ์์(๋ช ๋ น์ด, ํผ์ฐ์ฐ์1, ํผ์ฐ์ฐ์2, ๊ฒฐ๊ณผ ์ ์ฅ)
Instruction Restart
Page Fault ์ฒ๋ฆฌ ์์ธ ๊ณผ์
Free-Frame List
๐Free-Frame List: page fault๊ฐ ๋ฐ์ํ์ ๋ ์๋ก์ด ํ์ด์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ ์ ์๋ free fream๋ค์ ๋ชฉ๋ก์ ๊ด๋ฆฌํจ
Free-Frame List ๊ตฌ์กฐ
โ ์๋ ์๋ฆฌ:
- page fault ๋ฐ์ โ ์ด์์ฒด์ ๊ฐ secondary storage(๋ณด์กฐ์ ์ฅ์ฅ์น)์์ ํ์ํ ํ์ด์ง๋ฅผ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ก ๊ฐ์ ธ์์ผ ํจ
- Free-Frame List ํ์ฉ โ ์ฌ์ฉ ๊ฐ๋ฅํ free frame๋ค์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ ์ง
- Zero-fill-on-demand โ ํ๋ ์์ ํ ๋นํ๊ธฐ ์ ์ ๋ด์ฉ์ 0์ผ๋ก ์ด๊ธฐํ (๋ณด์์ ์ด์ )
- Zero-fill-on-demand๊ฐ ์ค์ํ ์ด์ ๋ ์ด์ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฏผ๊ฐํ ์ ๋ณด(ํจ์ค์๋, ๊ฐ์ธ์ ๋ณด ๋ฑ)๊ฐ ์๋ก์ด ํ๋ก์ธ์ค์๊ฒ ๋ ธ์ถ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํจ
- secondary storage์์ ํ์ด์ง ๋ก๋
Memory Compression
๐Memory Compression: paging ๋์ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ, ์ฌ๋ฌ ํ๋ ์์ ๋ด์ฉ์ ์์ถํ์ฌ ํ๋์ ํ๋ ์์ ์ ์ฅํจ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๋ ๋ฐฉ๋ฒ
โ ์๋๊ณผ์ :
- ์ด๊ธฐ ์ํ: Free-frame list์ 6๊ฐ์ ํ๋ ์ (
7, 2, 9, 21, 27, 16
) Modified frame list: ์์ ๋ ํ์ด์ง๋ค (15, 3, 35, 26)์ด ์ค์ ๊ณต๊ฐ์ ์จ์ง ์์
- ์์ถ ๊ณผ์ :
3๊ฐ frame์ ๋ฐ์ดํฐ๋ฅผ 1๊ฐ frame์ ์ ์ฅํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ ์ฆ๊ฐ!
- ๐ฑ Android & iOS - Swapping/Paging ๋์ Memory Compression ์ฌ์ฉ
- ๐ป macOS & Windows 10 - Memory Compression ์ง์ (macOS๋ SSD ๊ธฐ๋ฐ ํ์ด์ง๋ณด๋ค ๋น ๋ฆ)
Performance of Demand Paging
Demand Paging์์ page fault๊ฐ ๋ฐ์ํ์ ๋ ์ฒ๋ฆฌ๋๋ ์ธ ๊ฐ์ง ์ฃผ์ ํ๋:
- Service the Interrupt - ์๋ฐฑ ๊ฐ์ ๋ช ๋ น์ด ์คํ (๋น ๋ฆ)
- Read the page - ๋์คํฌ์์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ฐ์ดํฐ ๋ก๋ (๋งค์ฐ ๋๋ฆผ)
- Restart the process - ์ ์ ์์ ์๊ฐ ์์ (๋น ๋ฆ)
Page Fault Rate
p
= Page Fault Rate (0 โคp
โค 1)p = 0
: ํ์ด์ง ํดํธ ์์ (์ด์์ )p = 1
: ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ด ํ์ด์ง ํดํธ (์ต์ )- EAT(Effective Access Time)
1
EAT = (1 - p) ร memory_access_time + p ร page_fault_service_time
Demand Paging Example
์์ :
- Memory access time = 200ns
- Average page-fault service time = 8ms
- EAT = (1 -
p
) x 200 +p
x (8ms)
= (1 -p
) ร 200 +p
ร 8,000,000ns
= 200 +p
x 7,999,800 โ EAT๋ p์ ๋น๋ก!
- ๋ง์ฝ 1,000๋ฒ ์ค 1๋ฒ ํ์ด์ง ํดํธ ๋ฐ์ ์(p=0.001)
- EAT = 200 + 0.001 ร 7,999,800 = 8,200ns = 8.2ms โ์ด๋ ์ ์ ์๋(๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์๋=200ns)๋ณด๋ค 40๋ฐฐ ๋๋ ค์ง ์๋!
๐ฏ์ ์์ ์์ ์ฑ๋ฅ ์ ํ๋ฅผ 10% ์ดํ๋ก ์ ์งํ๋ ค๋ฉด:
1
2
3
4
220 > 200 + 7,999,800 ร p
= 20 > 7,999,800 ร p
โ p < 0.0000025
โ 400,000๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ค 1๋ฒ ๋ฏธ๋ง์ ํ์ด์ง ํดํธ๋ง ํ์ฉ ๊ฐ๋ฅ!
Demand Paging Optimizations
Demand Paging์ ์ต์ ํ ๊ธฐ๋ฒ์ 4๊ฐ์ง๊ฐ ์๋ค.
- Swap space I/O ์ต์ ํ
- Swap space๊ฐ file system ๋ณด๋ค ๋น ๋ฆ(๋์ผํ device๋ผ๋ ์ฑ๋ฅ ์ฐจ์ด ๋ฐ์)
- ๋ ํฐ chunk ๋จ์๋ก ํ ๋น
- ํ์ผ ์์คํ ๋ณด๋ค ์ ์ ๊ด๋ฆฌ ์ค๋ฒํค๋
- Swap space๊ฐ file system ๋ณด๋ค ๋น ๋ฆ(๋์ผํ device๋ผ๋ ์ฑ๋ฅ ์ฐจ์ด ๋ฐ์)
- ํ๋ก์ธ์ค ์ด๋ฏธ์ง ์ ์ฒด ๋ณต์ฌ
- ํ๋ก์ธ์ค ์ ์ฒด๋ฅผ ์์ ์ (๋ก๋ ์์ )์ swap space์ ๋ณต์ฌ
- ์ดํ page in/out์ swap space์์ ์ํ
- ๊ตฌํ BSD Unix์์ ์ฌ์ฉ
- ํ๋ก์ธ์ค ์ ์ฒด๋ฅผ ์์ ์ (๋ก๋ ์์ )์ swap space์ ๋ณต์ฌ
- ๋ฐ์ด๋๋ฆฌ์์ ์ง์ Demand Paging
- ํ๋ก๊ทธ๋จ ๋ฐ์ด๋๋ฆฌ์์ ์ง์ ํ์ด์ง๋ฅผ ์์ฒญ
- ํ๋ ์ ํด์ ์ paging out ๋์ discard
- Solaris์ ํ์ฌ BSD์์ ์ฌ์ฉ
- Anonymous Memory๋ง ์ค์ ๊ณต๊ฐ ์ฌ์ฉ:
- file๊ณผ ์ฐ๊ด๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ(Stack, Heap)
- ์์ ๋์์ง๋ง ์์ง ํ์ผ์ ์ฐ์ฌ์ง์ง ์์ ๋ฉ๋ชจ๋ฆฌ
- ํ๋ก๊ทธ๋จ ๋ฐ์ด๋๋ฆฌ์์ ์ง์ ํ์ด์ง๋ฅผ ์์ฒญ
- ๋ชจ๋ฐ์ผ ์์คํ
์ต์ ํ
- ์ค์ํ์ ์ง์ํ์ง ์๊ณ ํ์ผ์์คํ ์ ์ฌ์ฉํ๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ ์์ถ ๊ธฐ๋ฒ ์ฌ์ฉ
Copy-on-Write(COW)
๐Copy-on-Write(COW): ๋ถ๋ชจ์ ์์ ํ๋ก์ธ์ค๊ฐ ์ด๊ธฐ์๋ ๊ฐ์ ํ์ด์ง๋ฅผ ๊ณต์ ํ๋ค๊ฐ, ์ด๋ ํ์ชฝ์ด ํ์ด์ง๋ฅผ ์์ ํ ๋๋ง ๋ณต์ฌ๋ณธ์ ๋ง๋๋ ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ
- ํจ์จ์ ์ธ ํ๋ก์ธ์ค ์์ฑ - ์์ ๋ ํ์ด์ง๋ง ๋ณต์ฌ
- ๋น ๋ฅธ fork() ์คํ - ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ X
- ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ
vfork()
:fork()
์ ๋ณํ์ผ๋ก, ๋ถ๋ชจ ํ๋ก์ธ์ค๋ฅผ ์ผ์ ์ค๋จํ๊ณ ์์์ด cow๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ์ ์ฃผ์ ๊ณต๊ฐ์ ๊ณต์ (ex: Linux, macOS, BSD Unix์์ ์ง์)exec()
ํธ์ถ ์ ๊น์ง ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ