๊ฐ์ ๋ฉ๋ชจ๋ฆฌ (virtual memory)
๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ํ๋ก์ธ์ค๊ฐ ๊ฐ์์ ๊ณต๊ฐ์ ์ฐธ์กฐํ์ฌ ๋ง์น ์ปค๋ค๋ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๊ณ ์๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค. ์ฆ, ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ง์๋ณด์ด๊ฒ ํ๋ ๊ธฐ์ !
๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ถ์ฐ์ ํ ๋น ๋ฐฉ์์ ํตํด ๊ด๋ฆฌ๋์ด, ์ฐ์ ํ ๋น ๋ฐฉ์์์ ๋ฐ์ํ๋ ๋จํธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์์๋ค. ๋ถ์ฐ์ ํ ๋น ๋ฐฉ์์ ๋ํ์ ์ธ ์๋ก๋ ํ์ด์ง(paging)๊ณผ ์ธ๊ทธ๋ฉํ ์ด์ (segmentation)๊ธฐ๋ฒ์ด ์๋ค.
ํ์ด์ง (paging)
ํ์ด์ง์ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ page ๋จ์๋ก ๋๋์ด์ page์ ๋์ผํ ํฌ๊ธฐ์ frame ๋จ์๋ก ๋๋ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ์ฐ์์ ์ผ๋ก ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ์ด๋ค. ํ์ด์ง์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ , ์ธ๋ถ ๋จํธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ ๋์์ ์ค๋ค.
ํ์ด์ง ํ ์ด๋ธ
๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ํ์ด์ง๋ฅผ ์ฝ๊ฒ ์ฐพ์๊ฐ๊ธฐ ์ํด์ ํ์ด์ง ๋ฒํธ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ณต๊ฐ์ ๊ธฐ๋กํด๋ ๊ฒ์ ํ์ด์ง ํ ์ด๋ธ์ด๋ผ๊ณ ํ๋ค. ํ์ด์ง ํ ์ด๋ธ๋ ์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์กด์ฌํ๊ณ , ํ์ด์ง ํ ์ด๋ธ์ ์์ ์ฃผ์๋ฅผ page table base register๋ผ๊ณ ํ๋ ๋ ์ง์คํฐ์ ์ ์ฅํด๋๋ค. ํ์ด์ง๋ฅผ ์ฐพ๊ธฐ ์ํด ํ์ด์ง ํ ์ด๋ธ์ ์ ๊ทผํ์ฌ ์ฒซ๋ฒ์งธ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ(์ฐธ์กฐ)์ด ๋ฐ์ํ๊ณ , ๊ฑฐ๊ธฐ์ ์ป์ ๋ฌผ๋ฆฌ์ฃผ์๋ก ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ๋๋ฒ์งธ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ(์ฐธ์กฐ)์ด ๋ฐ์ํ๋ค.
์ด๋ฌํ ๋นํจ์จ์ ์ธ ์ฐธ์กฐ๋ฅผ ์ค์ด๊ธฐ ์ํด TLB๋ผ๋ ํ๋์จ์ด๊ฐ CPU๋ด์ ์กด์ฌํ๋ค. ์์ฃผ ์์ฒญ์ด ๋ค์ด์ค๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ ผ๋ฆฌ ์ฃผ์์ ๋ฌผ๋ฆฌ ์ฃผ์๋ฅผ ์บ์ฑํ์ฌ ํ์ด์ง ํ ์ด๋ธ์ ์ฐพ์ผ๋ฌ ๊ฐ์ง ์๊ณ ๋ ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ์ ์๊ฒ ํด์ค๋ค. TLB๋ก ์ธํด CPU๋ ๋ด๋ถ์ ์ผ๋ก ์ฃผ์ ๋ณํ์ ํ ์ ์์ด ์์ฒญ์ ๋ ๋นจ๋ฆฌ ์ฒ๋ฆฌํ ์ ์๋ค.
ํ์ด์ง์ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ (memory fragmentation)
ํ์ด์ง์ ํ๋ ์์ ํฌ๊ธฐ๊ฐ ๊ฐ๊ธฐ ๋๋ฌธ์ ํ์ด์ง ๊ธฐ๋ฒ์์๋ ์ธ๋ถ ๋จํธํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ํ์ง๋ง, ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์ ํฌ๊ธฐ๊ฐ ํ์ด์ง์ ํฌ๊ธฐ ๋ฐฐ์๋ผ๋ ๋ณด์ฅ์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ์์นํ ํ์ด์ง์์๋ ๋ด๋ถ ๋จํธํ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
์ธ๊ทธ๋ฉํ ์ด์ (segmentation)
์ธ๊ทธ๋ฉํ ์ด์ ์ ํ๋ก์ธ์ค๋ฅผ ๋ ผ๋ฆฌ์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ๋๋์ด์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ์ฐ์์ ์ผ๋ก ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฒ์ด๋ค.
ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ Code, Data, Heap, Stack ์์ญ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋๋ฐ ์ด๋ฌํ ๋ ผ๋ฆฌ์ ์์ญ(์งํฉ)์ ์ธ๊ทธ๋จผํธ๋ผ๊ณ ํ๋ค. Code, Data ๋ฑ ์ธ๊ทธ๋จผํธ๋ค ๋ด๋ถ์์๋ ๋ ์์ ์ธ๊ทธ๋จผํธ๋ก ๋๋ ์๋ ์๋ค.
์ธ๊ทธ๋จผํธ๋ ๋ ผ๋ฆฌ์ ์ธ ๋ด์ฉ ๊ธฐ๋ฐ์ผ๋ก ๋๋ ๋ฐ์ดํฐ๋ค์ด๊ธฐ ๋๋ฌธ์ ํฌ๊ธฐ๊ฐ ๋ค ๋ค๋ฅด๋ค.
์ธ๊ทธ๋จผํธ ํ ์ด๋ธ
์ธ๊ทธ๋จผํธ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๋ ๋ฐฉ์์ ํ์ด์ง๋ฅผ ํ ๋นํ๋ ๊ฒ๊ณผ ๋์ผํ๋ค. ์ธ๊ทธ๋จผํธ ํ ์ด๋ธ์ ์ธ๊ทธ๋จผํธ์ ๋ฒํธ, ์์ ์ฃผ์, ์ธ๊ทธ๋จผํธ ํฌ๊ธฐ๋ฅผ ์ํธ๋ฆฌ๋ก ๊ฐ๋๋ค.
ex) ์ธ๊ทธ๋จผํธ 0๋ฒ์ ์์น๋? ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ 1400๋ฒ์ง๋ถํฐ ํฌ๊ธฐ๊ฐ 1000๋งํผ ์ธ๊ทธ๋จผํธ 0๋ฒ์ด ํ ๋น๋์ด ์๋ค.
์ธ๊ทธ๋ฉํ ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ (memory fragmentation)
์ธ๊ทธ๋ฉํ ์ด์ ์ ์ธ๋ถ ๋จํธํ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ํ์ง๋ง, ์ธ๊ทธ๋จผํธ ํฌ๊ธฐ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ ๋จํธํ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
๋ณดํธ์ ๊ณต์
๋ณดํธ
๋ชจ๋ ์ฃผ์๋ ํ์ด์ง/์ธ๊ทธ๋ฉํ ์ด์ ํ ์ด๋ธ์ ๊ฒฝ์ ํ๋ฏ๋ก, ํ ์ด๋ธ์ ์ด์ฉํด์ ๋ณดํธ๊ธฐ๋ฅ์ ์ํํ ์ ์๋ค. ๋ํ์ ์ผ๋ก ํ ์ด๋ธ๋ง๋ค r(read), w(wrtie), x(execute) ๋นํธ๋ฅผ ๋์ด ํด๋น ๋นํธ๊ฐ ์ผ์ ธ์์๋(1์ผ๋) ๊ทธ ์ํ์ด ๊ฐ๋ฅํ๋ค.
๊ณต์
๊ณต์ ๋ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํจ์ด๋ค. ๊ฐ์ ํ๋ก๊ทธ๋จ์ ์ฐ๋ ๋ณต์ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์์ ๊ฒฝ์ฐ, ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ์ Code ์์ญ์ ๊ฐ์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํ๋์ Code ์์ญ์ ๋ณต์๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์ค์ผ ์ ์๋ค. ์ด๋ฅผ non-self-modifying-code, reentrant code(์ฌ์ง์ ๊ฐ๋ฅ ์ฝ๋), pure code๋ผ๊ณ ํ๋ค.
ํ์ด์ง๋ณด๋ค ์ธ๊ทธ๋ฉํ ์ด์ ์ด ๋ณดํธ์ ๊ณต์ ์ ํจ์จ์ ์ด๋ค. ๊ทธ ์ด์ ๋ ์ธ๊ทธ๋ฉํ ์ด์ ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋๋๊ธฐ ๋๋ฌธ์ r, w, x ๋นํธ ์ค์ ์ด ๊ฐ๋จํ๋ค. ๋ฐ๋ฉด ํ์ด์ง์ ํ ํ์ด์ง๋ด์์ ์ฌ๋ฌ ์์ญ์ด ์์ผ ์ ์๊ธฐ ๋๋ฌธ์ ์ค์ ์ด ๊น๋ค๋กญ๋ค.
๊ทธ๋ฌ๋ ํ์ฌ ๋๋ถ๋ถ ํ์ด์ง ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค. ์๋ํ๋ฉด ์ธ๊ทธ๋ฉํ ์ด์ ์ ์ธ๋ถ ๋จํธํ ๋ฌธ์ ๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ด์ง๋ ์ธ๊ทธ๋ฉํ ์ด์ (paged segmentation)
์ธ๊ทธ๋ฉํ ์ด์ ์ ๋ณดํธ์ ๊ณต์ ์ ํจ์จ์ ์ด๊ณ , ํ์ด์ง์ ์ธ๋ถ ๋จํธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ์ด ๋ ๊ฐ์ง๋ฅผ ํฉ์ณ์ ๋์จ๊ฒ ์ธ๊ทธ๋จผํธ๋ฅผ ํ์ด์ง ๊ธฐ๋ฒ์ผ๋ก ๋๋๋ ํ์ด์ง๋ ์ธ๊ทธ๋ฉํ ์ด์ ์ด๋ค.
ํ์ง๋ง ์ด ์ญ์ ๋จ์ ์ด ์กด์ฌํ๋ค. ์ธ๊ทธ๋จผํธ์ ํ์ด์ง๊ฐ ๋์์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ฃผ์ ๋ณํ๋ ๋ ๋ฒํด์ผ ํ๋ค. CPU ์์ ์ธ๊ทธ๋จผํธ ํ ์ด๋ธ์์ ์ฃผ์ ๋ณํ์ ํ๊ณ , ๊ทธ ๋ค์ ํ์ด์ง ํ ์ด๋ธ์์ ๋ ์ฃผ์ ๋ณํ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ ์๋ ์ธก๋ฉด์์๋ ํจ์จ์ด ๋จ์ด์ง๋ค.
๐ ์ฐธ๊ณ ๋งํฌ
[์ด์์ฒด์ 12ํธ] ํ์ด์ง ์ธ๊ทธ๋จผํ ์ด์ (๋ถ์ฐ์ ํ ๋น ๋ฐฉ์)
์๋ ํ์ธ์! ๊ฐ๋ฐ์ ๋ฐฐ์จ์ ๋๋ค~ ์ ๋ฒ์๊ฐ์๋ ์ฐ์ํ ๋น์ด๋ผ๋ ๊ฒ์ ๋ฐฐ์๋ดค์ด์ ใ ใ ์ด๋ฒ ์๊ฐ์๋ ์ฐ์ํ ๋น์ ๋ฐ๋๋๋ ๋ถ์ฐ์ํ ๋น์ ๋ํด์ ๋ฐฐ์ ๋ณด๋ ค๊ณ ํฉ๋๋ค!! ๋ค์ด๊ฐ๋ด ์๋ค ๋ถ์ฐ์ ํ ๋น
baebalja.tistory.com
Ready-For-Tech-Interview/Operating System/Paging_Segmentation.md at master · WooVictory/Ready-For-Tech-Interview
๐ป ์ ์ ๊ฐ๋ฐ์๋ก์ ์ง์์ ์๊ธฐ ์ํด ๊ณต๋ถํ๋ ๊ณต๊ฐ ๐จ๐ป. Contribute to WooVictory/Ready-For-Tech-Interview development by creating an account on GitHub.
github.com