[CS] ์ปดํจํฐ ๊ตฌ์กฐ์ ์ฑ๋ฅํฅ์
๐ ํด๋น ํฌ์คํ ์ YouTube ์ฑ๋ ๋๋ํ ๊ฐ๋ฐ์๋์ด ์ ๊ณตํ์๋ ๋ฌด๋ฃ ๊ฐ์ ์์์ธ ์ด์์ฒด์ ์ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์์์ ๋ณด๊ณ ๊ฐ์ธ์ ์ธ ์ ๋ฆฌ ๋ชฉ์ ํ์ ์์ฑ๋์์ต๋๋ค. ํ๋จ์ ์ฌ์ฉ๋ ์๋ฃ๋ ํ์๊ฐ ์ง์ ์ฌ๊ตฌ์ฑํ ์๋ฃ์์ ์๋ฆฝ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ์ปดํจํฐ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๋ฉด์ ์ปดํจํฐ์ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ์ด๋ค ๊ตฌ์กฐ๋ก ์๋ํ๋์ง, ๋ ์ฑ๋ฅ ํฅ์ํ๋ ๊ณผ์ ์์ ์ญ์ฌ์ ์ผ๋ก ๋ฑ์ฅํด์๋ ์๋ก์ด ๊ฐ๋ ๋ค์ ๋ํด์๋ ์ดํดํด๋ณธ๋ค.
1. ์ปดํจํฐ๋ 3์ธต ๊ตฌ์กฐ์ด๋ค
์ปดํจํฐ๋ ํฌ๊ฒ 3์ธต ๊ตฌ์กฐ๋ก ๋์ด ์๋ค. ์๋ ๊ทธ๋ฆผ์ ๋ณด์. ์๋ฅผ ๋ค์ด, ํ์ด์ฌ์ print() ๋ฌธ์ ํธ์ถํ์ ๋, ์ปดํจํฐ๋ ์ด๋ค ๊ณผ์ ์ผ๋ก ์งํ๋๋์ง ์ดํด๋ณด์.(๋ฌผ๋ก ์๋๋ณด๋ค ๋ ์ธ์ธํ ๋จ๊ณ๊ฐ ์์ ์ ๋ฐ์ ์๋ค. ๋จ์ง ๊ฐ์ ์์์ ๋ค๋ฃจ๋ ๋ด์ฉ๊น์ง๋ง ๋ฐ์ํ์๋ค)
์ ๊ทธ๋ฆผ์ด ์ค๋ช ํ๋ ๊ฒ ์ธ์ ๋ถ๊ฐ์ ์ผ๋ก ์ค๋ช ํ ๋ถ๋ถ๋ค์ ๋ฐ๋ก Interrupt ์ ๊ดํ ๋ด์ฉ์ด๋ค. ์ธํฐ๋ฝํธ์๋ ์ฌ๋ฌ๊ฐ์ง ์ข ๋ฅ๊ฐ ์์ง๋ง ์ฐ๋ฆฌ๋ ์ปดํจํฐ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ์ํฉ์์ ํํ๊ฒ ์ธํฐ๋ฝํธ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค. ์๋ฅผ ๋ค์ด, ์ ์์ ๋๋ ๊ฒ๋ ์ธํฐ๋ฝํธ์ด๋ฉฐ, ์ค๋ซ๋์ ์คํ์ค์ธ ์ฝ๋๋ฅผ Ctrl + c ํค๋ฅผ ๋๋ฌ์ ์ข ๋ฃ์ํค๋ ๊ฒ๋ ์ธํฐ๋ฝํธ์ด๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ์คํ์ค์ธ ์์ ์ ์ข ๋ฃ์ํค๋ ๊ฒ๋ ์ธํฐ๋ฝํธ ๋์์ด์ง๋ง, ์ด๋ค ์์ ์ ์คํ์ํค๊ธฐ ์ํด ํ๊ณ ์๋ ์์ ์ ์ค์ง์ํค๋ ๊ฒ๋ ์ธํฐ๋ฝํธ์ด๋ค. ์ฃผ๋ก CPU๋ ์ฃผ๋ณ๊ธฐ๊ธฐ์๊ฒ ์ธํฐ๋ฝํธ ์์ฒญ์ ์ํํ๋ค.
์ ๊ทธ๋ฆผ์์๋ print("Hello world") ๋ผ๋ ์์ ์ ์ํํ๊ธฐ ์ํด ๋จผ์ CPU์๊ฒ ์ธํฐ๋ฝํธ๋ฅผ ์์ฒญํ๋ค. ๊ทธ๋ฆฌ๊ณ CPU๋ ํ๊ณ ์๋ ๋ค๋ฅธ ์์ ์ ์ ์ ์ค์งํ๊ณ ์์ฒญํ ์์ ์ ์ํํ๋ค. ์ธํฐ๋ฝํธ๋ ์ฅ์น๋ง๋ค ๋ค๋ฅด์ง๋ง ๊ณ ์ ํ ๋ฒํธ๋ฅผ ๊ฐ๊ณ ์๊ธฐ๋ ํ๋ค.
2. CPU์ RAM ์ฌ์ด์ ํต์ ์ ๋ด๋นํ๋ค : Memory Manager
ํ๋์จ์ด๋ฅผ ๊ตฌ์ฑํ๋ CPU์ RAM์ ์ง์ ์ ์ผ๋ก ์ํตํ๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง, ์๋ฐํ ๋งํ๋ฉด ์ค๊ฐ์ ๋๊ตฐ๊ฐ๋ฅผ ํตํด์ ๊ฐ์ ์ํต์ ํ๊ณ ์๋ค. ๊ทธ ์ค๊ฐ์ ์ญํ ์ ํ๋ ๊ฒ์ด ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ ๋งค๋์ ์ด๋ค. ์ฆ, ๋ฉ๋ชจ๋ฆฌ ๋งค๋์ ๋ ์์์ ๋ฐฐ์ด ์ธํฐ๋ฝํธ ์์ฒญ์ CPU์ RAM ๊ฐ์ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด์ ์๋ก ์์ฒญํ ์์ ์ ์ํํ๊ณ ๋๊ฒจ์ค๋ค.
์ด ๋ฉ๋ชจ๋ฆฌ ๋งค๋์ ๋ ์ค์ ๋ก ๋ฉ์ธ๋ณด๋์ ์์นํ๋ฉฐ, ๊ทธ๋์ ์ค์ ๋ก CPU์ RAM์ ์ฑ๋ฅ์ ๋งค์ฐ ์ข์ ๊ฑธ ์ฅ์ฐฉํด๋ ๋ง์ฝ ๋ฉ์ธ๋ณด๋์ ์ฅ์ฐฉ๋ ๋ฉ๋ชจ๋ฆฌ ๋งค๋์ ์ ์ฑ๋ฅ์ด ์ข์ง ์๋ค๋ฉด ์ข์ CPU์ RAM์ ์ฑ๋ฅ์ 100% ํ์ฉํ ์ ์๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
ํ์ง๋ง ์ด๋ฌํ ๊ตฌ์กฐ๋ ๊ฒ์๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋งค์ฐ ๋ง์ด ์ฒ๋ฆฌํ ๋๋ ์์ ๊ฐ์ ๊ตฌ์กฐ๊ฐ ๋นํจ์จ์ ์ผ ์ ์๋ค. ์๋ํ๋ฉด ์ธํฐ๋ฝํธ๊ฐ ๊ทธ๋งํผ ์์ฃผ ๋ฐ์ํ๊ณ , ์ธํฐ๋ฝํธ๋ ๋ ๋ค๋ฅธ ๋ง๋ก '์ง์ฐ(delay)์ ๋ฐ์์ํจ๋ค' ๋ผ๋ ๋ป์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ I/O ์ฑ๋ฅ ํฅ์์ ์ํด์ ์ ๊ทธ๋ฆผ์์ ๋ฐฐ์ด ์์คํ ์ฝ์ ์ง์ ํ๋ ์ง์ ์ User ๋จ์์ ๋ฐ๋ก ํธ์ถํ๊ฒ ํ ์ ์๋ Direct X๊ฐ ๊ฐ๋ฐ๋์์๋ค. ์ด Direct X ๊ฐ ๋ฑ์ฅํ๋ฉด์ ๊ฐ์ด ๋์ค๋ ๊ด๋ จ ๊ฐ๋ ์ด ๋ฐ๋ก DMA(Direct Memory Access)์ด๋ค. ์ด๋ฒ์ ์ด DMA์ ๋ํด์๋ ๋ฐฐ์๋ณด๋๋ก ํ์.
3. DMA๋ฅผ ์๋ฉด ์์ผ์ด ๋ณด์ธ๋ค
DMA๋ ๊ฐ๋จํ๊ฒ ๋งํ๋ฉด ์ด๋ค ์ค๊ฐ์ ๊ณผ์ ์ ๋ชจ๋ ์คํตํ๊ณ ํ๋ฒ์(direct) ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ฉด์ ๋งค์ฐ ๋น ๋ฅธ I/O ์ฑ๋ฅ์ ๋ณด์ฅํ๋ ๊ฐ๋ ์ด๋ค. DMA๋ ์ฃผ๋ก NIC(Network Interface Card)์ ํจ๊ป ๋งค์ฐ ์์ฃผ ๋ฑ์ฅํ๋ค๊ณ ํ๋ค. ์๋ ๊ทธ๋ฆผ์ฒ๋ผ DMA๋ฅผ ์ฌ์ฉํ์ง ์์ ๋์ ๊ทธ๋ด ๋์ ๋คํธ์ํฌ๋ฅผ ํตํ ๋ฐ์ดํฐ ํต์ ๊ณผ์ ์ ๋น๊ตํด๋ณด์.
์ ๊ทธ๋ฆผ์ฒ๋ผ DMA๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ผ๋ฐ์ ์ธ ๊ณผ์ ๋ณด๋ค I/O Buffer์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌ, ๋ถ์ฌ๋ฃ๊ธฐ ํ๋ ๊ณผ์ ์ด ์๋ต๋๊ณ ๋ฐ๋ก RAM์ ํน์ ์์ญ์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ๋์ด I/O ์ฑ๋ฅ์ด ๋งค์ฐ ๋์์ง๋ค. ์ฐธ๊ณ ๋ก DMA๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋น์ทํ ์ฌ๋ก๋ก ์์ฆ ํด๋ผ์ฐ๋ ์ ํ๋ค์ด ์์ฃผ ์ฑํํ๋ ๊ฐ์ํ๋ฅผ ์ด์ฉํ๋ ์ด์ ๋ฅผ ๋ค ์ ์๋ค. ๊ฐ์ํ๋ฅผ ์ด์ฉํ๊ฒ ๋๋ฉด ๊ฐ์ ํ๋์จ์ด์ RAM์์ ์ฌ๋ฌ๊ฐ์ ๊ฐ์๋จธ์ ์ด ๋๋์ด ๊ฐ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ DMA ์ฒ๋ผ ์ฑ๋ฅ์ด ๋งค์ฐ ๋นจ๋ผ์ง๊ฒ ๋๋ ํน์ง์ด ์๋ค.
4. CPU๋ ์ฌ๋์ฒ๋ผ ๋ฏธ๋ฆฌ ํ๋์ ์์ธกํ๊ณ ์์ง์ธ๋ค!
CPU ๋ด๋ถ์๋ L1 ~ L3 ๋ผ๋ ์บ์ฑ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์กด์ฌํ๋ค.(๋ฌผ๋ก ๋ ์ง์คํฐ๋ ์ ์ฅ ์ฅ์น๋ผ๊ณ ํ ์๋ ์๊ฒ ์ง๋ง ๊ฑฐ์ CPU๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ทจ๊ธํ๋ค) CPU๋ ๋ฐ๋ก ์ด ์บ์ฑ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์ฉํด์ CPU๊ฐ ํ ํ๋์ ๋ฏธ๋ฆฌ ์์ธกํ๊ณ ๊ทธ ํ๋์ ํ์๋ก ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์ค๋น(์บ์ฑ)ํ๋ค๋ ๊ฒ์ด๋ค.
์ด๊ฒ ์ด๋ป๊ฒ ๊ฐ๋ฅํ ๊ฒ์ผ๊น? ์ฝ๊ฒ ์์๋ฅผ ํตํด์ ์ดํดํด๋ณด์. ์ฐ๋ฆฌ๋ ์๋์ ๊ฐ์ ํ์ด์ฌ ์ฝ๋๋ฅผ ์คํํ๋ ค๊ณ ํ๋ค.
tmp = list(range(0, 1000))
for i in range(0, len(tmp)):
tmp[i] *= 2
0๋ถํฐ 999๊ฐ ์๋ 1000๊ฐ ๊ธธ์ด์ ๋ฐฐ์ด์ ์ ์ํ๊ณ , ์ฐ๋ฆฌ๋ ํด๋น ๋ฐฐ์ด์ ์์์ ๊ฐ๊ฐ 2๋ฅผ ๊ณฑํด์ฃผ๋ ์ฐ์ฐ์ ์ํํ๋ ค๊ณ ํ๋ค. ์ด ๋์์ ํน์ง์ ๋ฐ๋ก '๋ฐ๋ณต๋๋ ํจํด'์ด ์๋ค๋ ๊ฒ์ด๋ค. ์ฆ, CPU ์ ์ฅ์์ ์์์ 2๋ฅผ ๊ณฑํด์ฃผ๋ ์ฐ์ฐ์ 0๋ฒ์งธ, 1๋ฒ์งธ, 2๋ฒ์งธ, ... ๊ณ์ ๋ฐ๋ณต๋๋ค ๋ณด๋, CPU๋ ์ ๊ทธ๋ฌ๋ฉด 10๋ฒ์งธ, 11๋ฒ์งธ,... ๊ณ์ ์์ผ๋ก๋ ๋๊ฐ์ ์ฐ์ฐ์ ์ํํ๊ฒ ๊ฑฐ๋ ํด์, RAM์ ์ ์ฅ๋ tmp ๋ผ๋ ๋ฐฐ์ด์ ์ ์ L1 ~ L3 ์บ์์ ์ ์ฅํด๋๋ ๊ฒ์ด๋ค. ์๋ค์ํผ ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ RAM์ ๋นํด ์ ์ฅ ์ฉ๋์ ์๋ฑํ ์์ง๋ง ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด '์์ธก ๊ฐ๋ฅํ ์ํฉ'์ผ ๊ฒฝ์ฐ ์บ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ CPU๊ฐ ์ฐ์ฐ ์ํ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅํด๋๊ณ ์์ ์ ๋ณด๋ค ๋น ๋ฅด๊ฒ ์ํํ๋ค๋ ๊ฒ์ด๋ค. ์ด ๋๋ฌธ์ CPU๋ ๋ง์น ์ฌ๋์ฒ๋ผ ๋ฏธ๋ฆฌ ํด๋์ ์์ธกํ๊ณ ์์ง์ธ๋ค๊ณ ๋น์ ๋ฅผ ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง CPU์ ์ด๋ฐ ๋ฏธ๋ฆฌ ์์ธกํ๋ ๊ธฐ๋ฅ์ด ๋ง๋ฅ ์ข์ ๊ฒ๋ง์ ์๋๋ค. ์์ ์ CPU ๊ฒ์ดํธ๋ผ๋ ๋ณด์๊ด๋ จ ์ฌ๊ณ ๊ฐ ๋ฐ์ํ ์ ์ด ์๋๋ฐ, ์ด๊ฒ์ด ๋ฐ๋ก CPU์ ๋ฏธ๋ฆฌ ์์ธกํ๋ ๊ธฐ๋ฅ ๋๋ฌธ์ ๋ฐ์ํ ๊ฒ์ด๋ค. ํนํ, ๊ฐ์ ํ๋์จ์ด๋ฅผ ๊ณต์ฉ์ผ๋ก ์ฐ์ง๋ง ๋ณ๋์ GuestOS๊ฐ ์๋ ๊ฐ์ํ ํ๊ฒฝ์์ ๋ฐ์ํ๋ค๋ ๊ฒ์ด๋ค. ํต์ฌ์ ๊ฐ์ ํ๋์จ์ด๋ฅผ ์ฐ๊ฒ ๋๋ฉด 1๊ฐ์ ๊ฐ์๋จธ์ ์์ ์์นซํ๋ค๊ฐ ๋ค๋ฅธ ๊ฐ์๋จธ์ ์ ์บ์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์๋ํ๋ฉด ๊ฐ์ํ ํ๊ฒฝ ๋ด์ ์ฌ๋ฌ ๊ฐ์๋จธ์ ์ ๋ณธ์ง์ ์ผ๋ก ๊ณต์ฉ์ ํ๋์จ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. ์์ธํ ์ค๋ช ์ ๊ฐ์ ๋๋ ๋๋ฌด์ํค๋ฅผ ์ฐธ์กฐํด๋ณด๋๋ก ํ์.