๋ชฉ์ฐจ
- ๐ค MMU(Memory Management Unit)๋?
- ๐ ์ฐ์ ํ ๋น(Contiguous allocation)
- ๐ Memory protection fault
๐ค MMU(Memory Management Unit)๋?
MMU(Memory Management Unit)๋ CPU ๋ด๋ถ์ ํ์ฌ๋์ด ๋ ผ๋ฆฌ ์ฃผ์(Logical Address)๋ฅผ ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฌผ๋ฆฌ ์ฃผ์(Physical Address)๋ก ๋ณํํด์ฃผ๋ ํ๋์จ์ด์ ๋๋ค.
์ด์ ํฌ์คํ ์ ๊ณต๋ถํ๋ฏ์ด, Execution time binding์ ์ค์ ๋ก ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ์์ ์ ์ฃผ์ ๋ณํ์ ํ๋ Address binding ๊ธฐ๋ฒ์ ๋๋ค.
์ ๊ทธ๋ฆผ์์๋ 0x198000๋ฒ์ง์ ์ ์ฅ๋์ด ์๋ data์ 10์ ์ ์ฅํ๊ธฐ ์ํด store #98000, 10 ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
ํ์ง๋ง ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด 98000๋ฒ์ง๋ฅผ ์ฐธ์กฐํ๋ค๊ณ ์์ฑ๋์ด ์์ง๋ง, ์ด๋ ์๋ ์ฃผ์, ๋ ผ๋ฆฌ ์ฃผ์๋ก ์ค์ data์ ๋ฌผ๋ฆฌ ์ฃผ์๊ฐ ์๋๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ CPU๋ ๋ช ๋ น์ ์คํํ ๋, MMU๋ฅผ ๊ฑฐ์ณ์ ์๋์ฃผ์์ ํ๋ก๊ทธ๋จ์ ์์ ์ฃผ์๋ฅผ base๋ก ๋ํ์ฌ ๋ฌผ๋ฆฌ ์ฃผ์๋ฅผ ํ์ํ ์๊ฐ๋ง๋ค ๋ณํํฉ๋๋ค. (= Base + ๋ ผ๋ฆฌ ์ฃผ์)
์ด๋ฌํ ๋ฐฉ์์ Load time binding๊ณผ ๋ฌ๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ์ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฆด ๋ ์ฃผ์ ๋ณํ์ ํ ๋ฒ์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฌ ์ ์ค๋ฒํค๋๊ฐ ๊ฐ์ํ๋ค๋ ์ฌ์ค์ ์ ์ ์์์ต๋๋ค.
๋ค์ ๋งํด, Contiguous allocation์ ์ฌ์ฉํ๋ ๊ณผ์ ์์ MMU๊ฐ ๋ ผ๋ฆฌ ์ฃผ์๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์๋ก ๋ณํํด์ฃผ๋ ๊ณผ์ ์ ๋์ ํด์ค๋๋ค.
๐ Memory protection fault
MMU๋ ์์์ ์ค๋ช ํ ์ฃผ์ ๋ณํ๋ฟ๋ง ์๋๋ผ ๋ ผ๋ฆฌ ์ฃผ์๊ฐ ์ฌ๋ฐ๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ ค๊ณ ํ๋๊ฐ์ ๋ํด์๋ ๊ฒ์ฆํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
์ ๊ทธ๋ฆผ์ฒ๋ผ CPU๊ฐ ๋ง๋ค์ด๋ธ Logical address๊ฐ Base address๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์์ง, Base + Limit ๋ณด๋ค ์์์ง ํ์ธํ๋ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค.
์ฌ๊ธฐ์ base register์๋ ํ๋ก์ธ์ค์ ์์ ์ฃผ์, limit register์๋ ํ๋ก์ธ์ค์ ํฌ๊ธฐ๊ฐ ๋ด๊ฒจ ์์ต๋๋ค.
์ฆ, ๋ฉ๋ชจ๋ฆฌ์์ ํ๋ก์ธ์ค์ ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง ์๋์ง ๊ฒ์ฆํ๋ ๊ณผ์ ์ ๊ฑฐ์น๊ณ ๋์, ๋ณํํ ๊ฐ์ CPU์ PC๋ก ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก OS๋ ํ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์นจ๋ฒํ๋ ๊ฒ์ ํ์ฉํ์ง ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๋ ผ๋ฆฌ ์ฃผ์๊ฐ ์ ๋ฌ๋๋ฉด Memory protection fault๊ฐ ๋ฐ์ํฉ๋๋ค.
Memory protection fault๋ CPU๊ฐ ์์ ์๊ฒ ๋ฐ์์ํค๋ Interrupt์ ๋๋ค.
CPU๋ CPU Dispatcher๊ฐ PC๋ก ๊ฐ์ ธ์จ ๋ช ๋ น์ด๋ฅผ ์คํ์ํค๋ ๊ธฐ๋ฅ๋ฐ์ ํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ์์ธ ์ํฉ์์ ๋ฌด์ธ๊ฐ ์กฐ์นํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ CPU๋ ์๊ธฐ ์์ ์๊ฒ ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์์ผ์ OS๊ฐ ๋์ ์ฒ๋ฆฌํ๋๋ก ์์ฒญํ๋ ๊ฒ์ ๋๋ค.
์ด๋ฅผ Memory protection fault ๋๋ Exception, trap์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
๐ ์ฐ์ ํ ๋น(Contiguous allocation)
์์์ MMU์ ์ฃผ์ ๋ณํ ๊ณผ์ ์ ๋ชจ๋ ์ฐ์ ํ ๋น์ธ ๊ฒฝ์ฐ์ ํด๋น์ด ๋ฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฐ์ ํ ๋น(Contiguous allocation)์ ๋ฌด์์ผ๊น์?
์ฐ์ , ์ต์ OS์ ๋ฌ๋ฆฌ, ๊ณผ๊ฑฐ์๋ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ์ ํต์งธ๋ก ์ฌ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ์ฑํํ์ต๋๋ค.
0x100000๋ฒ์ง์ ํ๋ก๊ทธ๋จ์ ์ ์ฌ์์ผฐ๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ฌ์ด์ ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์์ฌ ์์ง ์๊ณ ์ค์ง ํ๋์ ํ๋ก์ธ์ค๊ฐ ์ฐ์ด์ด ์กด์ฌํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Contiguous allocation ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉด, MMU๋ ๋จ์ํ Base(0x100000) ๋ ์ง์คํฐ์ ๊ฐ์ ๋ ผ๋ฆฌ ์ฃผ์(0x98000)๋ฅผ ๋ํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋ฌผ๋ฆฌ์ฃผ์(0x198000)๋ฅผ ๊ตฌํ ์ ์์์ต๋๋ค.
Simplicity comes at a loss.
ํ์ง๋ง ๋จ์ํจ์๋ ์์ค์ด ๋ฐ๋ฅด๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ ๋๋ค.
Contiguous allocation์ MMU๋ฅผ ๋ณด๋ค ๋จ์ํํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง ์คํ๋ ค ์ฌ์ด์ฌ์ด์ ์๊ธฐ๋ ๋น ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ(Hole)์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ชปํ๋ ์ธ๋ถ ๋จํธํ(External fragmentation) ์ด์๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ค์ ๋งํ์๋ฉด, OS๋ HW ์์์ ์ต๋ํ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๋ชฉ์ ์ธ๋ฐ, ์ฐ์ ํ ๋น ๊ธฐ๋ฒ์ ๋จ์ํจ๋ง ์ ๊ณตํ ๋ฟ ํจ์จ์ ์ป์ง๋ ๋ชปํ๋ ๊ฒ์ ๋๋ค.
๋ค์ ํฌ์คํ ์์๋ Contiguous allocation ๊ธฐ๋ฒ์ ์ฌ์ฉํจ์ผ๋ก์จ ๋ฐ์ํ๋ ์ธ๋ถ ๋จํธํ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
github : https://github.com/tmdgh1592