์ฑ ์ ์ฝ์ผ๋ฉฐ ํ๋ฆ์ ์ ๋ฆฌ..
๊ฐ์๋ฉ๋ชจ๋ฆฌ Virtual Memory
๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ '์ฌ์ฉ์๊ฐ ํ๋์ ํฐ ๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋๋ก ๋๋ผ๊ฒ๋' ์ค์ ์ฌ์ฉ๊ฐ๋ฅํ ์ ์ฅ ์์์ ์ถ์ํํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ์ด๋ค.
- ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์คํฌ์ ์ ์ฅ๋ ์ฃผ์๊ณต๊ฐ์ ์บ์๋ก ์ทจ๊ธํ์ฌ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ด ํ์ฑํ๋ ์์ญ๋ง ์ ์งํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ํ์ํ ๊ฒฝ์ฐ์๋ง ์ ๋ฌํ๋ค.
- ๊ฐ ํ๋ก์ธ์ค์ ํต์ผ๋ ์ฃผ์๊ณต๊ฐ์ ์ ๊ณตํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๋ค.
- ๊ฐ ํ๋ก์ธ์ค์ ์ฃผ์๊ณต๊ฐ์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํ ์์์ผ๋ก๋ถํฐ ๋ณดํธํ๋ค.
9.1. ๋ฌผ๋ฆฌ ๋ฐ ๊ฐ์์ฃผ์ ๋ฐฉ์
01) ๋ฌผ๋ฆฌ์ฃผ์ ๋ฐฉ์
๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ๊ฒ์ ๋ฌผ๋ฆฌ์ฃผ์ ๋ฐฉ์์ด ์๊ณ ๊ฐ์์ฃผ์ ๋ฐฉ์์ด ์๋ค. ๋ฌผ๋ฆฌ์ฃผ์ ๋ฐฉ์์ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก, ์ฃผ์ 0์ 1๋ฐ์ดํธ, 1์ 1๋ฐ์ดํธ .. ์ ๊ฐ์ ์์ด๋ค. ๋ฌผ๋ฆฌ์ฃผ์ ๋ฐฉ์์ ๋จ์ํ๊ณ ์ง๊ด์ ์ด๋ฉฐ ์ด๊ธฐ PC์์ ๋ง์ด ์ฌ์ฉํ์๋ค.
- ํ๋ก์ธ์๋ ์ ํจํ ๋ฌผ๋ฆฌ์ฃผ์๋ฅผ ์์ฑํ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ ๋ฌํ๋ค. [๋ฉ๋ชจ๋ฆฌ ๋ฒ์ค]
- ๋ฉ๋ชจ๋ฆฌ๋ ์ ๋ฌ๋ฐ์ ๋ฌผ๋ฆฌ์ฃผ์์ ์๋ ๊ฐ์ ์ ๋ฌํ๋ค.
- ํ๋ก์ธ์๋ ์ ๋ฌ๋ฐ์ ๊ฐ์ ๋ ์ง์คํฐ์ ์ ์ฅํ๋ค.
02) ๊ฐ์์ฃผ์ ๋ฐฉ์
๊ฐ์์ฃผ์ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ํ๋ก์ธ์๋ ์ ํจํ ๊ฐ์์ฃผ์๋ฅผ ๋ง๋ค์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๊ณ ์ ํ๋ค. ์ด๋ฅผ ์ํด ๊ฐ์์ฃผ์์ ๋ฌผ๋ฆฌ์ฃผ์๊ฐ์ ๋ฒ์ญ (๋๋ ๋งคํ) ๊ณผ์ ์ด ํ์ํ๋ฐ, ์ด๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ (MMU)์์ ๋ด๋นํ๋ค.
- ํ๋ก์ธ์๋ ์ ํจํ ๊ฐ์์ฃผ์๋ฅผ ๋ง๋ค์ด MMU์ ๋๊ธด๋ค.
- MMU๋ '์ฃผ์ ๋ฒ์ญ' ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ฐ์-๋ฌผ๋ฆฌ์ฃผ์ ๋งคํ์ ํ๋ค.
- ๋ฒ์ญ๋ ์ฃผ์๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ๋ฌ๋๋ฉด, ๋ฉ๋ชจ๋ฆฌ๋ ์ฃผ์์ ์ ์ฅ๋ ๊ฐ์ ๋ค์ ํ๋ก์ธ์์๊ฒ ๋๊ธด๋ค.
9.2. ์ฃผ์๊ณต๊ฐ
CPU๋ ๊ฐ์ ์ฃผ์๊ณต๊ฐ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ $N = 2^n$ ์ฃผ์์ ์ฃผ์๊ณต๊ฐ์์ ๊ฐ์์ ์ฃผ์๋ฅผ ์์ฑํ๋ค. ์ฃผ์๊ณต๊ฐ์ด ๊ฐ์ฅ ํฐ ์ฃผ์๋ฅผ ํํํ๋ ๋ฐ ํ์ํ ๋นํธ ์๊ฐ ์ฃผ์๊ณต๊ฐ์ ํฌ๊ธฐ๊ฐ ๋๋ค. ๋ฐ๋ผ์ 32bit ์ฃผ์๊ณต๊ฐ์ 32๋นํธ ์ฃผ์๊น์ง ํํ๊ฐ๋ฅํ๋ฉฐ, 64bit ์ฃผ์๊ณต๊ฐ์ 64๋นํธ์ ์ฃผ์๊ฐ๊น์ง ํํํ ์ ์๋ค.
๐ก ์ฐ์ต๋ฌธ์ 9.1
kilo, mega, giga, tera, peta, exa
๊ฐ์์ฃผ์๊ณต๊ฐ์ ๋นํธ์ | ๊ฐ์์ฃผ์์ ์ | ๊ฐ์์ฃผ์ ์ต๋๊ฐ |
---|---|---|
4 | $2^4$ | $2^4-1$ |
14 | $2^14 = 2^4K$ | $2^4K-1$ |
24 | $2^24 = 2^4M$ | $2^4M-1$ |
46 | $2^6T$ | $2^6T-1$ |
54 | $2^4P$ | $2^4P-1$ |
9.3. ์บ์ฑ ๋๊ตฌ๋ก์์ VM
๐ ์บ์ฑ์ด๋ ์บ์๋ ๋ฐ์ดํฐ๋ ๊ฐ์ ๋ฏธ๋ฆฌ ๋ณต์ฌํด๋๋ ๊ฒ (๋๋ ๊ทธ๋ฌํ ์์์ฅ์)์ด๋ค.
- ๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ์ ์ ์ฅ๋ N๊ฐ์ ๋ฐ์ดํธ ํฌ๊ธฐ์ ์ ๋ฐฐ์ด๋ก ๊ตฌ์ฑ๋๋ค. ๊ฐ ๋ฐ์ดํธ๋ ํน์ ํ ๊ฐ์์ฃผ์๋ฅผ ๊ฐ์ง๋ค.
- ๋ฐฐ์ด์ ๊ฐ ๋ฐ์ดํธ๋ ํน์ ํ ๊ฐ์์ฃผ์๋ฅผ ๊ฐ๊ณ , ์ด๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ์์ฉํ๋ค.
- ๋ฐฐ์ด์ ์ ๋ณด๋ ๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ์ ์บ์๋๋ค. ์บ์๋ ๋ธ๋ก ๋จ์๋ก ๋ถํ ๋๋ค?
์์คํ ์ ๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ฅผ ํน์ ์ฌ์ด์ฆ์ ๋ธ๋ก์ผ๋ก ๋ถํ ํ์ฌ ๊ด๋ฆฌํ๋๋ฐ, ์ด ๋ถํ ๋ ๋ธ๋ก์ '๊ฐ์ํ์ด์ง Virtual Page'๋ผ๊ณ ํ๋ค. ๊ฐ์ํ์ด์ง๋ $P = 2p$ ๋ฐ์ดํธ ํฌ๊ธฐ๋ฅผ ๊ฐ๋๋ค. ๋ถํ ๋ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ '๋ฌผ๋ฆฌ ํ๋ ์ Physical Frame'์ด๋ผ๊ณ ํ๋ค.
๊ฐ์ํ์ด์ง๋ ์ธ ๊ฐ์ง๋ก ๋๋์ด์ง ์ ์๋ค.
- Unallocated: ์์ง ํ ๋น๋์ง ์์
- Cached: ํ ๋น๋์๊ณ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์บ์๋์ด ์์
- Uncached: ํ ๋น๋์์ง๋ง ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์บ์๋์ด ์์ง ์์
๐ ๋์ ๋จ DRAM? ์ผ๋จ Random-Access-Memory ๋๋ค-์ ๊ทผ ๋ฉ๋ชจ๋ฆฌ๋ผ๋ ๊ฒ์ด ๋ญ๊น? Random์ ์๋ฏธ๊ฐ ์ค์ํ๋ฐ, ์ด๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ด๋ ์์น์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ์ง ์ ๊ทผํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ๋์ผํ๋ค๋ ๊ฒ์ด๋ค. (๋ฐ๋ฉด ๋์คํฌ๋ ์ ์ฅ๋ ์์น์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.) ๋จ์๋ ์ ์ ๋จ์ด ์๊ณ , ๋์ ๋จ์ด ์๋ค. ์ ์ ๋จ (SRAM)์ ์บ์๋ฉ๋ชจ๋ฆฌ๊ณ , CPU์นฉ ๋ด/์ธ๋ถ์ ์ฅ์ฐฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต๊ตฌ์กฐ์์ ๋ณด์๋ L1, L2, L3๊ฐ SRAM์ด๋ค. ๋์ ๋จ (DRAM)์ ๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉ๋๋ค. SRAM์ DRAM๋ณด๋ค ๋น ๋ฅด๊ณ ๋น์ธ๋ค.
9.3.1. DRAM ์บ์์ ๊ตฌ์ฑ
DRAM ์บ์ ๋ฏธ์ค๋ (์๋ชป๋ ํ์ด์ง ๋งคํ) ๋์คํฌ์์ ์ฒ๋ฆฌ๋๋ค. ๊ทธ๋ฌ๋ SRAM(L1, L2, L3) ์บ์ ๋ฏธ์ค๋ DRAM์์ ์ฒ๋ฆฌ๋๋ค. ๋ฐ๋ผ์ DRAM์์์ ๋ฏธ์ค ์ฒ๋ฆฌ ๋น์ฉ์ SRAM ๋๋น ๋งค์ฐ ๋น์ธ๋ค๊ณ ํ ์ ์๋ค. ๋ํ, ๋์คํฌ๋ก๋ถํฐ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ๋ฅผ ์ฝ๋ ์๊ฐ์ ๊ทธ ํ ์ฐ์์ ์ธ ๋ฐ์ดํธ๋ฅผ ์ฝ๋ ์๊ฐ๋ณด๋ค 100,000๋ฐฐ ๋๋ฆฌ๋ค. ์ด ๋น์ฉ ๋๋ฌธ์ ๊ฐ์ํ์ด์ง์ ํฌ๊ธฐ๊ฐ ์ปค์ง๊ณ ์์ผ๋ฉฐ, 4KB์์ 2MB๊น์ง์ ๊ฐ์ ๊ฐ์ง๋ค. (์ผ๋ฐ์ ์ผ๋ก 4KB, 8KB)
๐ ์บ์ ๋ฏธ์ค Cache Miss ์บ์ ๋ฉ๋ชจ๋ฆฌ์ ์ํ๋ ๋ฐ์ดํฐ๋ ๋ช ๋ น์ด๊ฐ ์๋ ์ํ. ๋ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋๋ฐ, ์บ์์ ์์ผ๋ฉด ์บ์๋ ์ฃผ ๋ฉ๋ชจ๋ฆฌ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ค. (๊ฐ์ฅ ๋๋ฆฐ ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค) ํ์ด์ง์ ๊ด๋ จํด์ ์บ์ ๋ฏธ์ค๋ ๊ฒฐ๊ตญ Page Fault๋ฅผ ์๋ฏธ.
๐ ํ์ด์ง์ ํฌ๊ธฐ์ ๋ฌด์จ ๊ด๊ณ? ํ์ด์ง์ ํฌ๊ธฐ๊ฐ ์์ผ๋ฉด ํ์ด์ง ํดํธ๊ฐ ๋ ์์ฃผ ๋ฐ์ํ๋ค. ๋ํ ์ด๊ธฐ์ ํ์ด์ง๋ฅผ ์ ๊ทผํ ๋, ํ์ด์ง๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ ๋ง์ ํ์ด์ง๋ฅผ ์ ๊ทผํด์ผ ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ถฉ๋ถํ ์ปค์ผ ํ๋ค. ํ์ด์ง๊ฐ ํฌ๋ฉด ํ์ด์ง ํดํธ๊ฐ ๋ ๋ฐ์ํ์ง๋ง, ํ์ด์ง ๋ด์ ์ค์ ๋ก ์ฌ์ฉ๋์ง ์๋ ๋ฐ์ดํฐ๊น์ง ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ ์๋ ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น์ ์ฌ์ง๊ฐ ์๋ค. (๐ ๋ ๊ณต๋ถํด ๋ณด์)
9.3.2. ํ์ด์ง ํ ์ด๋ธ
๊ฐ์ํ์ด์ง์ ๋ฌผ๋ฆฌํ๋ ์ ๊ฐ์ ๋งคํ์ ์ด์ฉ๋๋ ํ ์ด๋ธ์ด๋ค. ํ์ด์ง ํ ์ด๋ธ์ ๊ฐ๊ฐ์ ํ์ด์ง ํ ์ด๋ธ ์ํธ๋ฆฌ (Page Table Entry)๋ก ๊ตฌ์ฑ๋๋ค. PTE๋ ํ์ด์ง์ ํ ๋น ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ ์ ํจ๋นํธ์ ํด๋น ๋ ผ๋ฆฌ์ฃผ์์ ๋์๋๋ ๋ฌผ๋ฆฌ์ฃผ์์ ๊ฐ์ ์ ๋ณด๋ฅผ ํฌํจํ๋ค.
CPU๋ ํ์ด์ง์ ๋ฒํธ p, ํ์ด์ง ๋ด์ ์๋ ์ฃผ์ (offset) d๋ฅผ ์กฐํฉํ์ฌ ๋ ผ๋ฆฌ์ฃผ์๋ฅผ ์์ฑํ๋ค. ํ์ด์ง ํ ์ด๋ธ์์ p๋ฒ์งธ์ ์๋ ๋ฌผ๋ฆฌ์ฃผ์ f๋ก ์ ๊ทผํ๋๋ฐ, ์ด ๋ ์ ๊ทผํ๋ ์ฃผ์๋ $f\times S+d$๊ฐ ๋๋ค. ($S$๋ ํ์ด์ง ์ฌ์ด์ฆ)
9.3.3. ํ์ด์ง ์ ์ค
CPU๋ ๊ฐ์์ฃผ์๋ฅผ ์ธ๋ฑ์ค๋ก ํ์ฌ ํ์ด์ง ํ ์ด๋ธ์์ ์ด์ ๋์ํ๋ PTE๋ฅผ ์ฐพ๋๋ค. PTE์ ์ ํจ๋นํธ๊ฐ 1์ด๋ฉด (์ฆ DRAM์ ์บ์๋์ด ์์ผ๋ฉด) ๋ฌผ๋ฆฌ์ฃผ์๋ฅผ ๊ตฌ์ฑํ์ฌ ์ ๊ทผํ๋ค.
9.3.4. ํ์ด์ง ์ค๋ฅ
Page Fault๋ ๊ฐ์์ฃผ์๋ฅผ ์ธ๋ฑ์ค๋ก ํ๋ PTE์ ์ ํจ๋นํธ๊ฐ 0์ผ๋, ์ฆ DRAM์ ํด๋น ์๋๊ฐ ์บ์๋์ด ์์ง ์์ ๋ ์ผ์ด๋๋ค. ์ด ๊ฒฝ์ฐ ์ฃผ์ ๋ฒ์ญ ํ๋์จ์ด๋ ์์ธ์ํฉ์ ์ ๋ฐํ์ฌ DRAM์์ ํฌ์์ ํ์ด์ง(victim page)๋ฅผ ์ ํํ๊ณ , ์ด ํ์ด์ง๋ฅผ uncache ํ ๋ค์ ๋์คํฌ๋ก๋ถํฐ ํด๋น ํ์ด์ง๋ฅผ ๋ณต์ ํ๋ค.
[๊ณผ์ ]
- ๋๋ VP3 ๋ด์ ์๋๋ฅผ ์ฝ๊ณ ์ถ๋ค.
- VP3์ PTE๋ฅผ ์ฐพ๋๋ค. ์ ํจ๋นํธ๊ฐ 0์ด๋ฏ๋ก page fault๊ฐ ๋ฐ์ํ๋ค.
- ์ฃผ์ ๋ฒ์ญ ํ๋์จ์ด๋ DRAM์ ์บ์๋ ํ์ด์ง ์ค victim page VP4๋ฅผ ์ ํํ๋ค.
- VP4๋ฅผ ๋์คํฌ๋ก ๋ณต์ ํ๋ค.
- VP3์ ๋์คํฌ์์ DRAM์ VP4 ์๋ฆฌ๋ก (๋ฌผ๋ฆฌ์ฃผ์ PP3) ๋ณต์ ํ๋ค.
- PTE 3์ ๊ฐฑ์ ํ๊ณ ๋ฆฌํดํ๋ค.
- ๋ค์ VP3์ ์ฐพ์ผ๋ฉด, ์ ์คํ๋ค.
๊ณผ์ 4๋ ๋์คํฌ์ ์๋ ํ์ด์ง์ ๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ์ ์๋ ํ์ด์ง๊ฐ ์๋ก ๋ค๋ฅธ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ๊ธฐ ์ํจ์ด๋ค. ์ฆ ํ๋ก์ธ์ค๊ฐ ์์๋ ์ดํ ํ์ด์ง์ ๋ณ๊ฒฝ์ฌํญ์ด ์์๋ค๋ฉด, ์ด๋ฅผ ๋์คํฌ์ ๋ค์ writeํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ๋ณ๊ฒฝ์ฌํญ์ด ์์๋ค๋ฉด? ์ ํด๋ ๋๋ค. ํฌ์์ ํ์ด์ง๋ฅผ ๋ด๋ฆด ๋ ๋์คํฌ์ ๋งค๋ฒ writeํ๊ธฐ๋ณด๋ค, ์ ์ด์ ๋ค์ write ์ ํด๋ ๋๋ ํ์ด์ง๋ฅผ ๋ด๋ฆฌ๋ฉด ๋๋ค. ์ด๋ฅผ ์ํด ํ์ด์ง์ ๋ณ๊ฒฝ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ ๋นํธ๋ฅผ ๋๋๋ฐ, ์ด๋ฅผ ์ค์ผ๋นํธ(dirty bit or modify bit)๋ผ๊ณ ํ๋ค.
๐ ํฌ์์ ํ์ด์ง๋ฅผ ์ฐพ๋ ๊ธฐ์ค์? [GPT]
Page fault๊ฐ ๋ฐ์ํ ๋ ์ด์์ฒด์ ๋ ํฌ์์ ํ์ด์ง(victim page)๋ฅผ ์ ํํ์ฌ ๋์คํฌ์ ์ค์ ์์(swap out)ํจ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํฉ๋๋ค. ์ด๋, ํฌ์์ ํ์ด์ง๋ฅผ ์ ํํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ด ์์ต๋๋ค. ๋ค์์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ๋ค๊ณผ ๊ทธ ๊ธฐ์ค์
๋๋ค:
- FIFO (First-In, First-Out): ๊ฐ์ฅ ๋จผ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ํ์ด์ง๋ถํฐ ๊ต์ฒดํฉ๋๋ค. ํ์ด์ง๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ์์๋ฅผ ๊ธฐ์ตํ๋ ํ๋ฅผ ์ ์งํฉ๋๋ค.
- Optimal (or MIN): ๋ฏธ๋์ ํ์ด์ง ์ฐธ์กฐ๋ฅผ ๋ดค์ ๋, ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉ๋์ง ์์ ํ์ด์ง๋ฅผ ๊ต์ฒดํฉ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ก ์ ์ด๋ฉฐ ์ค์ ์์คํ ์์ ๊ตฌํํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค. ๊ทธ ์ด์ ๋ ๋ฏธ๋์ ํ์ด์ง ์ฐธ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- LRU (Least Recently Used): ๊ฐ์ฅ ์ค๋ซ๋์ ์ฐธ์กฐ๋์ง ์์ ํ์ด์ง๋ฅผ ๊ต์ฒดํฉ๋๋ค. ํ์ด์ง ์ฐธ์กฐ์ ์ต๊ทผ ์์๋ฅผ ์ถ์ ํ๋ ๋ฐ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ(์นด์ดํฐ, ์คํ ๋ฑ)์ด ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- Random: ๊ต์ฒด๋ ํ์ด์ง๋ฅผ ๋ฌด์์๋ก ์ ํํฉ๋๋ค. (์ต์ ์ ๋ฐฉ๋ฒ)
- Clock (or Second-Chance Algorithm): ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ํ ํ์ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค. ๊ฐ ํ์ด์ง๋ ์ฐธ์กฐ ๋นํธ๋ฅผ ๊ฐ์ง๋๋ค. ํ์ด์ง ํดํธ๊ฐ ๋ฐ์ํ๋ฉด ํฌ์ธํฐ๊ฐ ๋ค์ ํ์ด์ง๋ก ์ด๋ํ๋ฉด์ ์ฐธ์กฐ ๋นํธ๋ฅผ ํ์ธํฉ๋๋ค. ์ฐธ์กฐ ๋นํธ๊ฐ 0์ด๋ฉด ํด๋น ํ์ด์ง๋ฅผ ๊ต์ฒดํ๊ณ , 1์ด๋ฉด 0์ผ๋ก ์ค์ ํ ํ ๋ค์ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
๐ ๊ฐ์๋ฉ๋ชจ๋ฆฌ์ ์ฉ์ด ์ ๋ฆฌ
- ํ์ด์ง Page: ๊ฐ์๋ฉ๋ชจ๋ฆฌ์ ๊ธฐ๋ณธ ๋จ์
- ์ค์ํ/ํ์ด์ง Swapping/Paging: ๋์คํฌ์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ํ์ด์ง ์ ์ก
- ์๊ตฌ ํ์ด์ง Demand Paging: ํ์ด์ง๋ฅผ ์๊ตฌํ ๋๊น์ง ํ์ด์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ์ง ์๋ ๋ฐฉ์
+) ์๊ตฌ ํ์ด์ง์ ํ๋ฉด Page Fault๋ ํ์ฐ์ ์ผ๋ก ๋ฐ์. ํ๋์ ๋ชจ๋ ์์คํ ์ด ์ฌ์ฉํ๋ ํ์ด์ง ๋ฐฉ์.
9.3.5 ํ์ด์ง์ ํ ๋น
malloc
์ ๋ถ๋ ๋ค. ์ด๋ค ์ผ์ด ์ผ์ด๋๋๊ฐ? ๋์คํฌ๋ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ง๋ค๊ณ ํ์ด์ง ํ
์ด๋ธ ์ํธ๋ฆฌ๊ฐ ์ด ๊ณต๊ฐ์ ๊ฐ๋ฆฌํค๋๋ก ์ค์ ํ๋ค.
9.3.6. ๋ฌธ์ ํด๊ฒฐ์ ์ํ ๋ ํ ๋ฒ์ ์ง์ญ์ฑ์ ๋ฑ์ฅ
ํ๋ก๊ทธ๋จ์ ์คํ ์ค์ธ ๊ฒ๋ง ๋ถ๋ถ์ ์ผ๋ก ์ ์ฌํ๋ค๊ฐ, ๋ค์ ๋ด๋ ธ๋ค๊ฐ.. ํ๋ ๊ณผ์ ์์ ์๊ฐ์ด ์๋ชจ๋์ง ์์๊น? ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ ๋ง์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฌ์ฉํด๋ ๋ฌธ์ ๊ฐ ์๋ ์ด์ ๋ ๋ญ๊น? ๋นํจ์จ์ ์ผ๋ก ๋ณด์ด๋ ๋ชจ๋ ๊ณผ์ ์ด ์ ๋์ํ๋ ์ด์ ๊ฐ ๋ฐ๋ก ์ง์ญ์ฑ locality์ด๋ค.
๐ฅ Locality of Reference
๋ค๋ฅธ ๋ง๋ก๋ Principle of Locality๋ผ๊ณ ๋ ํ๋ค. ๊ฒฐ๊ตญ 'ํ ๋ฒ ์ฐธ์กฐ๋ ๊ฒ์ด ๋ค์์๋ ์ฐธ์กฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค'์ '์ฐธ์กฐ๋ ๊ฒ ๊ทผ์ฒ์ ๊ฒ์ด ์ฐธ์กฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค'๋ ๊ฒ์ด๋ค.
- ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด์ ๋ฉ๋ชจ๋ฆฌ์ ํน์ ๋ถ๋ถ์ ๋ฐ๋ณต์ ์ผ๋ก ์ฐธ์กฐํ๋ ๊ฒฝํฅ (CPU์ ๊ฒฝํฅ์ฑ)
- the tendency of a processor to access the same set of memory locations repetitively over a short period of time. wikipedia
์๊ฐ์ ์ง์ญ์ฑ Temporal Locality: 'ํ ๋ฒ ์ฐธ์กฐ๋ ๊ฒ์ด ๋ค์์๋ ์ฐธ์กฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.' (ex.๋ฐ๋ณต๋ฌธ ๋ด ๋ณ์)
๊ณต๊ฐ์ ์ง์ญ์ฑ Spatial Locality: '์ฐธ์กฐ๋ ๊ฒ ๊ทผ์ฒ์ ๊ฒ์ด ์ฐธ์กฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.' (ex. ๋ฐฐ์ด ์์)
์์คํ ์ด ์ฐธ์กฐ ์ง์ญ์ฑ์ ๊ฐ๊ธฐ ๋๋ฌธ์, ํ๋ก์ธ์ค๊ฐ ์คํ๋ ๋ ์ด๋ค ํ์ด์ง๋ค์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ๊ฒ ๋๋ค. ์ด๋ ๊ฒ '์ฃผ๋ก ์ฌ์ฉํ๋ ํ์ด์ง๋ ๋ธ๋ก๋ค์ ์งํฉ'์ ์ผ์ปฌ์ด ๋์ ์งํฉ Working Set์ด๋ผ๊ณ ํ๋ค. ๋์ ์งํฉ์ด ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ(๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ)์ ํฌ๊ธฐ๋ฅผ ์ด๊ณผํด์ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ ๋์ ํ์ด์ง์ ๊ต์ฒด๊ฐ ๋น๋ฒํ๊ฒ ์ผ์ด๋ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ์ ๋ฉ์ถฐ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ๋๋ค. ์ด ํ์์ ์ฐ๋์ฑ Thrashing์ด๋ผ๊ณ ํ๋ค. (๋ฉ๋ชจ๋ฆฌ์ ๋์คํฌ ๊ฐ์ ํ์ด์ง ๊ต์ฒด๊ฐ ๋๋ฌด ์์ฃผ ๋ฐ์ํ๋ฉด์ ์ค์ ํ๋ก์ธ์ค์ ์คํ์ด ์ ๋๋ก ์ด๋ฃจ์ด์ง์ง ์๋ ์ํ)
9.4. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํ ๋๊ตฌ๋ก์์ VM
- ํ์ด์ง ํ ์ด๋ธ์ ํ๋ก์ธ์ค๋ง๋ค ๋ณ๋๋ก ์ ๊ณต๋๋ค.
- ๊ฐ ํ๋ก์ธ์ค๋ ํ์ด์ง๋ฅผ ๊ณต์ ํ๊ธฐ๋ ํ๋ค. (๋ค์์ ๊ฐ์ํ์ด์ง๊ฐ ๋์ผํ ๋ฌผ๋ฆฌํ๋ ์์ ๋งคํ)
VM์ด ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋จ์ํํ๋ค.
- ๋งํน์ ๋จ์ํํ๋ค: ์ฃผ์๊ณต๊ฐ์ ๋ณ๋๋ก ๋ฌ์, ๊ฐ ํ๋ก์ธ์ค๋ค์ด ํต์ผ๋ ํฌ๋งท์ ๊ฐ๊ฒ ํด ์ค๋ค. (ex. ์ฝ๋ ์ธ๊ทธ๋จผํธ๋ ํญ์ ๊ฐ์์ฃผ์ 0x400000์์ ์์) ์ด๋ฌํ ํต์ผ์ฑ์ ํตํด ๋ง์ปค์ ์ค๊ณ์ ๊ตฌํ์ ๋จ์ํํ ์ ์๋ค.
- ๋ก๋ฉ์ ๋จ์ํํ๋ค: ํ๋ก์ธ์ค๊ฐ ๋ก๋๋ ๋ ์์คํ
์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ค ๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๋ ๊ฒ์ด ์๋๋ค. ์ฝ๋์ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ๋ฅผ ์ํ ๊ฐ์ํ์ด์ง๋ฅผ ํ ๋น(๋ง) ํ๊ณ , ์ด๋ค์ ํ์ด์ง ํ
์ด๋ธ ์ํธ๋ฆฌ๋ฅผ ๋ชฉ์ ํ์ผ์ ํด๋น ์์น๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ํ ๋ ๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ์ฌ ์ฌ์ฉํ๋ค. ์คํธ..์ด๋ฅผ ์ง์ฐ ๋ก๋ฉ ๋๋ lazy loading์ด๋ผ๊ณ ํ๋ค. (ํ์ํ ๋ ๋ก๋ํ๋ฏ๋ก ํจ์จ์ ์ด๊ณ , ํ๋ก์ธ์ค์ ์์์ด ๋นจ๋ผ์ง๋ฉฐ, ๊ถ๊ทน์ ์ผ๋ก๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ ์ ์๋ค.) + ์ฐ์๋ ๊ฐ์ํ์ด์ง๋ฅผ ํ์ผ ๋ด ๊ฐ ์์น๋ก ๋งคํํ๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ด๋ผ๊ณ ํ๊ณ , ์ด๊ฑธ ํ๋ ์์คํ
์ฝ์ด
mmap()
๋ค. (mmap๋ 9.8์ ์์ ๋ค์ ๋ณธ๋ค.) - ๊ณต์ ๋ฅผ ๋จ์ํํด์ค๋ค: ๋ ํ๋ก๊ทธ๋จ์ด ๋ชจ๋
printf
๋ฃจํด์ ์ฌ์ฉํ๋ค๊ณ ํ ๋ ๊ฐ์๋ฉ๋ชจ๋ฆฌ ์์คํ ์ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ์printf
๋ฅผ ๋ ๋ฒ ์ ์ฌํ๊ฒ ๋ ๊น? ์๋๋ค.. ํ ๋ฒ๋ง ์ ์ฌํ๊ณ , ๋ ํ๋ก๊ทธ๋จ์ด ๊ณต์ ํ์ฌ ์ฌ์ฉํ ์ ์๋๋ก ๊ฐ๊ฐ์ ๊ฐ์ํ์ด์ง ํ ์ด๋ธ์์ ์ด ๋ฌผ๋ฆฌํ๋ ์๊ณผ ๋งคํํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ค. - ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋จ์ํํด์ค๋ค:
malloc
์์ ์ถ๊ฐ์ ์ธ ํ ๊ณต๊ฐ์ ์์ฒญํ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด ๋ณด์. ์ด์ํค์ ๋ ๊ฐ์๋ฉ๋ชจ๋ฆฌ ํ์ด์ง๋ฅผ ํ ๋นํ ๋ค์ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฌผ๋ฆฌํ๋ ์๊ณผ ๋งคํํ๋ค. ์ด๋ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ์์ ์ฐ์์ ์ธ ํ์ด์ง๋ฅผ ์ฐพ์ ํ์๊ฐ ์๋ค. (๋๋คํ๋ค)
Runtime Memory Image
๊ต์ฌ 670p ๊ทธ๋ฆผ 7.15. ๊ฐ ๊ฐ์๋ฉ๋ชจ๋ฆฌ ์์ญ
์ด์์ฒด์ ์์
์์ ๋ถ๋ช
๋ค ๋ดค๋ ๋ด์ฉ์ธ๋ฐ๐ ์์ผ ๊ทธ๋๋ ๊ณต๋ถ๋ฅผ ์ ํ ์ ํ๋ค๋ ์ฌ์ค์ ๊นจ๋ซ๋๋ค. ํ๊ธฐ๋ก์ ์ํ์ ์ด๋ ๋ถ๋ถ ๋์ค๋์ง๋ง ๋ฉ๋ชจ๋์ด ์๋ ๊ฒ์ ๋ณด๊ณ ํํ๋ง์ฌํจ์ ๋๊ผ๋ค. ์ฑ
์ ์ฝ์ผ๋ฉด์ ์กฐ๊ธ ์ ๊ธฐํ?๋ ๋ถ๋ถ์ CPU๊ฐ ์๊ตฌ ํ์ด์ง์ ํ๋ค๋ ์ ์ด๋ค. Page Fault๋ผ๊ณ ํด์ ์ด๋ค ์๋ฐฉ๋์ด์ผ ํ ์ค๋ฅ ์ํฉ์ด๋ผ๊ณ ์๊ฐํ๋๋ฐ, ์คํ๋ ค 'ํ์ํ ๋๊น์ง ๋ฏธ๋ฃฌ๋ค'๋ ์ ๋ต์ ๊ณ ์ํ๋ ๊ฒ์ด ์ธ๋ป ์์ํ๊ฒ ๋๊ปด์ง๊ธฐ๋ ํ๋ค. ๋์ค์ ๋ค๋ฅธ ๋ฌธ์ ์ ๊ด๋ จํด์๋ ๋น์ทํ ์์ด๋์ด๊ฐ ๋์ค๋ ๊ฒ์ผ๋ก ๋ณด์, ๊ฒฐ๊ตญ 'ํ์ํ ๋๊น์ง ํ์ง ์๋ ์ ๋ต' ์ ๋๋๋ก ๋ถํ์ํ ์๊ฐ์ ์๋ชจ๋ฅผ ์ค์ฌ ์ฃผ๋ ๊ฒ ๊ฐ๋ค. ์ด๋ ์ฌ์ฉ์๋ก๋ถํฐ ์ธ์ , ๋ฌด์์ด ์์ฒญ๋ ์ง ๊ฒฐ๊ตญ ์์คํ
์ ์์ธกํ ์ ์๊ธฐ ๋๋ฌธ์ด์ง ์์๊น ์๊ฐ์ด ๋ค์๋ค. ๊ทธ ๋ฐ์๋ ์บ์ ์ง์ญ์ฑ ๊ฐ๋
์ด ์ ๊ธฐํ๋๋ฐ, ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ๊ณ์ธต (๋ ๋น ๋ฅธ ๊ฒ์ด ๋ ๋๋ฆฐ ๊ฒ์ ์บ์๊ฐ ๋๋ค) ๊ตฌ์กฐ๋ก ์ธํด ๋ณต์กํด ๋ณด์ด๋ ํ์ด์ง ๋ก๋, ๋งคํ ๋ฐฉ๋ฒ์ด ์ค์ ๋ก๋ ๋น ๋ฅธ ์๋๋ฅผ ๊ฐ๋๋ค๋ ์ ์ด.. ๋ฉ์ง ๊ฒ ๊ฐ๋ค. ์ด ๋ชจ๋ ๋ด์ฉ๋ค์ ์ง์ง ์ฝ๋ ๋๋ฆฌ๋ฉด์ ๋์ผ๋ก ํ์ธํ๊ณ ์ถ์ด์ perf
๋ฅผ ์ค์นํ๋ค. ์ฌ์ฉ๋ฒ์ ๊ณต๋ถํด๋ณด๊ณ ์ฐจ์ฐจ ์ ๋ฆฌํด๋์ด์ผ๊ฒ ๋ค.
'DevLog ๐จ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DevLog][PintOS] PRJ1 Threads/Scheduling Algorithms (0) | 2023.10.03 |
---|---|
[DevLog][PintOS] PRJ1 Threads/Priority Scheduling (0) | 2023.09.27 |
[DevLog][CSAPP] 10์ฅ ์์คํ ์์ค ์ ์ถ๋ ฅ (10.1~10.5) (0) | 2023.09.24 |
[DevLog][CSAPP] 9์ฅ 9.9 malloc lab ๋์ ํ ๋น๊ธฐ ๊ตฌํ (0) | 2023.09.24 |
[DevLog] 2์ง์ ํํ์์ 1์ ๊ฐ์ ์ธ๊ธฐ (0) | 2023.08.30 |