etc/์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ
[์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ ์ค๊ธฐ] ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ(Memory Management)
minzhen
2022. 7. 13. 23:35
๋ฉ๋ชจ๋ฆฌ(๊ธฐ์ต์ฅ์น) ๊ด๋ฆฌ ์ ๋ต โญ
๋ณด์กฐ๊ธฐ์ต์ฅ์น์ ํ๋ก๊ทธ๋จ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ธฐ์ต์ฅ์น์ ์ ์ฌ์ํค๋ ์๊ธฐ, ์ ์ฌ ์์น ๋ฑ์ ์ง์ ํ์ฌ ํ์ ๋ ์ฃผ๊ธฐ์ต์ฅ์น์ ๊ณต๊ฐ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํ ์ ๋ต
์ฃผ๊ธฐ์ต์ฅ์น
= Computer Memory = Primary Memory
์ปดํจํฐ ๋ด๋ถ์์ ํ์ฌ CPU๊ฐ ์ฒ๋ฆฌํ๊ณ ์๋ ๋ด์ฉ์ ์ ์ฅํ๊ณ ์๋ ๊ธฐ์ต์ฅ์น
- ๋น๊ต์ ์ฉ๋์ด ํฌ๊ณ ์ฒ๋ฆฌ์๋๊ฐ ๋น ๋ฆ
- CPU์ ๋ช ๋ น์ ์ํด ๊ธฐ์ต๋ ์ฅ์์ ์ง์ ์ ๊ทผํ์ฌ ์ฝ๊ณ ์ธ ์ ์๋ค.
- ROM (Read Only Memory) : ๋นํ๋ฐ์ฑ ๋ฉ๋ชจ๋ฆฌ. ์ค์ง ๊ธฐ์ต๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ ์ฅ์น → ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ ์ ์ฅํ๋ฉด ์์ ํ ์ ์๋ค
- RAM (Random Access Memory) : ํ๋ฐ์ฑ ๋ฉ๋ชจ๋ฆฌ. ์ ์ ๋์ด์ง๋ฉด ์ง์์ง๋ฉฐ, ์ฝ๊ณ ์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅ
๋ณด์กฐ๊ธฐ์ต์ฅ์น
= Auxiliary Memory = Secondary Memory
๋ฌผ๋ฆฌ์ ๋์คํฌ๊ฐ ์ฐ๊ฒฐ๋์ด ์๋ ๊ธฐ์ต์ฅ์น
- ์ฃผ๊ธฐ์ต์ฅ์น๋ณด๋ค๋ ๋๋ฆฌ์ง๋ง ์ปดํจํฐ ์ ์์ ๋๋๋ผ๋ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง์ง ์๊ณ ์๊ตฌ์ ์ผ๋ก ๋ณด๊ด๋จ
- HDD (Hard Disk Driver)
- ๋ฌผ๋ฆฌ์ ์ธ ๋์คํฌ๋ฅผ ๊ณ ์์ผ๋ก ํ์ ์์ผ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ฅ์น
- ๊ฐ์ฅ ๋์ค์ ์ธ ๋ณด์กฐ์ฅ์น์์ผ๋, SSD์ ์ต๊ทผ ๋ง์ด ๋ฐ๋ ธ๋ค.
- SSD (Solid State Driver)
- ๋ฐ๋์ฒด ๊ธฐ๋ฐ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ธฐ์ต์ฅ์น
- ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์๊ณ ์ ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- ⇒ HDD์ ๋นํด ์๋๋ ์๋ฑํ๊ณ ์์๋ ๋ฐ์ํ์ง ์์.
- ๋จ, ์์ง HDD๋ณด๋ค ๊ฐ๊ฒฉ์ด ๋ค์ ๋์
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ต
๋ณด์กฐ๊ธฐ์ต์ฅ์น์ ํ๋ก๊ทธ๋จ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ธฐ์ต์ฅ์น์ ์ธ์ , ์ด๋์ ์ ์ฌํ ์ง ๋ฑ์ ์ง์ ํ์ฌ ํ์ ๋ ์ฃผ๊ธฐ์ต์ฅ์น์ ๊ณต๊ฐ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํ ๊ฒ
์ํฉ์ ๋ฐ๋ผ ๋ฐ์ , ๋ฐฐ์น, ๊ต์ฒด ์ ๋ต์ผ๋ก ๋๋์ด ์๊ฐํด๋ณผ ์ ์๋ค.
๋ฐ์ (Fetch) ์ ๋ต
๋ณด์กฐ๊ธฐ์ต์ฅ์น์ ํ๋ก๊ทธ๋จ/๋ฐ์ดํฐ๋ฅผ ์ธ์ ์ฃผ๊ธฐ์ต์ฅ์น๋ก ์ ์ฌํ ๊ฒ์ธ์ง ๊ฒฐ์
- Demand Fetch (์๊ตฌ ๋ฐ์ ) : ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ด ํน์ ํ๋ก๊ทธ๋จ์ด๋ ๋ฐ์ดํฐ ๋ฑ์ ์ฐธ์กฐ๋ฅผ ์๊ตฌํ ๋ ์ ์ฌํ๋ ๋ฐฉ๋ฒ
- Anticipatory Fetch (์์ ๋ฐ์ ) : ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ์ํด ์ฐธ์กฐ๋ ํ๋ก๊ทธ๋จ์ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์์ํ์ฌ ์ ์ฌํ๋ ๋ฐฉ๋ฒ
๋ฐฐ์น(Placement) ์ ๋ต
์๋ก ๋ฐ์ ๋๋ ํ๋ก๊ทธ๋จ/๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ธฐ์ต์ฅ์น์ ์ด๋์ ์์น์ํฌ๊ฒ์ธ์ง ๊ฒฐ์
- First Fit (์ต์ด ์ ํฉ) : ๋น ์์ญ ์ค ์ฒซ ๋ฒ์งธ ๋ถํ ์์ญ์ ๋ฐฐ์น
- Best Fit (์ต์ ์ ํฉ) : ๋น ์์ญ ์ค ๋จํธํ*๋ฅผ ๊ฐ์ฅ ์๊ฒ ๋จ๊ธฐ๋ ๋ถํ ์์ญ์ ๋ฐฐ์น
- Worst Fit (์ต์ ์ ํฉ) : ๋น ์์ญ ์ค ๋จํธํ๋ฅผ ๊ฐ์ฅ ๋ง์ด ๋จ๊ธฐ๋ ๋ถํ ์์ญ์ ๋ฐฐ์น
๊ต์ฒด(Replacement) ์ ๋ต
์ฃผ๊ธฐ์ต์ฅ์น ๋ชจ๋ ์์ญ์ด ์ฌ์ฉ์ค์ธ ์ํ์์ ์๋ก์ด ํ๋ก๊ทธ๋จ์ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์นํ ๋, ์ฌ์ฉ์ค์ธ ์์ญ ์ค ์ด๋ ์์ญ์ ๊ต์ฒดํ์ฌ ์ฌ์ฉํ ๊ฒ์ธ์ง ๊ฒฐ์
ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ
Page Fault(ํ์ด์ง ๋ถ์ฌ)๋ก ์ธํด ์ฃผ๊ธฐ์ต์ฅ์น์ ํ์ด์ง๋ฅผ ์ ์ฌํ ๋, ์ด๋ฏธ ์ฃผ๊ธฐ์ต์ฅ์น์ ๋ชจ๋ ํ์ด์ง ํ๋ ์์ด ์ฌ์ฉ์ค์ด๋ฉด ์ด๋ค ํ์ด์ง ํ๋ ์์ ์ ํํ์ฌ ๊ต์ฒดํ ๊ฒ์ธ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ธฐ๋ฒ
OPT (OPTimal replacement, ์ต์ ๊ต์ฒด)
- ์์ผ๋ก ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉํ์ง ์์ ํ์ด์ง๋ฅผ ๊ต์ฒด
- ๋ฒจ๋ ์ด๋(Belady)๊ฐ ์ ์
- ํ์ด์ง ๋ถ์ฌ ํ์๊ฐ ๊ฐ์ฅ ์ ๊ฒ ๋ฐ์ํ๋ ๊ฐ์ฅ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ
FIFO (First In First Out)
- ๊ฐ์ฅ ๋จผ์ ๋ค์ด์์ ๊ฐ์ฅ ์ค๋ ์์๋ ํ์ด์ง๋ฅผ ๊ต์ฒดํ๋ ๊ธฐ๋ฒ
- ์ดํดํ๊ธฐ ์ฝ๊ณ , ํ๋ก๊ทธ๋๋ฐ ๋ฐ ์ค๊ณ๊ฐ ๊ฐ๋จํจ
LRU (Least Recently Used)
- ์ต๊ทผ์ ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉํ์ง ์์ ํ์ด์ง๋ฅผ ๊ต์ฒด
- ๊ฐ ํ์ด์ง๋ง๋ค ๊ณ์๊ธฐ(Counter)๋ ์คํ(Stack)์ ๋์ด ํ ์์ ์์ ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉํ์ง ์์ ์ฆ ๊ฐ์ฅ ์ค๋ ์ ์ ์ฌ์ฉํ ํ์ด์ง ๊ต์ฒด
LFU (Least Frequently Used)
- ์ฌ์ฉ ๋น๋๊ฐ ๊ฐ์ฅ ์ ์ ํ์ด์ง๋ฅผ ๊ต์ฒด
- ํ๋ฐํ๊ฒ ์ฌ์ฉ๋๋ ํ์ด์ง๋ ์ฌ์ฉ ํ์๊ฐ ๋ง์ ๊ต์ฒด๋์ง ์๊ณ ๊ณ์ ์ฌ์ฉ๋จ
NUR (Not Used Recently)
- LRU์ ๋น์ทํ ์๊ณ ๋ฆฌ์ฆ. ์ต๊ทผ์ ์ฌ์ฉํ์ง ์์ ํ์ด์ง ๊ต์ฒด
- ์ต๊ทผ์ ์ฌ์ฉ๋์ง ์์ ํ์ด์ง๋ ํฅํ์๋ ์ฌ์ฉ๋์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ๊ฒ์ ์ ์ ๋ก ํจ ⇒ LRU์์ ๋ํ๋๋ ์๊ฐ์ ์ธ ์ค๋ฒํค๋ ์ค์ผ ์ ์์
- ์ต๊ทผ ์ฌ์ฉ ์ฌ๋ถ ํ์ธ์ ์ํด ๊ฐ ํ์ด์ง๋ง๋ค ๋ ๊ฐ์ ๋นํธ, ์ฆ ์ฐธ์กฐ ๋นํธ(Reference Bit)์ ๋ณํ ๋นํธ(Modified Bit, Dirty Bit)๊ฐ ์ฌ์ฉ๋จ
- ์ฐธ์กฐ ๋นํธ : ํ์ด์ง๊ฐ ํธ์ถ๋์ง ์์์ ๋๋ 0, ํธ์ถ๋๋ฉด 1
- ๋ณํ ๋นํธ : ํ์ด์ง ๋ด์ฉ์ด ๋ณ๊ฒฝ๋์ง ์์์ ๋๋ 0, ๋ณ๊ฒฝ๋๋ฉด 1
์ฐธ์กฐ ๋นํธ 0 0 1 1 ๋ณํ ๋นํธ 0 1 0 1 ๊ต์ฒด ์์ 1 2 3 4
SCR (Second Chance Replacement, 2์ฐจ ๊ธฐํ ๊ต์ฒด)
- ๊ฐ์ฅ ์ค๋ซ๋์ ์ฃผ๊ธฐ์ต์ฅ์น์ ์๋ ํ์ด์ง ์ค ์์ฃผ ์ฌ์ฉ๋๋ ํ์ด์ง์ ๊ต์ฒด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ธฐ๋ฒ
- FIFO ๊ธฐ๋ฒ์ ๋จ์ ์ ๋ณด์ํ๋ ๋ฐ์ ์ฌ์ฉ๋จ
์ฃผ๊ธฐ์ต์ฅ์น ํ ๋น ๊ธฐ๋ฒ
ํ๋ก๊ทธ๋จ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์คํ์ํค๊ธฐ ์ํด ์ฃผ๊ธฐ์ต์ฅ์น์ ์ด๋ป๊ฒ ํ ๋นํ ๊ฒ์ธ์ง
1. ์ฐ์ ํ ๋น ๊ธฐ๋ฒ
ํ๋ก๊ทธ๋จ์ ์ฃผ๊ธฐ์ต์ฅ์น์ ์ฐ์์ผ๋ก ํ ๋น
⇒ ๋จํธํ*๊ฐ ๋ฐ์ํ ์ ์๋ค.
1 - a. ๋จ์ผ ๋ถํ ํ ๋น ๊ธฐ๋ฒ
์ฃผ๊ธฐ์ต์ฅ์น๋ฅผ ์ด์์ฒด์ ์์ญ๊ณผ ์ฌ์ฉ์์์ญ์ผ๋ก ๋๋์ด ํ ์๊ฐ์๋ ์ค์ง ํ ๋ช ์ ์ฌ์ฉ์๋ง์ด ์ฃผ๊ธฐ์ต์ฅ์น ์ฌ์ฉ์ ์์ญ์ ์ฌ์ฉํ๋ ๊ธฐ๋ฒ
- ๊ฐ์ฅ ๋จ์ํ ๊ธฐ๋ฒ์ผ๋ก ์ด๊ธฐ์ ์ด์์ฒด์ ์์ ๋ง์ด ์ฌ์ฉํ๋ ๊ธฐ๋ฒ
- ์ข
๋ฅ
- ์ค๋ฒ๋ ์ด(Overlay) ๊ธฐ๋ฒ : ์ฃผ๊ธฐ์ต์ฅ์น๋ณด๋ค ํฐ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ ์คํ์
- ์ค์ํ(Swapping) ๊ธฐ๋ฒ : ํ ํ๋ก๊ทธ๋จ ์ ์ฒด๋ฅผ ์ฃผ๊ธฐ์ต์ฅ์น์ ํ ๋นํ์ฌ ์ฌ์ฉํ๋ค ํ์์ ๋ฐ๋ผ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ๊ณผ ๊ต์ฒด
- ๊ฒฝ๊ณ ๋ ์ง์คํฐ : ์ด์์ฒด์ ๋ณดํธ ๋ฐ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉ์์์ญ๋ง์ ์ฌ์ฉํ๊ฒ ํ๊ธฐ ์ํด ์ด์์ฒด์ ์์ญ๊ณผ ์ฌ์ฉ์ ์์ญ์ ๊ตฌ๋ถํ๋ ๋ถ๋ถ
๋ ์ง์คํฐ(Register) : CPU๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ผ์์ ์ผ๋ก ์ ์ฅํ๋ ๊ธฐ์ต์ฅ์น. ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์์ ๋ช
๋ น์ ์ข
๋ฅ ๋ฑ์ ์ ์ฅํ ์ ์๋ ๊ธฐ์ต ๊ณต๊ฐ์ด๋ค
1 - b. ๋ค์ค ๋ถํ ํ ๋น ๊ธฐ๋ฒ
- ์ ์ ํ ๋น ๊ธฐ๋ฒ ( = ๊ณ ์ ๋ถํ ํ ๋น ๊ธฐ๋ฒ) : ํ๋ก๊ทธ๋จ ํ ๋น ์ ์ด์์ฒด์ ๊ฐ ์ฃผ๊ธฐ์ต์ฅ์น ์์ญ์ ๊ณ ์ ๋ ํฌ๊ธฐ๋ก ๋ถํ ํ๊ณ , ์ค๋น์ค์ธ ํ๋ก๊ทธ๋จ์ ๊ฐ ์์ญ์ ํ ๋นํ์ฌ ์ํ
- ๋์ ํ ๋น ๊ธฐ๋ฒ ( = ๊ฐ๋ณ ๋ถํ ํ ๋น ๊ธฐ๋ฒ) : ์ฃผ๊ธฐ์ต์ฅ์น๋ฅผ ๋ฏธ๋ฆฌ ๋ถํ ํด๋์ง ์๊ณ , ํ๋ก๊ทธ๋จ์ ์ ์ฌํ ์ ํ์ํ ๋งํผ์ ํฌ๊ธฐ๋ก ์์ญ์ ๋ถํ . ๊ณ ์ ๋ถํ ํ ๋น ๊ธฐ๋ฒ์ ๋จํธํ๋ฅผ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉ๋จ
2. ๋ถ์ฐ ํ ๋น ๊ธฐ๋ฒ
ํ๋ก๊ทธ๋จ์ ํน์ ๋จ์์ ์กฐ๊ฐ์ผ๋ก ๋๋์ด ์ฃผ๊ธฐ์ต์ฅ์น์ ๋ถ์ฐํ์ฌ ํ ๋น
- ํ์ด์ง ๊ธฐ๋ฒ
- ์ธ๊ทธ๋จผํ ์ด์ ๊ธฐ๋ฒ