4์ฅ๊น์ง๋ CPU๊ฐ ๋ฉ๋ชจ๋ฆฌ์ I/O ์ฅ์น์ ์ด๋ป๊ฒ ์ํตํ๋์ง ๊ฐ๋จํ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ดค์ด์.
ํ์ง๋ง ํ์ค ์ ์ปดํจํฐ๋ ๊ทธ๋ ๊ฒ ๋จ์ํ์ง ์์์. ๋น ๋ฅด๊ณ , ํจ์จ์ ์ด๋ฉฐ, ์ ๋ ฅ๋ ๋ ๋จน๊ณ , ๋์์ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ ์คํํด์ผ ํ์ฃ .
๊ทธ๋์ ์ปดํจํฐ ์ค๊ณ๋ ์ ์ ๋ ๋ณต์กํ ๊ธฐ์ ๊ณผ ๊ตฌ์กฐ๋ฅผ ์๊ตฌํ๊ฒ ๋์ต๋๋ค.
์ปดํจํฐ๊ฐ ๋จ์ํ ๊ณ์ฐ๋ง ํ๋ ์์ ์ ์ค๋์ ์ ์ง๋๊ฐ์ต๋๋ค. ์ด์ ์ปดํจํฐ๋ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ์๋ง์ ํ๋ก๊ทธ๋จ์ ๋์์ ์คํํ๊ณ , ๊ทธ ๊ณผ์ ์์ ๋ฉ๋ชจ๋ฆฌ๋ ํจ์จ์ ์ผ๋ก ์ ๋ฐฐ๋ถํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ฐ ๋ณต์กํ ๊ธฐ๋ฅ๋ค์ด ์ด๋ป๊ฒ ๊ฐ๋ฅํ ๊ฑธ๊น์?
๊ทธ ํต์ฌ์๋ '์ปดํจํฐ ์ํคํ ์ฒ'์ '์ด์์ฒด์ '๋ผ๋ ๋ ์ฃผ์ธ๊ณต์ด ์์ต๋๋ค. ์ํคํ ์ฒ๋ ํ๋์จ์ด์ ์ค๊ณ ์ฒ ํ, ์ด์์ฒด์ ๋ ๊ทธ๊ฒ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ํํธ์จ์ด์ ๊ด๋ฆฌ์์ ๋๋ค. ์ด ๋์ ๋ง์น ๋๊ท๋ชจ ์ฃผ๋ฐฉ์ ์ค๋น(์ํคํ ์ฒ)์ ์๋ฆฌ์ฌ์ฅ(์ด์์ฒด์ )์ฒ๋ผ ํ๋ ฅํฉ๋๋ค.
'์ปดํจํฐ ์ํคํ ์ฒ'๋ ๋ง์น ๊ณ ๋ ๊ฑด์ถ ์์์ฒ๋ผ ๋ค๋ฆด ์ ์์ง๋ง, ์ค์ ๋ก๋ CPU, ๋ฉ๋ชจ๋ฆฌ, I/O ๋ฑ์ ๊ตฌ์ฑ์์๋ฅผ ์ด๋ป๊ฒ ๋ฐฐ์นํ ์ง์ ๋ํ ์ค๊ณ ์ฒ ํ์ ๋๋ค.
โ๋๋ฆฌ์ค์์ด๋ ์ด์ค๋์์ ๋ง๊ณ , ์ง์ง ์ ๋ด์ฉ๋ฌผ ์ด์ผ๊ธฐ!โ
์ฑ๊ณต์ ์ธ ์ํคํ ์ฒ๋ ์์๊ณ , ์คํ์ ์ผ๋ก ๋๋ ๊ตฌ์กฐ๋ ์์์ด์. ๋ค์ํ ์๋๊ฐ ์์๊ธฐ์ ์ง๊ธ์ ์ปดํจํฐ๊ฐ ์กด์ฌํ๋ ๊ฑฐ์ฃ .
5์ฅ์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ์คํ ์ฅ์น์ ์ค๊ณ, ๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ ๋์์ ์คํํ๊ธฐ ์ํ ๋ฉํฐํ์คํน์ ์ง์ค์ ์ผ๋ก ๋ค๋ฃน๋๋ค.
์ปดํจํฐ ์ํคํ ์ฒ๋ ๋ผ๋, ์ด์์ฒด์ ๋ ๊ฐ๋ , ๋ฉ๋ชจ๋ฆฌ๋ ์ ๋ต์ ํต์ฌ!
์ฐ๋ฆฌ๊ฐ ํ๋ก๊ทธ๋จ์ โ๋๋ํ๊ฒโ ์คํํ ์ ์๋ ๋น๊ฒฐ์ ์ฌ๊ธฐ์ ์์ด์.
์ปดํจํฐ ์ค๊ณ์๋ ๋ ๊ฐ์ง ๋ํ์ ์ธ ๊ธธ์ด ์์ด์.
๐ ์ ๋ฆฌ:
- ํฐ ๋ ธ์ด๋ง: ๋จ์ํ์ง๋ง ๋๋ฆด ์ ์์
- ํ๋ฒ๋: ๋ณต์กํ์ง๋ง ๋ณ๋ ฌ์ฑ์ด ์ข์
์ด ๋ ๊ตฌ์กฐ์ ์ ์ผํ ์ฐจ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์ด๋ฟ์ ๋๋ค.
์ฒ์์ CPU ํ๋๋ฉด ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํ์ด์. ์ ์ฌ์ง์ ๋ ๊ตฌ์กฐ ๋ชจ๋ cpu๊ฐ ํ๋๋ฟ์ด์์ฃ . ํ์ง๋ง ์ฑ๋ฅ์ ํ๊ณ์ ๋ถ๋ชํ์ต๋๋ค.
๐ ํ๋ก๋ ์์์ง๋๋ฐ, ๋ฐ์ด์ ์ปค์ง๋ค? ์ ๋ ฅ ์ฅ๋ฒฝ ์ด์ผ๊ธฐ
๊ธฐ์ ๋ฐ์ ์ผ๋ก CPU ํ๋ก๋ ์ ์ ๋ ์์์ง๊ณ ๋นจ๋ผ์ก์ต๋๋ค. ํ์ง๋ง ์์์ง๋ฉด์ ์๊ธด ๋ฌธ์ ๋ ์์ฃ .
๋ฐ๋ก ์ ๋ ฅ ์ฅ๋ฒฝ(Power Wall) ๋๋ฌธ์ด์์.
์๋๋ ๋นจ๋ผ์ก์ง๋ง ๊ทธ๋งํผ ์ ๋ ฅ ์๋ชจ์ ๋ฐ์ด์ด ์ปค์ก์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ํ๋์ CPU์ ์ฌ๋ฌ ๊ฐ์ ์ฝ์ด๋ฅผ ๋ฃ๋ '๋ฉํฐ์ฝ์ด ํ๋ก์ธ์'๋ฅผ ๋ง๋ค์์ต๋๋ค.
์ด ์ฝ์ด๋ค์ ๊ฐ์ ๋ค๋ฅธ ์์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์์ด์ ํจ์จ์ด ํจ์ฌ ๋์์ก์ต๋๋ค.
๊ทธ๋์ ์์ฆ CPU๋ฅผ ๋ณด๋ฉด 'i5-1235U (10์ฝ์ด)' ๊ฐ์ ํํ์ ์์ฃผ ๋ณด๊ฒ ๋์ฃ .
๋ฉํฐ์ฝ์ด(Multi-core)
๋ฉํฐ ํ๋ก์ธ์
๋ฉํฐ ์ฝ์ด ํ๋ก์ธ์๋?
๋ฉํฐ ์ฝ์ด ๋๋ ๋ฉํฐ ์ฝ์ด ํ๋ก์ธ์(multi-core processor) CPU๋ ๋ ๊ฐ ์ด์์ ๋ ๋ฆฝ ์ฝ์ด๋ฅผ ๋จ์ผ ์ง์ ํ๋ก๋ก ์ด๋ฃจ์ด์ง ํ๋์ ํจํค์ง๋ก ํตํฉํ ๊ฒ์ ๋งํฉ๋๋ค.
ํ๋์จ์ด์ ๊ตฌ์ฑ ๋ฐฉ์๋ ๋ค์ํฉ๋๋ค. ์ฌ๊ธฐ์ ํผ๋ํ๊ธฐ ์ฌ์ด ์ธ ๊ฐ์ง๋ฅผ ๊ตฌ๋ถํด๋ณผ๊ฒ์.
๊ตฌ๋ถ | ๊ตฌ์ฑ ์์ | ํน์ง |
---|---|---|
๋ง์ดํฌ๋กํ๋ก์ธ์ | CPU๋ง ์์ | ๋ฉ๋ชจ๋ฆฌ, I/O๋ ์ธ๋ถ์ ๋ฐ๋ก |
๋ง์ดํฌ๋ก์ปดํจํฐ | CPU + ๋ฉ๋ชจ๋ฆฌ + I/O | ํ๋์ ์นฉ์ ํตํฉ, ์๋์ด๋ ธ ๋ฑ์ด ์ |
SoC (System on a Chip) | ๋ง์ดํฌ๋ก์ปดํจํฐ + WiFi, GPU ๋ฑ | ์ค๋งํธํฐ์ ๋ค์ด๊ฐ๋ ๋ณต์กํ ์ปดํจํฐ ์์คํ |
๐ฏ ์์ฝํ๋ฉด,
- ๋ง์ดํฌ๋กํ๋ก์ธ์๋ ํฐ ์์คํ ์ ๋ถํ
- ๋ง์ดํฌ๋ก์ปดํจํฐ๋ ์์ง๋ง ๋ ๋ฆฝ์ ์ธ ์์คํ
- SoC๋ ๊ณ ๊ธฐ๋ฅ, ๊ณ ์ง์ , ๋ฉํฐ๊ธฐ๋ฅ ์นฉ!
ํ๋์ CPU(ํ๋์ ํจํค์ง) ๋ด๋ถ์ ์ฌ๋ฌ ๊ฐ์ ์ฝ์ด๊ฐ ์๋ ๊ตฌ์กฐ
CPU ์ด๋ฆ | ์ฝ์ด ์ | ์ฃผ์ ์ฉ๋ | ๋น๊ณ |
---|---|---|---|
Intel Core i5-12400 | 6์ฝ์ด 12์ค๋ ๋ | ์ผ๋ฐ PC, ๊ฒ์ | P์ฝ์ด 6๊ฐ |
AMD Ryzen 5 5600G | 6์ฝ์ด 12์ค๋ ๋ | ์ฌ๋ฌด์ฉ, ๋ด์ฅ๊ทธ๋ํฝ ํฌํจ | ๋ฉํฐ์ฝ์ด ์ค๊ณ |
Apple M1 | 8์ฝ์ด (4P+4E) | ๋งฅ๋ถ, ๋งฅ๋ฏธ๋ | ARM ๊ธฐ๋ฐ SoC |
Snapdragon 8 Gen 2 | 8์ฝ์ด (1+4+3) | ํ๋๊ทธ์ญ ์ค๋งํธํฐ | ๊ณ ์ฑ๋ฅ ๋ชจ๋ฐ์ผ ์นฉ |
๐ก ๋๋ถ๋ถ์ ๋ ธํธ๋ถ, ๋ฐ์คํฌํ, ์ค๋งํธํฐ์ ๋ค์ด์๋ CPU๋ค์ ๋ฉํฐ์ฝ์ด์ ๋๋ค.
์ฌ๋ฌ ๊ฐ์ ์ฝ์ด๋ฅผ ๊ฐ์ง CPU๊ฐ ์ฌ๋ฌ ๊ฐ ์๋ ๊ตฌ์ฑ
์ฆ, ๋ฉํฐ์ฝ์ด + ๋ฉํฐํ๋ก์ธ์ ์กฐํฉ์ ๋๋ค.
์์คํ ๊ตฌ์ฑ ์์ | ์ฌ์ฉ CPU | ์ด ์ฝ์ด ์ | ์ฌ์ฉ ์ |
---|---|---|---|
๋์ผ Intel Xeon Silver 4310 | 12์ฝ์ด ร 2 | 24์ฝ์ด | ์๋ฒ, ํด๋ฌ์คํฐ |
๋์ผ AMD EPYC 7313 | 16์ฝ์ด ร 2 | 32์ฝ์ด | ๊ฐ์ํ ์๋ฒ |
Apple M2 Ultra | 24์ฝ์ด ๋จ์ผ ํจํค์ง | 24์ฝ์ด (16P+8E) | ์ํฌ์คํ ์ด์ ์ฉ SoC |
GPU ๋ณ๋ ฌ ์ฒ๋ฆฌ ์ฐ์ฐ | CUDA Core ์์ฒ ๊ฐ | ์์ฒ ์ค๋ ๋ | ๋ณ๋ ฌ ๊ณผํ ์ฐ์ฐ (๋น์ ์ ๋ฉํฐ์ฝ์ด) |
๐ก ๊ณ ์ฑ๋ฅ ์๋ฒ๋ ์ํฌ์คํ ์ด์ ์์๋ 2๊ฐ ์ด์์ ๋ฉํฐ์ฝ์ด CPU๋ฅผ ์ฅ์ฐฉํด ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ๋์ ๋๋ค.
์์ ํ ๋ ๋ฆฝ๋ CPU(=Processor) ๋ค์ด ํ๋์ ์์คํ ์ ์ฐ๊ฒฐ๋์ด ์๋ ๊ตฌ์กฐ
์์คํ ์ ํ | ์ฌ์ฉ ํ๋ก์ธ์ | ํน์ง |
---|---|---|
๋ํ ์๋ฒ ์์คํ (์: IBM Power System) | ์ฌ๋ฌ ๊ฐ์ Power9 CPU | SMP ๋๋ NUMA ๊ตฌ์กฐ |
HPC(๊ณ ์ฑ๋ฅ ์ปดํจํ ) ํด๋ฌ์คํฐ | ๊ฐ ๋ ธ๋์ ๋ณ๋ CPU | ๋ณ๋ ฌ ์ปดํจํ , ๋ถ์ฐ ์ฒ๋ฆฌ |
์ด์คํ ์์คํ (Failover Server) | ๋ CPU๊ฐ ๊ฐ๊ฐ ์คํ | ์์ ์ฑ, ๋ฐฑ์ ๋ชฉ์ |
์ํฐํ๋ผ์ด์ฆ ๋ฉ์ธํ๋ ์ | ์์ญ ๊ฐ์ ํ๋ก์ธ์ | ๊ธ์ต, ํต์ ๋ํ ์์คํ |
๐ก ๋ฉํฐํ๋ก์ธ์๋ ํ๋์จ์ด์ ์ผ๋ก ์์ ํ ๋ถ๋ฆฌ๋ CPU๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฐ๊ฒฐํ๋ ๊ตฌ์กฐ์์. ์ฑ๋ฅ๋ณด๋ค ์์ ์ฑ๊ณผ ๋ณ๋ ฌ์ฒ๋ฆฌ์ ๊ฐ์ ์ด ์์ฃ .
ํญ๋ชฉ | ์ ์ | ์์ |
---|---|---|
๋ฉํฐ์ฝ์ด | ํ๋์ CPU ์์ ์ฌ๋ฌ ์ฝ์ด | Intel i7, M1, Ryzen ๋ฑ |
๋ฉํฐ์ฝ์ด ํ๋ก์ธ์ | ๋ฉํฐ์ฝ์ด CPU ์ฌ๋ฌ ๊ฐ | ๋์ผ Xeon ์๋ฒ ๋ฑ |
๋ฉํฐํ๋ก์ธ์ | ๋ ๋ฆฝ๋ CPU ์ฌ๋ฌ ๊ฐ | HPC, ๋ฉ์ธํ๋ ์ |
ํ๋ก๊ทธ๋๋จธ๋ค์ ์ข
์ข
"๊ฒ์ผ๋ฅด๋ค"๋ ์๋ฆฌ๋ฅผ ๋ค์ด์. ๊ทผ๋ฐ ์ด๊ฑด ์ฌ์ค ๋นํ๊ฐ ์๋๋ผ ์ฐฝ์๋ ฅ์ ์์ฒ์ด๊ธฐ๋ ํด์.
๋๊ฐ์ ์ฝ๋๋ฅผ ๋ ๋ฒ ์ด์ ์ฐ๋ ๊ฑธ ์ง์ฌ์ผ๋ก ์ซ์ดํ๊ฑฐ๋ ์.
โ์ ๊ฐ์ ์ฝ๋๋ฅผ ๋ ์ฐ์ง? ํ ๋ฒ๋ง ์จ๋๊ณ ๋ค์ ๋ถ๋ฅด๋ฉด ๋์์?โ
์ด๋ฐ ์๊ฐ์์ ํจ์(function)๋ผ๋ ๊ฐ๋
์ด ๋ฑ์ฅํ์ด์.
์ด๋ค ์์
์ ๋ฏธ๋ฆฌ ์ ํด๋๊ณ , ํ์ํ ๋๋ง๋ค ๊ทธ๊ฑธ "ํธ์ถ"ํด์ ์ฐ๋ ๋ฐฉ์์ด์ฃ .
ํจ์๋ ์ค์ ๋ก ํ๋ก์์ (procedure), ์๋ธ๋ฃจํด(subroutine) ๊ฐ์ ์ด๋ฆ์ผ๋ก๋ ๋ถ๋ ค์.
์ฐ๋ ์ธ์ด๋ ๋งฅ๋ฝ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง, ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋ ๊ธฐ๋ฅ์ ๊ฑฐ์ ๊ฐ์์.
์ฉ์ด | ์๋ฏธ | ์ ๊ทธ๋ ๊ฒ ๋ถ๋ ธ์๊น? |
---|---|---|
ํจ์ (Function) | ์ด๋ค ๊ฐ์ ์ ๋ ฅ๋ฐ์, ๊ณ์ฐํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ์ฝ๋ ๋ฌถ์ | ์ํ์ ํจ์ ๊ฐ๋ ์์ ์ ๋. ์ํ์ฒ๋ผ ์ ๋ ฅ โ ์ถ๋ ฅ์ด ์๋ ๊ณ์ฐ ๋จ์ |
ํ๋ก์์ (Procedure) | ์ผ๋ จ์ ๋ช ๋ น์ ์์๋๋ก ์คํํ๋ ์ฝ๋ ๋ฌถ์. ๋ฐํ๊ฐ์ด ์์ ์๋ ์์ | "์ ์ฐจ์ ์ ์ฐจ(procedure)"๋ผ๋ ๋ป์์, ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค๊ธฐ๋ณด๋จ ์์ ํ๋ฆ ์์ฒด์ ์ด์ |
์๋ธ๋ฃจํด (Subroutine) | ๋ฉ์ธ ๋ฃจํด(๋ฉ์ธ ํ๋ก๊ทธ๋จ)์์ ํธ์ถ๋๋ ์์ ์ฝ๋ ๋ธ๋ก | ์๋ ์ด์ ๋ธ๋ฆฌ ์ธ์ด๋ ์ด๊ธฐ ์ธ์ด์์ "๋ฃจํด์ ํ์ ๊ฐ๋ "์ผ๋ก ์ฌ์ฉ. ๊ธฐ๋ฅ์ ๋ถํ ์ ์ํ ์ฉ์ด |
์๋ก ๋ฏธ๋ฌํ๊ฒ ๋ค๋ฅธ ๋๋์ด ์์ง๋ง, ํ๋์ ๋ง์ ์ธ์ด์์๋ ๊ฑฐ์ ๋์์ด์ฒ๋ผ ์ฐ์ด๊ธฐ๋ ํด์.
์๋ฅผ ๋ค์ด:
void printHello()
๊ฐ์ ๋ฐํ๊ฐ ์๋ ๊ฒ๋ ํจ์๋ผ๊ณ ๋ถ๋ฅด๊ณ ํ์ง๋ง ์ด๋ฐ ๋ค์ํ ์ด๋ฆ์ ์๊ณ ์์ผ๋ฉด, ์ ๋ฌธ์๋ ๋ค๋ฅธ ์ธ์ด๋ฅผ ์ฝ์ ๋ ๋์์ด ๋ผ์!
"๋ค๋ฅธ ์ด๋ฆ์ ๊ฐ์ก์ง๋ง, ๊ฒฐ๊ตญ ๋ค ๊ฐ์ '๊ฒ์ผ๋ฅธ ํ๋ก๊ทธ๋๋จธ์ ์น๊ตฌ'์์." ๐
์๋ฅผ ๋ค์ด, ์๋์ฒ๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ cube(x)
๋ผ๋ ํจ์๋ฅผ ๋ง๋ค ์ ์์ด์:
function cube(x) {
return (x * x * x);
}
์ด ํจ์๋ ๊ฐ๋จํ๊ฒ ๋งํด์, ์ด๋ค ์ซ์๋ฅผ ๋ฐ์์ ์ธ์ ๊ณฑํ ๊ฐ์ ๋ฐํํฉ๋๋ค.
๊ทธ๋ผ ์ค์ ๋ก ํจ์๋ฅผ ํธ์ถํด์ ์จ๋ณผ๊น์?
y = cube(3); // y์๋ 27์ด ์ ์ฅ๋จ
z = cube(4) + cube(6); // z๋ 64 + 216 = 280
ํจ์ ํ๋๋ง ์ ์ ์ํด๋๋ฉด, ๋ณต๋ถ ์์ด๋ ์ด๋์๋ ์ธ ์ ์๊ฒ ๋๋ ๊ฑฐ์์.
์ฐ๋ฆฌ๊ฐ ํจ์ cube()
๋ฅผ ํธ์ถํ๋ฉด, ์ปดํจํฐ๋ ์ด๋ฐ ์์ผ๋ก ์๊ฐํฉ๋๋ค:
์ฆ, "ํจ์ ํธ์ถ ์ง์ ์ ์ฃผ์"๋ฅผ ์ ์ฅํ๊ณ , ํจ์ ์คํ์ด ๋๋๋ฉด ๊ทธ ์ฃผ์๋ก ์ ํํด์ ๋์์ค๋ ๊ฑฐ์์.
์ด๊ฑด ์ปดํจํฐ ๋ด๋ถ ๊ตฌ์กฐ์ ๊ด๋ จ๋ ์ผ์ด์์. ์์ ๊ธฐ๊ณ์์๋ ์ด๋ ๊ฒ ์ฒ๋ฆฌํ์ด์:
์ฃผ์ | ๋ช ๋ น์ด | ์๋ฏธ |
---|---|---|
100 | pca | ํ๋ก๊ทธ๋จ ์นด์ดํฐ๋ฅผ ๋์ฐ๊ธฐ๋ก ์ฎ๊น |
101 | add 5 | 5๋ฅผ ๋ํด์ ๋ฐํ ์ฃผ์ ๊ณ์ฐ (105) |
102 | store 200 | ๋ฐํ ์ฃผ์๋ฅผ ๋ฉ๋ชจ๋ฆฌ 200๋ฒ์ง์ ์ ์ฅ |
103 | load 3 | ์ธ์ ๊ณฑํ ๊ฐ(x)์ ๋์ฐ๊ธฐ์ |
104 | bra 300 | cube ํจ์๋ก ๋ถ๊ธฐ (jump) |
105 | ํจ์ ๋๋๊ณ ์ฌ๊ธฐ๋ถํฐ ๊ณ์ ์คํ |
ํจ์์ ์์ ์ฃผ์๋ 300์ด๊ณ , ํจ์๊ฐ ๋๋ ํ์ bra 200 (๊ฐ์ )
๋ช
๋ น์ ํตํด
200๋ฒ์ง์ ์ ์ฅ๋ ๊ฐ(=105)์ผ๋ก ๋ค์ ๋ถ๊ธฐํ๋ ๊ฑฐ์์.
์ฆ,
์ด๋ฐ ์ ํ ๋ฐฉ์์ โ๊ฐ์ ๋ถ๊ธฐ(indirect branch)โ๋ผ๊ณ ๋ ๋ถ๋ฌ์.
์ด๊ฒ ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ cube(3)
์ ํธ์ถํ์ ๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ผ์ด๋๋ ์ผ์ด์์.
์ด๋ ๊ฒ ํจ์ ํธ์ถ์ ๊ตฌํํ๋ ค๋ฉด ์๊ฐ๋ณด๋ค ๋ช
๋ น์ด๊ฐ ๋ง์ด ํ์ํด์.
๊ทธ๋์ CPU ์ค๊ณ์๋ค์ "์ด๊ฑฐ ์ข ์๋์ผ๋ก ์ฒ๋ฆฌํด์ฃผ๋ ๋ช
๋ น ์์๊น?" ํ๊ณ ๊ณ ๋ฏผํ์ฃ .
๊ทธ ๊ฒฐ๊ณผ ๋์จ ๋ช ๋ น์ด๊ฐ ๋ฐ๋ก:
โ ARM์
BL (Branch with Link)
๋ช ๋ น์ด
BL
์ ํจ์๋ก ์ ํํ๋ ๋์์ โ๋์์ฌ ์ฃผ์โ๋ฅผ ๋งํฌ ๋ ์ง์คํฐ์ ์๋ ์ ์ฅํด์ค์.์ด๋ฐ ์์ผ๋ก ํ๋ก์ธ์๋ค์ ์ ์ ๋ ๋๋ํ๊ฒ ์งํํด์์ด์.
๊ฐ๋ | ์ค๋ช |
---|---|
ํจ์ (Function) | ์ฝ๋ ์ฌ์ฌ์ฉ ๋จ์, ํธ์ถํ๊ณ ๋ฐํ |
๋ฐํ ์ฃผ์ ์ ์ฅ | ํจ์ ํธ์ถ ์ง์ ์ ํ์ฌ ์์น ์ ์ฅ |
๊ฐ์ ๋ถ๊ธฐ | ์ ์ฅ๋ ์ฃผ์๋ก ๋ค์ ์ด๋ |
ARM์ BL | ๋ถ๊ธฐ + ๋ฐํ ์ฃผ์ ์ ์ฅ์ ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ ๋ช ๋ น |
์ฅ์ | ์ฝ๋ ์ฌ์ฌ์ฉ, ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ, ์ ์ง๋ณด์ ์ฉ์ด |
์์ ๋์จ ๊ฒ ๊ฐ์๋ฐ ๊ธฐ์ต์ด ์๋... ์ด๋ฒ์ฃผ์ ๋ค์ ์ ๋ฆฌํด์ผ๊ฒ ๋ค.
ARM์ CPU๋ฅผ ์ง์ ๋ง๋ค์ง ์์์. ๋์ , ๊ฐ๋ณ๊ณ ํจ์จ์ ์ธ CPU ์ค๊ณ๋๋ฅผ ๋ง๋ค์ด์ ๋ค๋ฅธ ๋ฐ๋์ฒด ํ์ฌ๋ค์๊ฒ ๋ผ์ด์ ์ค(์ค๊ณ ์ฌ์ฉ๊ถ) ํํ๋ก ํ์ฃ .
์ด๋ฐ ๋จ์ํ๊ณ ๊ฐ๋ฒผ์ด ์ค๊ณ๋ ์ ๋ ฅ ์๋ชจ๋ฅผ ์ค์ด๋ฉด์๋ ๋น ๋ฅธ ์ฐ์ฐ์ด ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด์ค์. ๊ทธ๋์ ์ค๋งํธํฐ, IoT ๊ธฐ๊ธฐ, ๋์งํธ์นด๋ฉ๋ผ ๋ฑ ์ ์ ๋ ฅ์ด ์ค์ํ ๊ธฐ๊ธฐ๋ค์ ๋ฑ์ด์์!
1980๋
๋, ์๊ตญ์ '๊ตญ๋ฏผ์๊ฒ ์ปดํจํฐ๋ฅผ ์๋ฆฌ์!'๋ผ๋ BBC ์ปดํจํฐ ๋ฆฌํฐ๋ฌ์ ํ๋ก์ ํธ๋ฅผ ์์ํด์.
BBC๋ ๊ต์ก ๋ฐฉ์ก์ ์ธ ์ปดํจํฐ๋ฅผ ๋ง๋ค์ด๋ฌ๋ผ๊ณ ์์ด์ฝ(Acorn) ์ปดํจํฐ์ฌ์ ์์ฒญํ์ฃ .
๊ทธ ๊ฒฐ๊ณผ ๋ง๋ค์ด์ง ๊ฒ ๋ฐ๋ก BBC ๋ง์ดํฌ๋ก(BBC Micro).
๋น์๋ก์ ๊ณ ์ฑ๋ฅ์ด์๊ณ , ์๊ตญ ๊ต์ก ์์ฅ์ ํ์ ํ์ด์!
ํ์ง๋ง ์์ด์ฝ์ ๋ ๊ฐ๋ ฅํ CPU๊ฐ ํ์ํ๋ค๊ณ ํ๋จ, ์ธํ ์ ํ์กฐ๋ฅผ ์์ฒญํ์ง๋ง ๊ฑฐ์ ๋นํ๊ณ โฆ
๊ฒฐ๊ตญ โ๊ทธ๋ผ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค์!โ ํ๊ณ ์์ฒด CPU ๊ฐ๋ฐ์ ๋ฐ์ด๋ญ๋๋ค.
์ด๋ ๊ฒ ํ์ํ ๊ฒ ๋ฐ๋ก ARM = Acorn RISC Machine์ด์์!
์ฒซ ARM CPU์ธ ARM2 (1987) ๋ ๋จ 2๋ง 7์ฒ ๊ฐ์ ํธ๋์ง์คํฐ๋ก ๊ตฌ์ฑ๋์ง๋ง,
์ธํ
์ 80286๋ณด๋ค ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์ฌ์ค์!
์ด ๊ธฐ์ ๋ ฅ ๋๋ถ์ ์ ํ๋ ์ฃผ๋ชฉํ๊ฒ ๋๊ณ ,
์์ด์ฝ์ ARM ๋ถ์๋ฅผ ๋ถ์ฌ์์ผ ์ง๊ธ์ ARM Holdings๊ฐ ๋ฉ๋๋ค.
์ ๋ ฅ ์๋ชจ๊ฐ ์ ๊ณ , ๋ฐ์ด๋ ๋ฎ์ผ๋ฉด์๋ ์ถฉ๋ถํ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์
๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์๋ ARM์ ๋ฐ๋ผ์ฌ ์ ์๋ ์ํคํ
์ฒ๊ฐ ์์์ฃ .
2020๋ , ์ ํ์ด ๋ฐํํ M1 ์นฉ์ ARM ๊ธฐ๋ฐ CPU์์.
์ด์ ๊น์ง๋ ๋งฅ๋ถ์ ์ธํ
CPU๋ฅผ ์ผ์ง๋ง,
M1๋ถํฐ๋ ์ ํ์ด ์ง์ ์ค๊ณํ ARM ๊ธฐ๋ฐ SoC๋ฅผ ์ฌ์ฉ!
์ ์ ๋ ฅ์์๋ ๋ถ๊ตฌํ๊ณ ์ฑ๋ฅ์ด ์์ฒญ๋์,
๋ฐ์คํฌํ ๋ถ์ผ์์๋ ARM์ด ๊ฒฝ์๋ ฅ์ ์
์ฆํ์ด์.
๊ตฌ๋ถ | ๋ด์ฉ |
---|---|
ARM์ด๋? | ์ ์ ๋ ฅ RISC ๊ธฐ๋ฐ CPU ์ค๊ณ ํ์ฌ (์ง์ ์์ฐ X) |
์ค๊ณ ์ฒ ํ | ๋จ์ํ ๋ช ๋ น์ด ์ธํธ โ ๋น ๋ฅด๊ณ ์ ๋ ฅ ํจ์จ ๋์ |
์์์? | 1980๋ ๋ ์๊ตญ, BBC ๊ต์ก์ฉ ์ปดํจํฐ์์ ํ์ |
์ ๋ช ์ ํ | ์ ํ M1, ์์ดํฐ, ๋ํ ๋ DS, ์ค๋งํธํฐ ๋๋ถ๋ถ |
์ฅ์ | ์ ๋ ฅ ํจ์จ, ์ ๋ฐ์ด, ๋ชจ๋ฐ์ผ/IoT์ ์ต์ ํ |
ํ์ฌ | ๋ ธํธ๋ถ(Mac), ์๋ฒ, ์ํผ์ปดํจํฐ๊น์ง ํ์ฅ ์ค! |
โ๋จ์ํ ์ค๊ณ๋ก, ์ธ์์ ๋ฐ๊พผ CPUโ
์ด๊ฒ ๋ฐ๋ก ARM์ ์ด์ผ๊ธฐ์ ๋๋ค ๐
์ง๊ธ๊น์ง๋ ๋ฐํ ์ฃผ์๋ฅผ โ200๋ฒ์งโ ๊ฐ์ ๊ณ ์ ๋ ๊ณณ์ ์ ์ฅํ์ด์.
๊ทธ๋ฐ๋ฐ ์ฌ๊ท ํจ์๋ ์ฌ๋ฌ ๊ฐ์ ํจ์๊ฐ ์ฐ๋ฌ์ ํธ์ถ๋ ๋ ์ด๋ป๊ฒ ๋ ๊น์?
์ด๋ ํ์ํ ๊ฒ ๋ฐ๋ก "์คํ(Stack)"์
๋๋ค.
๋ค์ ์ฅ์์๋, ํจ์๋ฅผ ์์ ํ๊ฒ ๋ฐ๋ณต ํธ์ถํ ์ ์๊ฒ ํด์ฃผ๋ ์คํ๊ณผ LIFO ๊ตฌ์กฐ์ ๋ฑ์ฅ์ ์ด์ผ๊ธฐํด๋ณผ๊ฒ์.
ํจ์ ํธ์ถ์ ๋จ์ํ ์ฝ๋ ๋ถํ ์ด ์๋๋ผ, ์ฃผ์ ๊ธฐ์ต๊ณผ ์ ํ์ ๋ฏธํ์ด์์ต๋๋ค.
ํ๋ก๊ทธ๋๋ฐ์์ ํจ์๋ ๋จ์ํ ๊ณ์ฐ๋ง ํ๋ ๋๊ตฌ๊ฐ ์๋์์.
ํจ์๊ฐ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํ๊ฑฐ๋, ์ฌ์ง์ด ์๊ธฐ ์์ ์ ๋ค์ ํธ์ถํ ์๋ ์์ฃ !
์ด๊ฑธ ์ฌ๊ท(recursion)๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
์: ์ด๋ฏธ์ง๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์ชผ๊ฐ๋
subdivide()
ํจ์
function subdivide(x, y, size):
if size โ 1 and ์์ด ๋ชจ๋ ๊ฐ์ง ์๋ค๋ฉด:
half = size / 2
subdivide(x, y, half) // ์ผ์ชฝ ์๋
subdivide(x, y+half, half) // ์ผ์ชฝ ์
subdivide(x+half, y+half, half) // ์ค๋ฅธ์ชฝ ์
subdivide(x+half, y, half) // ์ค๋ฅธ์ชฝ ์๋
else:
์ ์ ๋ณด ์ ์ฅ
โํจ์๊ฐ ์๊ธฐ ์์ ์ ๋ถ๋ฅด๋ ๊ฑด ๋๋ฌด ์ํํ ๊ฑฐ ์๋?โ
์๋์! ์คํ๋ ค ์ฌ๊ท(recursion)๋ ๋ง์ ๋ถ์ผ์์ ์์ฃผ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
function subdivide(x, y, size):
if size โ 1 and ์์ด ๋ชจ๋ ๊ฐ์ง ์๋ค๋ฉด:
half = size / 2
subdivide(x, y, half) // ์ผ์ชฝ ์๋
subdivide(x, y+half, half) // ์ผ์ชฝ ์
subdivide(x+half, y+half, half) // ์ค๋ฅธ์ชฝ ์
subdivide(x+half, y, half) // ์ค๋ฅธ์ชฝ ์๋
else:
์ ์ ๋ณด ์ ์ฅ
subdivide ํจ์๋ ์ด๋ฏธ์ง๋ฅผ ๋ค ๋ฑ๋ถํ๋ฉฐ ์ฌ๊ท์ ์ผ๋ก ๋ถํ ํด์.
๋ชจ๋ ํฝ์
์ด ๊ฐ์ ์์ด ์๋๋ฉด ๊ณ์ ์ชผ๊ฐญ๋๋ค.
๋ชจ๋ ์์ด ๊ฐ์ ๋๊น์ง ๋๋๋ ๋ฐฉ์์ด์์.
์ด ๊ตฌ์กฐ๋ ์ฟผ๋ํธ๋ฆฌ(Quad Tree)๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ๋ฅผ ํํํด์.
๊ฐ๊ฐ์ ๋ธ๋ก์ด ๋๋ ํ์๊ฐ ์๋ค๋ฉด, ์ ๋ ธ๋(leaf node)๋ก ๋จ์์.
โ ์ด ๊ตฌ์กฐ๋ โ์์ถโ์๋ ์ ๋ฆฌํด์. 64๊ฐ์ ํฝ์ ์ 40๊ฐ๋ง ์ ์ฅํด๋ ๋๋๊น์!
ํจ์๋ฅผ ํธ์ถํ๋ ์๊ฐ, ์ปดํจํฐ๋ ๋ ๊ฐ์ง ์ผ์ ํด์ผ ํด์:
ํจ์๋ฅผ ํธ์ถํ๋ฉด, ๊ทธ ์๋ฆฌ์์ ์ด๋๋ก ๋ค์ ๋์์์ผ ํ ์ง๋ฅผ ๊ธฐ์ตํด์ผ ํด์.
์ด๊ฑธ โ๋ฐํ ์ฃผ์โ๋ผ๊ณ ํด์.
๊ทธ๋์ ํ๋ก๊ทธ๋จ ์นด์ดํฐ(PC) ๊ฐ, ์ฆ ํ์ฌ ์์น๋ฅผ ์ด๋๊ฐ์ ์ ์ฅํด๋ก๋๋ค.
์ด๊ฒ ๋ฐ๋ก โ๋ฐํ ์ฃผ์(Return Address)โ์์.
์์ ์๋ ์ด ์ฃผ์๋ฅผ ํน์ ๋ฉ๋ชจ๋ฆฌ ์์น(์: 200๋ฒ์ง)์ ์ ์ฅํ๋๋ฐ์,
๋ง์ฝ ํจ์ ์์์ ๋ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํ๋ค๋ฉดโฆ?
๐จ ๋ฐํ ์ฃผ์๊ฐ ๋ฎ์ด์ฐ๊ธฐ ๋์ด๋ฒ๋ฆฌ๊ฒ ์ฃ !
์ด ๋ฐํ ์ฃผ์์ ํจ์์ ์ง์ญ ๋ณ์๋ค์ ์ ์ฅํด ๋๋ ๊ณต๊ฐ์ด '์คํ'์ ๋๋ค.
โ โ์ ์์ฒ๋ผ ์์ ์๊ณ , ์์์๋ถํฐ ๊บผ๋ธ๋ค!โ
์ปดํจํฐ๋ ํจ์๋ฅผ ํธ์ถํ ๋๋ง๋ค โ์คํโ์ ์ ๋ณด๋ฅผ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํจ์๊ฐ ๋๋๋ฉด ๊ฐ์ฅ ๋ง์ง๋ง์ ์์ ์ ๋ณด๋ถํฐ ๊บผ๋ด์ ์คํ์ ์ด์ด๊ฐ์ฃ .
์ด ๋ฐฉ์์ LIFO ๊ตฌ์กฐ (Last In, First Out)
์ฆ, "๋์ค์ ๋ฃ์ ๊ฒ ๋จผ์ ๋๊ฐ๋ค"๋ ๊ท์น์ ๋ฐ๋ฆ ๋๋ค.
ํจ์๋ฅผ ํธ์ถํ ๋, ์ปดํจํฐ๋ ๋ค์ ์ ๋ณด๋ฅผ ์คํ ํ๋ ์(stack frame)์ด๋ผ๋ ๋จ์๋ก ์ ์ฅํด์:
๊ตฌ์ฑ ์์ | ์ค๋ช |
---|---|
๋ฐํ ์ฃผ์ | ํจ์ ์คํ์ด ๋๋ ๋ค ๋์๊ฐ์ผ ํ ์ฝ๋ ์์น |
๋งค๊ฐ๋ณ์ | ํจ์๊ฐ ์ฒ๋ฆฌํด์ผ ํ ์ ๋ ฅ ๊ฐ๋ค |
์ง์ญ ๋ณ์ | ํจ์ ์์์๋ง ์ฌ์ฉ๋๋ ๋ณ์๋ค |
์ํ ์ ๋ณด | ๋ ์ง์คํฐ, ์กฐ๊ฑด ์ฝ๋ ๋ฑ ํน์ ํ๋์จ์ด ์ํ |
์ด๋ ๊ฒ ์คํ ํ๋ ์ ํ๋๊ฐ ํจ์ ํธ์ถ์ ๋ชจ๋ ๋งฅ๋ฝ(Context)์ ๋ด๊ณ ์์ต๋๋ค.
ํจ์๊ฐ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํ๋ฉด?
์ด๋ ๊ฒ ํ๋ฉด ๊ฐ ํจ์์ ์คํ ์ํ๊ฐ ์๋ก ์์ ํ ๋
๋ฆฝ์ ์ผ๋ก ์ ์ง๋ฉ๋๋ค.
๊ทธ๋์ ํจ์๊ฐ ์๊ธฐ ์์ ์ ํธ์ถํ๋ ์ฌ๊ท(Recursion)๋ ๊ฐ๋ฅํ ๊ฑฐ์ฃ !
์คํ์ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ํจ์ ํธ์ถ์ ๋ฑ ๋ง์์:
โ ๋ง์ฝ ๋ฐํ ์ฃผ์๋ฅผ ํ ๊ตฐ๋ฐ์๋ง ์ ์ฅํ๋ฉด?
โ A๊ฐ B๋ฅผ ํธ์ถํ๊ณ B๊ฐ C๋ฅผ ํธ์ถํ ๋,
๋ง์ง๋ง C๋ง ๊ธฐ์ต๋๊ณ A๋ B๋ก ๋์๊ฐ ์ ์๊ฒ ๋ฉ๋๋ค!
์คํ์ด ๋๋ฌด ์ค์ํด์, ์ปดํจํฐ ์ํคํ ์ฒ์๋ ๋ค์๊ณผ ๊ฐ์ ํ๋์จ์ด ์ง์๋ ์์ด์:
์ด ๋๋ถ์ ํจ์ ํธ์ถ๊ณผ ๋ฐํ์ ๋น ๋ฅด๊ณ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์์ด์.
โ์คํ์ ํจ์ ํธ์ถ์ ์๋ฐํ ์กฐ๋ ฅ์์ ๋๋ค.
ํ๋ก๊ทธ๋จ์ด ๋ณต์กํด์ง์๋ก, ์คํ์ ๋ ๋ฐ์๊ฒ ์์ง์ด๊ณ ์์ด์!โ ๐
ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ปดํจํฐ๋ ๊ทธ ํจ์ ์์์ ๋ฌด์์ ํด์ผ ํ ์ง ์ฌ๋ฌ ์ ๋ณด๋ฅผ ๊ธฐ์ตํด์ผ ํฉ๋๋ค:
์ด ๋ชจ๋ ์ ๋ณด๋ฅผ ํ ๊ณณ์ ๋ด์๋์ง ์์ผ๋ฉด,
ํจ์๊ฐ ๋๋ฌ์ ๋ ์๋ ์๋ฆฌ๋ก ๋์๊ฐ ์ ์๊ณ , ์ฒ๋ฆฌ ํ๋ฆ๋ ์๋ง์ด ๋ผ๋ฒ๋ฆฝ๋๋ค.
ํจ์๋ฅผ ํธ์ถํ ๋๋ง๋ค ์๊ธฐ๋ ์์ ์ ์ฅ ๊ณต๊ฐ์ด ๋ฐ๋ก ์คํ ํ๋ ์์ ๋๋ค!
์คํ ํ๋ ์์๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ค์ด ๋ค์ด ์์ด์:
๊ตฌ์ฑ ์์ | ์ค๋ช |
---|---|
๋ฐํ ์ฃผ์ | ํจ์ ์คํ์ด ๋๋ ๋ค ๋์๊ฐ ์์น |
๋งค๊ฐ๋ณ์ (์ธ์) | ํธ์ถ ์ ์ ๋ฌ๋ ์ ๋ ฅ ๊ฐ |
์ง์ญ ๋ณ์ | ํจ์ ๋ด์์๋ง ์ฌ์ฉํ๋ ์์ ๊ฐ |
์ด์ ์คํ ํฌ์ธํฐ | ํจ์ ์ข ๋ฃ ํ ์คํ ๋ณต๊ตฌ๋ฅผ ์ํ ํฌ์ธํฐ ์ ์ฅ |
์ด ํ๋ ์์ ์คํ(Stack)์ด๋ผ๋ ์๋ฃ๊ตฌ์กฐ์ ์์์๋ถํฐ ์์ด๊ณ ,
ํจ์๊ฐ ๋๋๋ฉด ํด๋น ํ๋ ์์ด ์ ๊ฑฐ(pop)๋๋ฉฐ ์คํ์ด ์ด์ด์ ธ์.
int add(int a, int b) {
return a + b;
}
int doubleAdd(int x) {
return add(x, x) + add(x, x);
}
์ ์ฝ๋๋ add(x, x)
๋ฅผ ๋ ๋ฒ ํธ์ถํ์ฃ .
์คํ์ด ์์ผ๋ฉด ๋ ๋ฒ์งธ add()
ํธ์ถ ์ ์ฒซ ๋ฒ์งธ ํธ์ถ์ ๋ฐํ ์ฃผ์์ ๋ณ์๋ค์ด ๋ฎ์ด์ฐ๊ธฐ๋๊ธฐ ๋๋ฌธ์
์ ์์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
๐ง ์คํ์ด ์๊ธฐ ๋๋ฌธ์ ๋ ํธ์ถ์ ์ ๋ณด๊ฐ ์๋ก ๋ถ๋ฆฌ๋์ด ์์ ํ๊ฒ ์ฒ๋ฆฌ๋ฉ๋๋ค!
int factorial(int n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
์ด ํจ์๊ฐ factorial(5)
๋ฅผ ํธ์ถํ๋ฉด, ๋ด๋ถ์ ์ผ๋ก ์ด๋ฐ ํธ์ถ์ด ์ฐ์์ ์ผ๋ก ์ผ์ด๋์:
factorial(5)
โณ factorial(4)
โณ factorial(3)
โณ factorial(2)
โณ factorial(1)
๊ฐ ํธ์ถ๋ง๋ค:
n
์ ๊ฐ์ด ๋ฌ๋ผ์ผ ํ๊ณ ์ด ๋ชจ๋ ๊ฑธ ๊ธฐ์ตํ๋ ๊ณต๊ฐ์ด ์คํ์ด๋ฉฐ,
factorial(1)
์ด ์ข
๋ฃ๋๋ฉด ์คํ ํ๋ ์์ด ํ๋์ฉ pop๋๋ฉฐ
n * factorial(n-1)
์ด ๊ณ์ฐ๋ฉ๋๋ค.
๊ฐ๋ | ์ค๋ช |
---|---|
์คํ(Stack) | ํจ์ ํธ์ถ ์ ์ปจํ ์คํธ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ |
์คํ ํ๋ ์ | ํ๋์ ํจ์ ํธ์ถ์ ๋ํ ์ ๋ณด ๋ฌถ์ |
๋ฐํ ์ฃผ์ | ์ด๋๋ก ๋์๊ฐ์ผ ํ ์ง ์ ์ฅ |
ํจ์ ์ธ์, ์ง์ญ ๋ณ์ | ํธ์ถ ์ ํ์ํ ๋ฐ์ดํฐ ์ ์ฅ |
์ฌ๊ท ํธ์ถ | ์คํ์ด ์์ด์ผ๋ง ๊ฐ๋ฅ |
์คํ ์ค๋ฒํ๋ก | ๋๋ฌด ๋ง์ ํธ์ถ โ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ |
ํจ์๊ฐ ํจ์ ์์์ ๋ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํ๋ ๊ตฌ์กฐ(๋๋ ์๊ธฐ ์์ ์ ์ฌ๊ท ํธ์ถ)๋
๊ฐ ํธ์ถ๋ง๋ค โ๊ณ ์ ํ ๋ฐํ ์ฃผ์์ ๋ณ์โ๋ฅผ ๊ธฐ์ตํด์ผ ํฉ๋๋ค.
โ ์ด ๋ชจ๋ ๊ฒ์ ๋ด๋ ์ ์ฅ์๊ฐ ๋ฐ๋ก ์คํ(Stack)์ด์์!
๋ชจ๋ ์คํ์ ์ ์ฅ๋ฉ๋๋ค.
โ ํจ์๊ฐ ๋๋๋ฉด, ๊ทธ์ ํด๋นํ๋ ์คํ ํ๋ ์์ด ์ ๊ฑฐ๋๊ณ
โ ๋ค์ ์๋ ํจ์์ ์คํ์ด ์ด์ด์ง๋๋ค.
โ์คํ์ ํจ์๊ฐ ํธ์ถ๋๋ ์๊ฐ๋ถํฐ, ๋๋ ๋๊น์ง์ ๋ชจ๋ ์ฌ์ ์ ์ฑ ์์ง๋ ๋น์ ๊ฐ์ ์กด์ฌ์ ๋๋ค.โ
๐ง ํจ์๋ฅผ ์ดํดํ๋ ค๋ฉด, ๊ทธ ๋ค์ ์๋ ์คํ์ ์๋ฆฌ๋ฅผ ๊ผญ ์์์ผ ํด์!
๊น์ด ์ฐ์ ํ์(DFS):
๊ฐ๋ฅํ ํ ํ ๋ฐฉํฅ์ผ๋ก ๊น์ด ๋ค์ด๊ฐ๋ค๊ฐ, ๋งํ๋ฉด ๋์์ค๋ ๋ฐฉ์
๋๋น ์ฐ์ ํ์(BFS):
์ํ์ ์ผ๋ก ์์ผ๋ก ๋จผ์ ์ด๋ํ ๋ค, ์๋๋ก ๋ด๋ ค๊ฐ๋ ๋ฐฉ์
์ฌ๊ท ํจ์์ ํธ์ถ ๋ฐฉ์์ DFS์ ๋งค์ฐ ์ ์ฌํฉ๋๋ค.
ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ํํ ๋๋ง๋ค, ๊น๊ฒ ํ๊ณ ๋ค๊ณ , ๋์์ค๋ ๊ณผ์ ์์ ์คํ์ด ์ฌ์ฉ๋ผ์!
์ฌ๊ท ํธ์ถ์ด ๋๋ฌด ๊น์ด์ง๊ฑฐ๋, ์คํ์ ๋๋ฌด ๋ง์ด ์ฐ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
โ ์คํ ์ค๋ฒํ๋ก(Stack Overflow) ๋ฐ์!
โ ์คํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ด๊ณผํ๋ฉด์ ํ๋ก๊ทธ๋จ์ด ๊ฐ์ ์ข ๋ฃ๋ผ์.
์:
def infinite_rec():
infinite_rec()
infinite_rec() # ๐ฅ StackOverflowError ๋ฐ์!
์ด๊ฑด ๋ง์น ์๋น์์ ์ ์๊ฐ ์ฒ์ฅ๊น์ง ์์ฌ์ ๋ฌด๋์ง๋ ์ํฉ๊ณผ ๊ฐ์์.
์คํ ์ค๋ฒํ๋ก(Stack Overflow)
โ ์คํ ๊ณต๊ฐ์ด ๊ฝ ์ฐผ๋๋ฐ ๋ push ํ๋ ค ํ๋ฉด ๋ฐ์! ๐ฑ
โ ์ฌ๊ท๊ฐ ๋๋ฌด ๊น์ผ๋ฉด ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด์.
์คํ ์ธ๋ํ๋ก(Stack Underflow)
โ ๋น์ด์๋ ์คํ์์ pop ํ๋ ค๊ณ ํ๋ฉด ๋ฐ์! โ
โ ๊ทธ๋์ ์คํ์ ํ๋์จ์ด์์๋ ์์ฒญ ์ค์ํ๊ฒ ๋ค๋ค์.
MMU๋ ์คํ ํ๊ณ(overflow)๋ฅผ ๊ฐ์งํ ์ ์๋ ์ฅ์น๋ ๊ฐ๊ณ ์์ด์.
ํ์ ํ๊ธฐ๋ฒ์ ์คํ์ผ๋ก ์ฝ๊ฒ ๊ตฌํ ๊ฐ๋ฅํด์!
โ ์คํ์ 1, 2 push โ + ์ฐ์ฐ
โ ์คํ์ 3, 4 push โ + ์ฐ์ฐ
โ ๋ ๊ฒฐ๊ณผ๋ฅผ ร
์ด๋ฐ ๋ฐฉ์์ PostScript, Forth, RPN ๊ณ์ฐ๊ธฐ ๋ฑ์์ ์ฌ์ฉ๋ฉ๋๋ค.
๊ฐ๋ | ์ค๋ช |
---|---|
์ฌ๊ท ํจ์ | ์๊ธฐ ์์ ์ ํธ์ถํ๋ ํจ์ |
subdivide | ์ด๋ฏธ์ง๋ฅผ ์ชผ๊ฐ์ ์์ถํ๋ ์ฌ๊ท ํจ์ |
์ฟผ๋ํธ๋ฆฌ | ์ฌ๋ถํ ๊ธฐ๋ฐ ํธ๋ฆฌ ๊ตฌ์กฐ |
๊น์ด ์ฐ์ ํ์ | ๊น๊ฒ ํ๊ณ ๋ ๋ค ๋์์ค๋ ๊ตฌ์กฐ (์ฌ๊ท์ ๋น์ท) |
์คํ | ํจ์ ํธ์ถ ์ ๋ฐํ ์ฃผ์์ ๋ณ์ ์ ์ฅ |
์คํ ํ๋ ์ | ์คํ์ ์ ์ฅ๋๋ ๋จ์ (์ฃผ์, ์ง์ญ๋ณ์ ๋ฑ ํฌํจ) |
์คํ ์ค๋ฒํ๋ก | ์คํ์ด ๊ฐ๋ ์ฐผ์ ๋ ๋ฐ์ํ๋ ์ค๋ฅ |
์์ ํ๊ธฐ๋ฒ | ์ค์ / ์ ์ / ํ์ (RPN) ๋ฑ ๋ค์ํ ํํ๋ฒ |
"์ฌ๊ท ํธ์ถ๊ณผ ์คํ์ด ์๋ค๋ฉด, ํจ์๋ ๋จ ํ ๋ฒ๋ฐ์ ๋์๊ฐ ์ ์์ ๊ฑฐ์์."
โ ์ปดํจํฐ๋ ๊ธฐ์ตํ๋ ๋ฒ๋, ๋๋์๊ฐ๋ ๋ฒ๋ ์๊ณ ์๋ต๋๋ค!
์, ์์ํด๋ด ์๋ค. ์ค๋์ ์ง์ ํผ์ ์๋ ๋ ์ด๊ณ , ๋น์ ์ ์ฃผ๋ฐฉ์์ ๋ง์๋ ์ด์ฝ๋ฆฟ ์นฉ ์ฟ ํค๋ฅผ ๋ง๋ค๊ณ ์์ด์. ๋ฐ์ฃฝ๊ธฐ์์ ๋ฒํฐ๋ฅผ ๋ น์ด๊ณ , ์คํ์ ๋ฃ๊ณ , ์ฌ๋ฃ๋ฅผ ํ๋ํ๋ ์์ผ๋ฉฐ ๋ ์ํผ๋ฅผ ๋ฐ๋ผ๊ฐ์ฃ . ๊ทธ๋ฐ๋ฐ ์ด๋โฆ
๐๏ธ โ๋ฉ๋!โ
๋ฌธ ์์์ ๋๊ตฐ๊ฐ ์ด์ธ์ข ์ ๋๋ ์ต๋๋ค. ์ค์ํ ์ํฌ์ผ ์๋ ์๊ณ , ๊ทธ๋ฅ ์ง๋๊ฐ๋ ์ธ์ผ์ฆ๋งจ์ผ ์๋ ์์ด์. ๊ทธ๋ฐ๋ฐ ๋ฌธ์ ๋โ์ฟ ํค ๋ฐ์ฃฝ ์ค๊ฐ์ ๋๊ฐ ์๋์ง ์ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ์ฟ ํค๋ฅผ ํ์ฐ์ง ์์ผ๋ฉด์๋ ๋๊ฐ ์๋์ง ํ์ธํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?
๋ฐ๋ก ์ด ์ํฉ, ์ปดํจํฐ์์๋ ๊ทธ๋๋ก ์ผ์ด๋ฉ๋๋ค.
์ปดํจํฐ๋ "ํ ๋ฒ์ ํ ๊ฐ์ง ์์
"์ ์์๋๋ก ์ฐฉ์คํ ์ฒ๋ฆฌํ์ง๋ง, ๊ฐ์๊ธฐ ์ค์ํ ์ธ๋ถ ์ด๋ฒคํธ(์
๋ ฅ, ๋์ฐฉํ ๋คํธ์ํฌ ํจํท, ์๋ ๋ฑ)๊ฐ ๋ฐ์ํ ์๋ ์์ฃ .
๊ทธ๋ผ ์ปดํจํฐ๋ ์ด๋ป๊ฒ ์ด์ธ์ข ์ ๋ฐ์ํ ๊น์?
๋ต์ ๋ฐ๋ก ์ธํฐ๋ฝํธ(Interrupt) ์์คํ ์ ๋๋ค.
์ฒ์์ ์ด๋ ๊ฒ ํ ์ ์์ต๋๋ค:
์ฟ ํค ๊ตฝ๊ธฐ โ ์ด์ธ์ข
์ด ์ธ๋ ธ๋์ง ํ์ธ โ ์๋๋ฉด ๊ณ์ โ ๋ ํ์ธ โ ๋ ํ์ธ
์ด๋ฐ ๋ฐฉ์์ ์ค์ ๋ก ์กด์ฌํด์. ์ด๋ฆํ์ฌ ํด๋ง(polling). ์ปดํจํฐ๊ฐ ์ผ์ ์ฃผ๊ธฐ๋ง๋ค ์ธ๋ถ ์ ๋ ฅ์ด ์๋์ง ๊ณ์ ๊ฒ์ฌํ๋ ๋ฐฉ์์ด์ฃ . ์ด์ธ์ข ์ด ์ธ๋ ธ๋์ง ๋ฐ๋ณต์ ์ผ๋ก ํ์ธํ๋ ๊ฑฐ์์.
ํ์ง๋ง ์ด ๋ฐฉ์์ ๋ฌธ์ ๊ฐ ๋ง์์:
๐ โ๊ณ์ ์ณ๋ค๋ด์ผ ๋ฐ์ํ ์ ์๋ ์์คํ , ๋นํจ์จ์ ์ด์ฃ .โ
๊ทธ๋์ ๋ ๋๋ํ ์์คํ ์ด ํ์ํ์ต๋๋ค.
์ด์ ์ปดํจํฐ๋ ๋ง์น ์ด์ธ์ข ์ด ์ธ๋ฆด ๋๋ง ๋ฐ์ํ๋ ์ด์ธ์ข ์์คํ ์ ๊ฐ๊ฒ ๋ฉ๋๋ค.
์ด๊ฒ ๋ฐ๋ก ์ธํฐ๋ฝํธ ์์คํ ์ ๋๋ค.
์ํฉ | ์ค๋ช |
---|---|
ํค๋ณด๋ ์ ๋ ฅ | ์ฌ์ฉ์๊ฐ ํค๋ฅผ ๋๋ฅด๋ฉด ์ฆ์ ๋ฐ์ํด์ผ ํจ |
ํ์ด๋จธ ์๋ | ํ๋ก๊ทธ๋จ์ ์ผ์ ์๊ฐ ํ ๋ฉ์ถ๊ฑฐ๋ ์ฌ์์ํด์ผ ํจ |
๋คํธ์ํฌ ์์ | ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ์ ๋ ์ฆ์ ์ฝ์ด์ผ ํจ |
์์ธ ์ฒ๋ฆฌ | ์ค๋ฅ ์ํฉ์ด ๋ฐ์ํ๋ฉด ์ฆ์ ์ค๋จํ๊ณ ์กฐ์น ํ์ |
์ปดํจํฐ๋ ์์๋๋ก ๋ช
๋ น์ด๋ฅผ ์ฐฉ์คํ๊ฒ ์คํํฉ๋๋ค.
ํ์ง๋ง ํ์ค ์ธ๊ณ๋ ์์ธก ๋ถ๊ฐ๋ฅํ์ฃ .
์ด๋ฐ ์ํฉ์์ CPU๋ ํ์ฌ ์์
์ ์ ๊น ๋ฉ์ถ๊ณ ,
๋ ์ค์ํ ์์
(์ด์ธ์ข
์๋ ๋ฑ)์ ์ฒ๋ฆฌํ ๋ค,
๋ค์ ๋์์ ์๋ ์์
์ ๊ณ์ํฉ๋๋ค.
๊ทธ ์ค์ฌ์ ์๋ ๊ฒ์ด ๋ฐ๋ก ์ธํฐ๋ฝํธ ์์คํ ์ ๋๋ค.
์ปดํจํฐ ๊ตฌ์ฑ ์์ | ์ฟ ํค ๋น์ |
---|---|
ํ๋ก๊ทธ๋จ | ์ฟ ํค ๋ ์ํผ |
CPU | ์๋ฆฌ์ฌ |
๋ฉ๋ชจ๋ฆฌ | ์ฌ๋ฃ ์ฐฝ๊ณ |
์ธํฐ๋ฝํธ ์ ํธ | ์ด์ธ์ข ๋ฒจ |
์ธํฐ๋ฝํธ ํธ๋ค๋ฌ | ๋ฌธ ์ด๊ณ ์๋ํ๋ ํ๋ |
์์ฆ ์ฐ์ด๋ ํ๋ก์ธ์ ๋๋ถ๋ถ์ ์ธํฐ๋ฝํธ ์์คํ ์ด ๋ค์ด๊ฐ๋๋ค.
์ธํฐ๋ฝํธ ์์คํ
์ ์ ์ ํ ์ ํธ๊ฐ ๋ค์ด์ค๋ฉด CPU ์คํ์ ์ ๊น ์ค๋จ์ํฌ ์ ์๋ ํ์ด๋ ์ ๊ธฐ ์ฐ๊ฒฐ์ ํฌํจํ๋ค. ํpin์ ์นฉ์ ์ฐ๊ฒฐ๋ ์ ๊ธฐ์ ์ ์ ์ ๋ปํ๋ ๋ง์ด๋ค.
์นฉ์๋ ํ์ฒ๋ผ ๋ณด์ด๋ ๋ถํ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ง๋ง, ์ฅ์น ํฌ๊ธฐ๊ฐ ์ค์ด๋ฆ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฐฉ์๋ ์ฐ์ด๊ธฐ ์์ํ๋ค. ๋ง์ ํ๋ก์ธ์ ์นฉ(ํนํ ๋ง์ดํฌ๋ก์ปดํจํฐ)์๋ ํตํฉ ์ฃผ๋ณ์ฅ์น๊ฐ ๋ค์ด ์๊ณ (์ด๋ฐ ์ฅ์น๋ฅผ ์จ์นฉon-chip I/O ์ฅ์น๋ผ๊ณ ๋ ํ๋ค),
์ด๋ฐ ์ฅ์น๋ค์ ๋ด๋ถ์ ์ผ๋ก ์ธํฐ๋ฝํธ ์์คํ ์ ์ฐ๊ฒฐ๋์ด ์๋ค.
์, ์ธํฐ๋ฝํธ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ค์ ์ปดํจํฐ ๊ด์ ์์ ์ดํด๋ณผ๊น์?
โ ์ฆ, ์ธํฐ๋ฝํธ๋ ํจ์ ํธ์ถ๊ณผ ์ ์ฌํ์ง๋ง, ์ธ๋ถ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํด์ผ ์๋ํด์.
์ธํฐ๋ฝํธ ๋ฒํธ | ์๋ฏธ | ํธ๋ค๋ฌ ์ฃผ์ |
---|---|---|
0 | ๋๋์ ์ค๋ฅ | 0x0010 |
1 | ํค๋ณด๋ ์ ๋ ฅ | 0x0020 |
2 | ํ์ด๋จธ ์๋ฆผ | 0x0030 |
3 | ์ธ๋ถ ์ฅ์น ์ ํธ | 0x0040 |
๊ตฌ์ฑ ์์ | ์ค๋ช |
---|---|
์ธํฐ๋ฝํธ ๋ผ์ธ | ํ๋์จ์ด ์ ํธ์ (CPU๋ก ์์ฒญ ์ ๋ฌ) |
์ธํฐ๋ฝํธ ๋ฒกํฐ | ์ธํฐ๋ฝํธ ์ข ๋ฅ๋ณ ์ฒ๋ฆฌ ๋ฃจํด์ ์ฃผ์ ํ ์ด๋ธ |
์ธํฐ๋ฝํธ ํธ๋ค๋ฌ | ์ค์ ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ๋ ํจ์ |
PCB / ์คํ | ์์ ์ํ ์ ์ฅ์ (๋ณต๊ท๋ฅผ ์ํด ํ์!) |
์ธํฐ๋ฝํธ๋ ๊ฒฐ๊ตญ์ ์ผ์ข
์ ํจ์ ํธ์ถ์
๋๋ค.
๊ทธ๋์ ์ปดํจํฐ๋ ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ ๋ ํ์ฌ ์ํ๋ฅผ ์คํ์ ์ ์ฅํฉ๋๋ค.
์ด ๋ชจ๋ ๊ฑธ ์ ์ฅํ ๋ค, ์์ ์ด ๋๋๋ฉด ์คํ์์ popํด์ ์๋๋๋ก ๋์์ต๋๋ค.
๐ ๊ทธ๋์ ์คํ์ด ์๋ค๋ฉด ํจ์ ํธ์ถ๋, ์ธํฐ๋ฝํธ๋ ์ ๋๋ก ์๋ํ ์ ์์ด์!
๋ชจ๋ ์ธํฐ๋ฝํธ๊ฐ ๋๋ฑํ๊ฒ ์ค์ํ ๊ฑด ์๋์์.
์๋ฅผ ๋ค์ด,
๊ทธ๋์ ์ปดํจํฐ๋ ๊ฐ ์ธํฐ๋ฝํธ์ ๋ํด ์ฐ์ ์์(priority)๋ฅผ ์ค์ ํฉ๋๋ค.
์ผ๋ถ ์ํฉ์์๋ ์ธํฐ๋ฝํธ๋ฅผ ์์ ๋ฌด์ํ๊ฑฐ๋ ์ฐจ๋จํ ํ์๋ ์์ด์.
"์ง๊ธ ๋ฐ์๋ ์ด์ธ์ข ์๋ฆฌ ๋ฌด์ํด์ฃผ์ธ์" โ ์ด ๋๋์ ๋๋ค.
์ธํฐ๋ฝํธ๋ ๊ผญ ์ธ๋ถ์์๋ง ๋ฐ์ํ์ง ์์์. ์ปดํจํฐ ๋ด๋ถ์์๋ ์์ธ(Exception)๋ผ๋ ํํ๋ก ๋ฐ์ํ ์ ์์ด์.
์์ธ ์ํฉ | ์ค๋ช |
---|---|
0์ผ๋ก ๋๋๊ธฐ | ์ํ์ ์ค๋ฅ |
๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ | ์คํ ์ค๋ฒํ๋ก |
์ ๊ทผ ๊ธ์ง | ๋ณดํธ๋ ์์ญ ์นจ๋ฒ |
์ด๋๋ ์ธํฐ๋ฝํธ ๋ฒกํฐ๋ฅผ ๋ฐ๋ผ ์์ธ ํธ๋ค๋ฌ๋ก ์ ํํ์ฌ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
์์ธ ์ํฉ์ ๋ํ ๋ณต๊ตฌ, ๋ก๊น
, ์ฌ์ฉ์ ๋ฉ์์ง ์ถ๋ ฅ ๋ฑ์ด ์ด๋ ์คํ๋์ฃ .
์ธํฐ๋ฝํธ๋ ๋ค์๊ณผ ๊ฐ์ ์ฅ์น๋ ์์๋ค์ ์ํด ์์ฑ๋ ์ ์์ด์.
๋ฐ์ ์ฃผ์ฒด | ์์ |
---|---|
ํ๋์จ์ด | ํค๋ณด๋, ๋ง์ฐ์ค, ๋คํธ์ํฌ, ํ์ด๋จธ |
์ํํธ์จ์ด | ์์คํ ์ฝ, ์ ๋์ค ์๊ทธ๋, ์ํํธ์จ์ด ์ธํฐ๋ฝํธ |
๋ด๋ถ ์ด๋ฒคํธ | ์์ธ, ๋๋ฒ๊น , ๋ถ๋ฒ ๋ช ๋ น ์คํ ๋ฑ |
์ด์์ฒด์ ๋ ์ธํฐ๋ฝํธ๋ฅผ ๋ฉํฐํ์คํน์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉํด์.
์ฆ, ์ฌ๋ฌ๋ถ์ด ์๋์ฐ์์ ํฌ๋กฌ๊ณผ ์นด์นด์คํก์ ๋์์ ์คํํ ์ ์๋ ๊ฑด ์ธํฐ๋ฝํธ ์์คํ ๋๋ถ์ด์์.
๐ Trap๋ ์ธํฐ๋ฝํธ๋ค! ๋จ์ง โ์ํํธ์จ์ด๊ฐ ๋ฐ์โ์์ผฐ๋ค๋ ์ ๋ง ๋ค๋ฆ.
์ถ์ฒ : https://velog.io/@woo00oo/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8Interrupt
ํญ๋ชฉ | ์ค๋ช |
---|---|
์ธํฐ๋ฝํธ | ์ธ๋ถ ์ด๋ฒคํธ์ ๋์ํ๊ธฐ ์ํด ํ๋ก๊ทธ๋จ ์คํ์ ์ ์ ๋ฉ์ถ๋ ๋ฉ์ปค๋์ฆ |
ํธ๋ค๋ฌ | ์ธํฐ๋ฝํธ ๋ฐ์ ์ ์คํ๋๋ ํน๋ณํ ํจ์ |
์คํ | ํ์ฌ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ณต๊ตฌํ๋ ๋ฐ ์ฌ์ฉ |
๋ฒกํฐ ํ ์ด๋ธ | ๊ฐ ์ธํฐ๋ฝํธ ๋ฒํธ์ ๋ํ ํธ๋ค๋ฌ ์ฃผ์๋ฅผ ์ ์ฅ |
์ฐ์ ์์ | ๋ ์ค์ํ ์ธํฐ๋ฝํธ๋ฅผ ๋จผ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ |
๋ง์คํน | ํน์ ์ธํฐ๋ฝํธ๋ฅผ ์ ์ ๋นํ์ฑํ ๊ฐ๋ฅ |
์์ธ | ๋ด๋ถ ์ค๋ฅ๋ ์ธํฐ๋ฝํธ์ฒ๋ผ ์ฒ๋ฆฌ |
์๋ต ์๊ฐ | ๋น ๋ฅธ ๋ฐ์์ด ์ค์! (์ค์๊ฐ ์์คํ ์์ ํต์ฌ) |
์ฟ ํค ๋ฐ์ฃฝ์ ํ๋ฉด์๋ ์ด์ธ์ข
์ ๋ฐ์ํ ์ ์๋ ๋ฐฉ๋ฒ.
๊ทธ๊ฒ ๋ฐ๋ก ์ปดํจํฐ์ ์ธํฐ๋ฝํธ ์์คํ
์
๋๋ค.
์ด ์์คํ ๋๋ถ์ ์ฐ๋ฆฌ๋:
โ์ปดํจํฐ๊ฐ ๋๋ํ ์ด์ ?
์ฟ ํค๋ฅผ ํ์ฐ์ง ์๊ณ , ์ํฌ๋ ๋์น์ง ์๋ ์ธํฐ๋ฝํธ ์์คํ ๋๋ถ์ด์์!โ
์ฐ๋ฆฌ๋ ํ์์ ์ปดํจํฐ์์ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ ๋์์ ์คํํฉ๋๋ค.
ํ์ง๋ง CPU๋ ํ ๋ฒ์ ํ๋์ ๋ช
๋ น์ด๋ง ์ฒ๋ฆฌํ ์ ์์ด์.
๊ทธ๋ ๋ค๋ฉด, ์ด๋ป๊ฒ ์ ํ๋ธ์ ์นด์นด์คํก์ ๋์์ ์คํํ ์ ์์๊น์?
โ ํด๋ต์ ๋ฐ๋ก ์ด์์ฒด์ (OS)๊ฐ
์ด์์ฒด์ ๋ ์ปดํจํฐ ์์์ ๊ด๋ฆฌํ๋ ์์คํ ํ๋ก๊ทธ๋จ์ ๋๋ค.
๊ด๋ฆฌ์ ํ๋ก๊ทธ๋จ์ ์ด์์ฒด์ ๋๋ ์ด์์ฒด์ ์ปค๋์ด๋ผ๊ณ ํ๊ณ OS์ OS๊ฐ ๊ด๋ฆฌํ๋ ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ถํ๊ธฐ ์ํด OS๋ฅผ ์์คํ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ ๋ค๋ฅธ ๋ชจ๋ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด๋ ํ๋ก์ธ์ค๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์ฉ์ด | ์ค๋ช |
---|---|
์ด์์ฒด์ (OS) | ์์คํ ์์์ ์ด๊ด ๊ด๋ฆฌํ๋ ๊ด๋ฆฌ์ |
์ปค๋(Kernel) | ์ด์์ฒด์ ์ ํต์ฌ ๊ธฐ๋ฅ ์งํฉ |
์ฌ์ฉ์ ํ๋ก๊ทธ๋จ | ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ์คํํ๋ ์ฑ |
ํ๋ก์ธ์ค(Process) | ์คํ ์ค์ธ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ |
์ด์์ฒด์ ๋ CPU, ๋ฉ๋ชจ๋ฆฌ, ์ ์ฅ์ฅ์น, ์ ์ถ๋ ฅ ์ฅ์น ๋ฑ์ ๊ด๋ฆฌํ๋ฉฐ
์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ด ๋์์ ๋์๊ฐ๋ ํ๊ฒฝ์ ๋ง๋ค์ด์ค๋๋ค.
์ปค๋ ๊ด๋ จ ์ ๋ฆฌ : ๋ฆฌ๋ ์ค ๊ฐ์ : ์ปค๋์ด ๋ญ์์? ์ ํ์ํด?
์ด์์ฒด์ ๋ ํ์ด๋จธ ์ธํฐ๋ฝํธ๋ฅผ ํตํด
๊ฐ ํ๋ก๊ทธ๋จ์ด ์ผ๋ง๋ CPU๋ฅผ ์ผ๋์ง ํ์
ํ๊ณ ,
์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ผ๋ก ์ ํ์ํต๋๋ค.
์๋ถํ ์ค์ผ์ค๋ง ํ๋ฆ |
---|
A ํ๋ก๊ทธ๋จ ์คํ ์์ |
โ ํ์ด๋จธ ์ธํฐ๋ฝํธ ๋ฐ์ |
โ A ์ํ ์ ์ฅ |
โ B ํ๋ก๊ทธ๋จ ์คํ |
โ ๋ค์ ํ์ด๋จธ ์ธํฐ๋ฝํธ |
โ B ์ํ ์ ์ฅ |
โ A ๋ณต๊ท |
โณ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์คํ ์๊ฐ์ ์กฐ์ ํ๋ ์ค์ผ์ค๋งscheduling ๊ธฐ๋ฒ์ ์ด๋ฅผ "์๋ถํ (Time Slicing)"์ด๋ผ ๋ถ๋ฅด๋ฉฐ,
์ปดํจํฐ๋ ๋ง์น ๋น ๋ฅธ ์ค๋๊ธฐ ๊ต๋์ฒ๋ผ ํ๋ก๊ทธ๋จ์ ๋ฒ๊ฐ์ ์คํํฉ๋๋ค.
๊ฐ ํ๋ก๊ทธ๋จ์ ํ์ฌ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ํ๋ ๊ณผ์ ์ด ํ์ํฉ๋๋ค.
์ด๊ฑธ ๋ฌธ๋งฅ(Context)์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ , ๊ตํ ๊ณผ์ ์ ๋ฌธ๋งฅ ๊ตํ(Context Switch)์ด๋ผ ํด์.
โ ๋ฌธ๋งฅ ๊ตํ์ ์๊ฐ์ด ๋๋ ์์ ์ด์ง๋ง, ๋ฉํฐํ์คํน์ ํต์ฌ์ ๋๋ค!
์ด์์ฒด์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ฒ๋ผ ๋๋ ์ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฆฝ๋๋ค.
์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ํ๋์ฉ ์ฐจ๋ก๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋๋ค.
ํ์ง๋ง ์ด๋ ์ ๋ ์ฃผ์ ๋ฐฉ์์ผ๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ด์.
์ฐ๋ฆฌ๊ฐ ์๋ก ๋ ์ปดํจํฐ๋ ์ ๋ ์ฃผ์ ์ง์ absolute addressing์ ์ฌ์ฉํ์ด์. ์ ๋ ์ฃผ์ ์ง์
์ ๋ช
๋ น์ด ์ฃผ์๊ฐ ํน์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค๋ ๋ป์
๋๋ค.
์๋ฅผ ๋ค์ด, 1000๋ฒ์ง์์ ์คํ๋๋๋ก ๋ง๋ ํ๋ก๊ทธ๋จ์ 2000๋ฒ์ง์ ์ฌ๋ฆฌ๋ฉดโฆ ์ค๋ฅ ๋ฐ์!
์ปดํจํฐ CPU ์ ์ธ๋ฑ์ค ๋ ์ง์คํฐ ๋ ํ๋ก๊ทธ๋จ ์คํ ์ค ํผ์ฐ์ฐ์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฐ ์ฌ์ฉ๋๋ ํ๋ก์ธ์ ๋ ์ง์คํฐ (๋๋ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์์น) ์ ๋๋ค.
๋ฌธ์์ด ๊ณผ ๋ฐฐ์ด์ ๋จ๊ณ๋ณ๋ก ์คํํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. ๋ฃจํ ๋ฐ๋ณต ๋ฐ ์นด์ดํฐ๋ฅผ ๋ณด๊ดํ๋ ๋ฐ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ๋ ์ฃผ์ ์ง์ ๋ฌธ์ ์ ํด๊ฒฐ๋ฒ์ผ๋ก ๋ํ๋ฌ์ด์!!
์ถ์ฒ : https://blog.naver.com/k97b1114/140157844146
์ข ๋ ์์ธํ ์ค๋ช ํ์๋ฉด,
๐งพ ๋ช ๋ น์ด ์ฃผ์ (Instruction Address)
LOAD 100
โ โ100๋ฒ์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์์ค!โํ์ง๋ง ์ด๊ฑด ์ด๋๊น์ง๋ ๊ธฐ์ค ์ฃผ์์ ๋ํด์ ธ์ผ ํ๋ ์๋ ์ฃผ์์์. ์ค์ ์์น๋ ์์ง ์๋์์!
๐งฎ ์ธ๋ฑ์ค ๋ ์ง์คํฐ (Index Register)
์๋ฅผ ๋ค์ด, ์ด๋ค ํ๋ก๊ทธ๋จ์ด 3000๋ฒ์ง๋ถํฐ ์คํ ์ค์ด๋ผ๋ฉด, ์ธ๋ฑ์ค ๋ ์ง์คํฐ๋ 3000
์ผ๋ก ์ค์ ๋ฉ๋๋ค.
โ ์ ํจ ์ฃผ์ (Effective Address)
์ ํจ ์ฃผ์ = ์ธ๋ฑ์ค ๋ ์ง์คํฐ ๊ฐ + ๋ช ๋ น์ด ์ฃผ์ (์คํ์ )
์ด ๋ง์,
์ฉ์ด | ์๋ฏธ |
---|---|
๋ช ๋ น์ด ์ฃผ์ (offset) | ๋ช ๋ น์ด ์์ ์๋ ์๋ ์ฃผ์. โ์ด๋งํผ ๋จ์ด์ง ๊ณณโ |
์ธ๋ฑ์ค ๋ ์ง์คํฐ | ํ์ฌ ํ๋ก๊ทธ๋จ์ด ์์๋ ๊ธฐ์ค ์ฃผ์ |
์ ํจ ์ฃผ์ | ์ค์ ๋ก ์ ๊ทผํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ = ๊ธฐ์ค + ์๋๊ฐ |
4000
์ ์์นํด ์๊ณ ,+20
๋จ์ด์ง ๊ณณ์ ์ ํํ๋ ค๋ ๋ช
๋ น์ด ์๋ค๋ฉด,4000 + 20 = 4020
์ด์ฒ๋ผ ์๋ ์ฃผ์ ์ง์ ์ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ด ์์ด์:
์ฅ์ | ์ค๋ช |
---|---|
์์น ๋ ๋ฆฝ์ฑ | ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ ์์น์ ๋ก๋๋๋ ์ ์์ ์ผ๋ก ๋์ ๊ฐ๋ฅ |
์ฝ๋ ์ฌ์ฌ์ฉ์ฑ | ๋ค๋ฅธ ์์น์์๋ ๋์ผ ์ฝ๋ ์ฌ์ฉ ๊ฐ๋ฅ (ํนํ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์์ ์ ๋ฆฌ) |
์ปดํ์ผ๋ฌ ์ต์ ํ | ์ปดํ์ผ๋ฌ๊ฐ ์คํ์ (์๋ ๊ฑฐ๋ฆฌ)๋ง ๊ณ์ฐํ๋ฉด ๋๋ฏ๋ก ๊ตฌํ ๊ฐ๊ฒฐ |
๐ง ์์ฆ ๋๋ถ๋ถ์ ์ปดํ์ผ๋ฌ์ ์ด์ ๋ธ๋ฌ๋ ์ด ์๋ ์ฃผ์ ๊ณ์ฐ์ ์๋์ผ๋ก ์ฒ๋ฆฌํด ์ค๋๋ค.
์ฐ๋ฆฌ๋jump +4
๊ฐ์ ์ฝ๋๋ง ์ฐ๋ฉด, ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ณ์ฐ์ ๊ธฐ๊ณ๊ฐ ํด์ฃผ์ฃ !
4000: CMP A, 10 ; ๋น๊ต
4001: JE +4 ; ์กฐ๊ฑด์ด ์ฐธ์ด๋ฉด 4005๋ฒ์ง๋ก ์ ํ
4002: ... ; ๋ค๋ฅธ ๋ช
๋ น์ด
4005: PRINT "OK" ; ์ ํ ๋์
์ด์ฒ๋ผ ํ์ฌ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ํ ๋์์ ์ง์ ํ๋ฉด,
ํ๋ก๊ทธ๋จ์ด ์ด๋ ์์น์ ์ฌ๋ผ๊ฐ๋๋ผ๋ ์ ํํ ์ํ๋ ๋ช
๋ น์ผ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
๐ง ์์ฆ ์ปดํ์ผ๋ฌ๋ ์ด๋ฐ ์๋ ์ฃผ์ ๊ณ์ฐ์ ์๋์ผ๋ก ํด์ค๋๋ค.
์ฃผ์ ์ง์ ๋ฐฉ์ ๋ ์์๋ณด๊ธฐ : https://blog.naver.com/k97b1114/140157844146
์ด๋ฐ ์ฃผ์ ์ง์ ๊ธฐ์ ์ ํ์ฉํ๋ฉด,
์ด์์ฒด์ ๋ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ค ์์น๋ ์์ ๋กญ๊ฒ ์ฌ๋ ค์ ์คํํ ์ ์์ด์.
ํญ๋ชฉ | ์ค๋ช |
---|---|
์ด์์ฒด์ (OS) | ์์คํ ์์ ๊ด๋ฆฌ์ |
์๋ถํ (Time Slicing) | CPU ์๊ฐ์ ์๊ฒ ๋๋ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ ํ ๋น |
ํ์ด๋จธ ์ธํฐ๋ฝํธ | ์ผ์ ์๊ฐ๋ง๋ค ์ค์์นญ์ ์๋ฆผ |
๋ฌธ๋งฅ ๊ตํ(Context Switch) | ํ๋ก๊ทธ๋จ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ |
์ธ๋ฑ์ค ๋ ์ง์คํฐ | ๋ช ๋ น์ด ์ฃผ์์ ๊ธฐ์ค๊ฐ์ ๋ํด ์ ํจ ์ฃผ์ ๊ณ์ฐ |
์๋ ์ฃผ์ ์ง์ | ๋ช ๋ น์ด ๊ธฐ์ค์ผ๋ก ์ฃผ์๋ฅผ ๊ณ์ฐ |
์ฌ๋ฐฐ์น(Relocation) | ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋๋ ์ฎ๊ฒจ ์คํ ๊ฐ๋ฅ |
โ๋ฉํฐํ์คํน์ด ๊ฐ๋ฅํ ์ด์ ?
์ด์์ฒด์ ๊ฐ ์๊ฐ๊ณผ ๊ณต๊ฐ์ ์ ์ชผ๊ฐ์ ํ๋ก๊ทธ๋จ๋ค์ ์กฐํ๋กญ๊ฒ ์กฐ์จํ๊ธฐ ๋๋ฌธ์ ๋๋ค.โ ๐ต
MMU(Memory Management Unit)๋ ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์ฌ ๋ ์ ์ฐํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๋ง๋ฒ ๊ฐ์ ์ฅ์น์ ๋๋ค. ์ฃผ๊ธฐ์ต์ฅ์น๊ด๋ฆฌ์ ํต์ฌ์ '๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ ๊ด๋ฆฌํ ์ ์์๊น'์ ์์ต๋๋ค.
๊ณผ๊ฑฐ์๋ ์ปดํจํฐ๊ฐ ํ ๋ฒ์ ํ๋์ ํ๋ก๊ทธ๋จ๋ง ์คํํด๋ ์ถฉ๋ถํ์ง๋ง,
์์ฆ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ด ๋์์ ์คํ๋๋ ๋ฉํฐํ์คํน์ด ๋น์ฐํ ์๋์์.
ํ์ง๋ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๐งจ ๋ณด์ ์ํ๋ฟ๋ง ์๋๋ผ, ์์คํ ์ ์ฒด๊ฐ ๋ป์ ์ ์์ด์!
๊ทธ๋์ ํ์ํ ๊ฒ์ด ๋ฐ๋ก MMU (Memory Management Unit)์ ๋๋ค.
MMU๋ ์ปดํจํฐ์ ๋ค์ด ์๋ ํ๋์จ์ด ์ฅ์น๋ก,
โ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ๋ "๊ฐ์ ์ฃผ์"๋ฅผ ์ค์ "๋ฌผ๋ฆฌ ์ฃผ์"๋ก ๋ณํํด์ฃผ๋ ์ฅ์น์ ๋๋ค.
์ถ์ฒ : https://velog.io/@tycode4/%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC
์ฐ๋ฆฌ๊ฐ ๋ณดํต ์๊ณ ์๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋:
"MMU๊ฐ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ๋ ๊ฐ์ ์ฃผ์๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์๋ก ๋ฐ๊ฟ์ฃผ๋ ์์คํ "
...์ด ์ ๋๋ก ์๊ณ ์์ง๋ง, ์ฌ์ค ๊ทธ ๊ธฐ๋ฅ์ ์์์ผ ๋ฟ์ด๊ณ , ์ง์ง ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํจ์ฌ ๋ ๋๋ดํ ์ฐฉ๊ฐ(!)์ ๋ง๋ค์ด๋ด์.
๐ง ํ๋ก๊ทธ๋จ์ "๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ"์ ๋ชจ๋ฅธ๋ค?
์ด์์ฒด์ ๋ ์ด๋ ๊ฒ ์์
๋๋ค:
โ๊ทธ๋, ๋ค๊ฐ ํ์ํ ๋งํผ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ๊ฒ์ฒ๋ผ ์จ๋ ๋ผ~ ๋ด๊ฐ ๋ค์์ ์์์ ํด์ค๊ฒ!โ
์ค์ ๋ก๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด๋ ํ๋ก๊ทธ๋จ์ด ๋๋ผ์ง ์๋๋ก, ํ์ด์ง ํดํธ(page fault)์ ํจ๊ป ์๊ตฌ๋ถ ํ์ด์ง(demand paging) ๊ธฐ๋ฒ์ด ์๋ํฉ๋๋ค.
์ฆ, ํ๋ก๊ทธ๋จ์ ์์ ์ด ๋ง์น ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๊ณ ์๋ ๊ฒ์ฒ๋ผ ๋๋ผ๊ฒ ๋ง๋ค์ด ์ฃผ๋ ์ฅ์น์ฃ .
์ฉ์ด | ์ค๋ช |
---|---|
๊ฐ์ ์ฃผ์ | ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ๋ ์ฃผ์. ๊ฒ๋ณด๊ธฐ์ฉ |
๋ฌผ๋ฆฌ ์ฃผ์ | ์ค์ ๋ฉ๋ชจ๋ฆฌ(RAM) ์์ ์์น |
MMU | ๊ฐ์ ์ฃผ์ โ ๋ฌผ๋ฆฌ ์ฃผ์๋ก ๋ฐ๊ฟ์ฃผ๋ ์ฅ์น |
๐ ์ด ๊ณผ์ ๋๋ถ์ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ด ์๋ก ๋ ๋ฆฝ๋ ๊ณต๊ฐ์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋์ํ ์ ์์ด์!
MMU๋ ๊ฐ์ ์ฃผ์๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์๋ก ๋จ์ํ 1:1 ๋งคํํ์ง ์์ต๋๋ค.
๋์ , ํ์ด์ง(Page)๋ผ๋ ๋จ์๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ์ฃ .
ํ๋ก๊ทธ๋จ์ด ์ง์ง๋ก ํ์ํ ํ์ด์ง๋ง ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค์.
๋๋จธ์ง๋ ์์ง ๋ฉ๋ชจ๋ฆฌ์ ์์ด์. ํ์ํ ๋ ๊ทธ๋๊ทธ๋ ๋ถ๋ฌ์ต๋๋ค.
๋ง์น ๋ทํ๋ฆญ์ค์์ ๋ณด๊ณ ์ถ์ ์ฅ๋ฉด๋ง ์คํธ๋ฆฌ๋ฐํ๋ ๊ฒ๊ณผ ๊ฐ์์.
CPU๋ ๋ฌด์กฐ๊ฑด ๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ง์ ์ฐธ์กฐํด๋ฌ๋ผ๊ณ ์์ฒญํ๊ณ , ๊ทธ ๊ฐ์๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์ค์ ์ด๋ ๋ฌผ๋ฆฌ ์ฃผ์์ ์๋์ง MMU๊ฐ ๋ณํ ์์ผ์ฃผ๊ณ , ๊ทธ ํด๋น ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผ์ ํ์ฌ ๊ทธ ํด๋น ๋ฐ์ดํฐ๋ฅผ CPU์ ์ ๋ฌํฉ๋๋ค.
๊ฐ์ ์ฃผ์๋ ์ฐ์์ ์ด์ง๋ง, ๋ฌผ๋ฆฌ ์ฃผ์๋ ๋ถ์ฐ์์ผ ์ ์์ โ ๋ฉ๋ชจ๋ฆฌ ์กฐ๊ฐ ๋ฌธ์ ๋ฐฉ์ง!
์ด๋ก ์ธํด ํ์ด์ง ๊ธฐ๋ฒ์ด ์๊ฒจ๋จ ๋ ์ฝ์ด๋ณด๊ธฐ
ํ๋ก๊ทธ๋จ ์ ์ฅ์์๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฐ์์ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ค์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์์ ์์น๋ ๊ตณ์ด ์ฐ์์ ์ผ ํ์๊ฐ ์์ต๋๋ค.
์ฌ์ง์ด ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ค์ ํ๋ก๊ทธ๋จ์ด ์์นํ ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๋ฐ๋ ์๋ ์์ด์.
๊ทธ๋ฆฌ๊ณ ํ๋ก๊ทธ๋จ๋ค์ด ์๋ก ํ๋ ฅํ๋ ๊ฒฝ์ฐ์๋ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ค ์ผ๋ถ๊ฐ ๊ฐ์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์๋ ์์ด์.
์ด์ ํ์ด์ง ํ ์ด๋ธ์ ๋ด์ฉ์ด ํ๋ก๊ทธ๋จ ๋ฌธ๋งฅ์ ์ผ๋ถ๋ถ์ด ๋๋ค๋ ์ฌ์ค์ ์ ์ํ๊ณ ๋ณด๋ฉด, ํ์ด์ง ํ ์ด๋ธ์ ๊ทธ๋ฅ ๋ฉ๋ชจ๋ฆฌ์ ์ผ๋ถ๋ถ์ด ๋ฉ๋๋ค.
๊ฐ์ ์ฃผ์: A15~A0
(์ด 16๋นํธ)
A15~A8
) โ ํ์ด์ง ๋ฒํธ (256๊ฐ ํ์ด์ง)A7~A0
) โ ํ์ด์ง ์์ ์คํ์
ํ์ด์ง ํ ์ด๋ธ:
๊ฐ์ ํ์ด์ง ๋ฒํธ | ๋งคํ๋ ๋ฌผ๋ฆฌ ํ์ด์ง ๋ฒํธ |
---|---|
0 | 8 |
1 | 5 |
... | ... |
โ ์๋ฅผ ๋ค์ด, ๊ฐ์ ์ฃผ์ 0x01A2
๋:
0x05A2
๋ก ๋ณํ๋จMMU๊ฐ ์๋ค๋ฉด?
MMU๊ฐ ์๋ค๋ฉด?
์ด์์ฒด์ ๋ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฝ ์ฐผ์ ๋ ์ด๋ ๊ฒ ์ฒ๋ฆฌํด์:
๋์ | ์ค๋ช |
---|---|
๐ค ์ค์ ์์ | ์ฌ์ฉํ์ง ์๋ ํ์ด์ง๋ฅผ ๋์คํฌ๋ก ์ฎ๊น (์๋ ๋๋ฆผ) |
โก ์ค์ ์ธ | ํ๋ก๊ทธ๋จ์ด ๊ทธ ํ์ด์ง๋ฅผ ๋ค์ ํ์๋ก ํ ๋, ๋์คํฌ์์ ๋ค์ ๋ถ๋ฌ์ด |
์ด ๊ณผ์ ์ ํตํด ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค์ ๋ณด๋ค ๋ ์ปค ๋ณด์ด๊ฒ ๋ง๋ค ์ ์์ด์. ์ด๊ฒ์ด ๋ฐ๋ก ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ํต์ฌ ๋ง๋ฒ์ ๋๋ค.
0x2000
์ฃผ์์ ์ ๊ทผํ๋ ค ํจ0x2000
์ด ํฌํจ๋ ํ์ด์ง๋ฅผ ์ค์ ์ธ์๊ตฌ๋ถ ํ์ด์ง์ โํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ง ์ฆ์ ๊ฐ์ ธ์ค๊ณ , ์ ์ฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ๋ก ๋ณด๋ด๋โ ์ค๋งํธํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ด์ ๋ฐฉ์์ ๋๋ค.
์ด ๊ณผ์ ์ '์๊ตฌ ํ์ด์ง(Demand Paging)'์ด๋ผ๊ณ ํฉ๋๋ค. OS๋ ํ์ด์ง ์ ๊ทผ ํจํด์ ์ถ์ ํด ์ด๋ค ํ์ด์ง๋ฅผ ์ค์ํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ๋ํ์ ์ผ๋ก LRU(Least Recently Used) ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋ฉ๋๋ค.
"์์ฃผ ์ฐ๋ ๊ฑด ๋์ฅ๊ณ ์, ๋ ์ฐ๋ ๊ฑด ์ฐฝ๊ณ ์. ๊ทธ๋ฐ๋ฐ ์ฐฝ๊ณ ์์ ๊บผ๋ผ ๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค!"
ํญ๋ชฉ | MMU | ์ธ๋ฑ์ค ๋ ์ง์คํฐ |
---|---|---|
๊ธฐ๋ฅ | ๊ฐ์ โ ๋ฌผ๋ฆฌ ์ฃผ์ ๋ณํ | ๋์ ์ฃผ์ ๊ณ์ฐ (์คํ์ ๊ณ์ฐ์ฉ) |
๋ฒ์ | ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ | ์ ํ์ (์ผ๋ถ ์ฃผ์์๋ง ์ ์ฉ) |
๋ณดํธ ๊ธฐ๋ฅ | ์์ (๋ณด์, ๊ถํ ๋ฑ) | ์์ |
ํ๋ก๊ทธ๋จ ๋ถ๋ฆฌ | ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ |
MMU๋ ๋จ์ํ ์ฃผ์ ๊ณ์ฐ๊ธฐ๊ฐ ์๋๋ผ, ๋ณด์ยท์์ ์ฑยท๋ค์ค ํ๋ก๊ทธ๋จ ์คํ์ ํต์ฌ ์ฅ์น์ ๋๋ค.
"๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ์ํฉ์์๋ ์ค์ํ์ ํตํด์๋ผ๋ ํ๋ก๊ทธ๋จ์ ์คํ์ํค๋ ๊ฒ ๋ซ๋ค."
์์ฝ: ์ฑ๋ฅ๋ณด๋ค ๊ฐ์ฉ์ฑ(Availability)์ด ์ค์ํ ์ํฉ์์๋ ์ค์ํ์ด ํฉ๋ฆฌ์ ์ด์์.
"Kafka ๊ฐ์ ๊ณ ์ฒ๋ฆฌ๋ ์์คํ ์์๋ (๊ฑฐ์) ๋ฌด์กฐ๊ฑด ์ค์ํ์ ๋ง์์ผ ํ๋ค."
โ ์นดํ์นด ํต์ฌ ๊ฐ์ด๋ p.40
๊ณ ์ฑ๋ฅ ์์คํ ์์๋ ์ํฉ์ด ์์ ํ ๋ฌ๋ผ์. ์ฑ๋ฅ์ด ๋จ์ด์ง๋ฉด ๋น์ฆ๋์ค ์์ฒด๊ฐ ํ๊ฒฉ์ ์ ์ ์ ์๊ธฐ ๋๋ฌธ์ด์์.
์ด์ | ์ค๋ช |
---|---|
๐ฅ ์ฑ๋ฅ ์ ํ | ์ค์์ ๋์คํฌ I/O๋ฅผ ์ ๋ฐํด์. RAM๋ณด๋ค ์์ฒ ๋ฐฐ ๋๋ ค์. |
๐ ๋ ์ดํด์ ์ฆ๊ฐ | Kafka, DB, ๊ฒ์ ์๋ฒ์ฒ๋ผ ์ค์๊ฐ์ฑ์ด ์ค์ํ ์์คํ ์์ ์น๋ช ์ ์ด์์. |
๐ง ์์ธก ๋ถ๊ฐ | ์ปค๋์ด ์ด๋ค ํ์ด์ง๋ฅผ ์ค์ํ ์ง ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์, ์์ธก์ด ์ด๋ ค์์. |
๐ ์ฒ๋ฆฌ๋ ๊ฐ์ | CPU๋ ํ๊ฐํ๋ฐ ๋ฉ๋ชจ๋ฆฌ I/O ๋๋ฌธ์ ์ ์ฒด ์๋๊ฐ ๋ฆ์ถฐ์ ธ์. |
vm.swappiness
๊ฐ์ 10 ์ดํ๋ก ์ค์ด๊ฑฐ๋ ์์ 0์ผ๋ก ์ค์
sudo sysctl -w vm.swappiness=10
Kafka, Elasticsearch, Redis ๋ฑ์ ์ค์ ๋นํ์ฑํ๊ฐ ๊ถ์ฅ
์ปจํ
์ด๋์์๋ --memory-swappiness=0
์ต์
์ฌ์ฉ
ํญ๋ชฉ | ์ผ๋ฐ PC (๊ต๊ณผ์ ๊ด์ ) | Kafka ๊ฐ์ ๊ณ ์ฑ๋ฅ ์๋ฒ (์ค๋ฌด ๊ด์ ) |
---|---|---|
๋ชฉํ | ์คํ ๊ฐ๋ฅํ ์์คํ ์ ์ง | ์ง์ฐ ์ต์ํ, ์ฒ๋ฆฌ๋ ๊ทน๋ํ |
์ค์ํ ํ์ฉ | ํ์ฉ (ํ์์ ) | โ ์ต๋ํ ๋ฐฉ์ง |
ํ์ด์ง ๊ต์ฒด | LRU ๋ฑ ์ฌ์ฉ | ์ค์ํ ์์ฒด๋ฅผ ์ ํ๋๋ก ์ธํ |
๋ฆฌ์์ค ๋ถ์กฑ ์ | ๋๋ ค์ ธ๋ ๋์ ์ ์ง | ์ฑ๋ฅ ์ ํ๋ SLA ์๋ฐ์ผ๋ก ์น๋ช ์ |
๊ต๊ณผ์์์ ๋งํ๋ ์ค์ํ์ โ์ตํ์ ์์ ์ฅ์นโ์ง๋ง, ์ค๋ฌด์์๋ โ์ ๋ ํผํด์ผ ํ ์ฑ๋ฅ ์ง์ฅโ์ ๋๋ค.
ํค์๋ | ์ค๋ช |
---|---|
MMU | ๊ฐ์ ์ฃผ์ โ ๋ฌผ๋ฆฌ ์ฃผ์ ๋ณํ ํ๋์จ์ด |
ํ์ด์ง | ์ผ์ ๋จ์๋ก ์ชผ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก |
ํ์ด์ง ํ ์ด๋ธ | ๊ฐ์ โ ๋ฌผ๋ฆฌ ์ฃผ์ ๋งคํ ์ ๋ณด ์ ์ฅ ํ ์ด๋ธ |
ํ์ด์ง ํดํธ | ์๋ ๊ฐ์ ์ฃผ์ ์ ๊ทผ ์ ๋ฐ์ํ๋ ์์ธ |
์ ์ด ๋นํธ | ์คํ๋ถ๊ฐ, ์ฝ๊ธฐ์ ์ฉ ๋ฑ ์ ๊ทผ ๊ถํ ์ ์ด |
ํ๋ก๊ทธ๋จ ๋ถ๋ฆฌ | ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ผ๋ก ์๋ก ๊ฒฉ๋ฆฌ |
"ํ๋ ์ปดํจํฐ์์ MMU ์๋ ์์คํ ์ ์์ํ ์ ์์ต๋๋ค.
ํ๋ก๊ทธ๋จ์ด ์์ ํ๊ฒ, ๊ทธ๋ฆฌ๊ณ ์๋ก ๊ฐ์ญ ์์ด ์คํ๋ ์ ์๋๋ก ๋๋ ์กฐ๋ ฅ์.
๊ทธ๊ฒ ๋ฐ๋ก MMU์ ๋๋ค!"
"๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ง์น ๊ฐ ๊ฐ์ ์ด ์๊ธฐ ์ง ์ฃผ์ ์ฒด๊ณ๋ฅผ ์ฐ๋ ๊ฒ์ฒ๋ผ, ๋ค๋ฅธ ์ง ์ฃผ์์ ๊ฒน์น์ง ์๊ฒ ๋ง๋ค์ด์ฃผ๋ ์ฅ์น์ ๋๋ค."
๋ฉํฐํ์คํน ์์คํ ์์ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ด ๋์์ ์คํ๋๊ณ ์์ด๋,
๊ฐ ํ๋ก๊ทธ๋จ์ โ๋ด๊ฐ ์ ์ผํ๊ฒ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จโ์ด๋ผ๊ณ ์ฐฉ๊ฐํฉ๋๋ค.
์ด๊ฑด MMU(๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ฅ์น) ๋๋ถ์ด์์.
๋ง์์.
ํ์ด๋จธ๋ ๋์คํฌ ๊ฐ์ I/O ์ฅ์น๋ ์์คํ
์ ์ฒด์ ์ํฅ์ ์ฃผ๋ ํ๋์จ์ด๋ผ์ ํจ๋ถ๋ก ๊ฑด๋๋ฆฌ๋ฉด ๊ณค๋ํด์ ธ์.
์๋ฅผ ๋ค์ด:
CPU๋ ๋ ๊ฐ์ง ๋ชจ๋๋ฅผ ๊ตฌ๋ถํด์:
๋ชจ๋ | ์ค๋ช |
---|---|
๐งโโ๏ธ ์ฌ์ฉ์ ๋ชจ๋(User Mode) | ์ผ๋ฐ ์ฑ์ด๋ ์ฌ์ฉ์ ์ฝ๋๊ฐ ์คํ๋๋ ๊ณต๊ฐ |
๐ก๏ธ ์์คํ ๋ชจ๋(System/Kernal Mode) | ์ด์์ฒด์ ์ปค๋, I/O, MMU ์ค์ ๋ฑ ์ค์ํ ์ฝ๋๊ฐ ์คํ๋๋ ๊ณต๊ฐ |
์ผ๋ฐ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ์ ๋ชจ๋์์๋ง ์คํ๋ผ์.
์ค์ํ ๋ช
๋ น์ด(์: I/O ์ ์ด, MMU ์ค์ ๋ฑ)๋ โํน๊ถ ๋ช
๋ น์ด(Privileged Instructions)โ๋ผ์
๐ ์์คํ
๋ชจ๋์์๋ง ์คํ์ด ๊ฐ๋ฅํด์!
๐ CPU์ ๋ชจ๋ ์ ํ(User Mode โ System Mode), ๊ทธ๋ฆฌ๊ณ ํน๊ถ ๋ช ๋ น์ด ์คํ ์ฌ๋ถ ํ๋จ์ ๋ชจ๋ ์ด์์ฒด์ ์ปค๋(Kernel)์ด ์ฃผ๋์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ํต์
์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ์์คํ
๊ธฐ๋ฅ์ด ํ์ํ ๋๋ ์ง์ ์คํ ๋ชป ํด์.
๋์ ๋ค์ ์ค ํ๋๋ฅผ ์ฌ์ฉํด์:
์: read()
, write()
, fork()
๋ฑ์ด ๋ชจ๋ ์์คํ
์ฝ!
โ ์ฌ์ฉ์ ๋ชจ๋ โ ์์คํ ๋ชจ๋ ์ ํ ํ๋ฆ๋ ์ค๋ช
์ด ๊ทธ๋ฆผ์ ์ฌ์ฉ์ ๋ชจ๋(User Mode)์์ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ด ์ด๋ป๊ฒ ์ด์์ฒด์ ์ปค๋์ด ์คํ๋๋ ์์คํ ๋ชจ๋(System Mode)๋ก ์ ํ๋๋์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ํ๋ฆ๋์์.
๐ ์ ์ฒด ํ๋ฆ ์์ฝ
์ฌ์ฉ์ ํ๋ก๊ทธ๋จ ์คํ ์ค
read()
, write()
๊ฐ์ ์์คํ
์ฝ์ ์ง์ ์คํํ ์ ์์์์คํ ์ฝ ์์ฒญ
int 0x80
๊ฐ์ ์์คํ
์ฝ ์ธํฐ๋ฝํธ ๋ฐ์Mode Bit๊ฐ 0 โ 1๋ก ์ ํ
์ปค๋ ๋ชจ๋๋ก ์ง์ (System Mode)
์์ ์๋ฃ ํ ์ฌ์ฉ์ ๋ชจ๋ ๋ณต๊ท
๐ง ์ฃผ์ ๊ฐ๋ ์์ฝ
๊ฐ๋ | ์ค๋ช |
---|---|
๐ฆ Mode Bit | CPU ์์ ํ ๋นํธ๋ก, ํ์ฌ ๋ชจ๋๊ฐ ์ฌ์ฉ์(0)์ธ์ง ์์คํ (1)์ธ์ง ๋ํ๋ |
๐ ํธ๋ฉ(Trap) | ์์ธ ์ํฉ์ด๋ ์์คํ ์ฝ ์ ์ปค๋๋ก ์ ์ด๊ถ์ด ๋์ด๊ฐ๋ ๋์ |
๐งญ ์์คํ ์ฝ(System Call) | ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด OS ๊ธฐ๋ฅ์ ์์ฒญํ๋ ์ธํฐํ์ด์ค (ex. ํ์ผ ์ฝ๊ธฐ) |
๐ก๏ธ ํน๊ถ ๋ช ๋ น์ด(Privileged Instructions) | MMU ์ค์ , I/O ์ ์ด ๋ฑ ์์คํ ๋ชจ๋์์๋ง ์คํ ๊ฐ๋ฅํ ๋ช ๋ น์ด |
์ด์์ฒด์ ๋ Mode Bit์ Trap ๋ฉ์ปค๋์ฆ์ ํ์ฉํด ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ๊ณผ ์ปค๋ ๊ธฐ๋ฅ์ ํ์คํ๊ฒ ๊ฒฉ๋ฆฌํ๊ณ ๋ณดํธํฉ๋๋ค.
โ์ด์์ฒด์ ๋ ์ฌ์ฉ์์๊ฒ ์ฐฉ๊ฐ์ ์ฌ์ด์ฃผ๋ ๋์์, ์ฒ ์ ํ ๋ณดํธ ์ฅ์น๋ฅผ ๋์ด ์์คํ ์ ์งํจ๋ค.โ
์์คํ ๊ณต๊ฐ์ ๋ค๋ฃฐ ์ ์๋ ์ฌ๋์ โ์ปค๋ ํด์ปคโ ๊ฐ์ ์์ฃผ ์๋ จ๋ ํ๋ก๊ทธ๋๋จธ์ ๋๋ค.
"์ด๊ฑด ๋ง์น ์ํ ์ฐฝ๊ตฌ์์ ์ง์ ๊ธ๊ณ ๋ฅผ ๋ง์ง์ง ๋ชปํ๊ณ , ์์ฒญ์๋ฅผ ์จ์ ์ฐฝ๊ตฌ ์ง์์๊ฒ ์ ๋ฌํ๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค."
โCPU ๋ชจ๋๋ฅผ ๊ด๋ฆฌํ๋ ๊ฑด ํ๋์จ์ด์ง๋ง, ๊ทธ ๋ชจ๋๋ฅผ ์ ํํ๊ณ ์ ์ดํ๋ ๊ฑด ์ค์ง ์ด์์ฒด์ ์ปค๋๋ง ํ ์ ์๋ค.โ
์๋ ์๋ CPU์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฐ์ ์๋๋ก ๋์ํ์ด์.
์ปดํจํฐ์ ๋ชจ๋ ๋ถํ์ด ํ ํ
ํฌ๋ก ์์ง์ด๋ ํํ๋ก์ด ์์ ์ด์์ฃ .
๊ทธ๋ฐ๋ฐ ์๊ฐ์ด ํ๋ฅด๋ฉฐ CPU๋ ๋ฌด์ญ๊ฒ ๋นจ๋ผ์ก๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ ๊ทธ๋งํผ ๋ฐ๋ผ์ค์ง ๋ชปํ์ต๋๋ค.
โ๋น ๋ฅธ CPU๊ฐ ๋๋ฆฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์๋โ๊ฐ ์์๋ ๊ฑฐ์์.
๋ ์ง์คํฐ๊ฐ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ์์ ์ฐจ์งํ๋ ๋น์จ์ ์ ์ ์์์ ธ ์์ด์.
ํ๋ก์ธ์๋ ๋ณดํต RAM์ผ๋ก ์ด๋ค์ง ์ฃผ ๋ฉ๋ชจ๋ฆฌmain memory์ ํต์ ํ๋๋ฐ, ์ฃผ ๋ฉ๋ชจ๋ฆฌ๋ ํ๋ก์ธ์๋ณด๋ค 1/10 ์ ๋๋ฐ์ ์๋๊ฐ ๋์ง ์์์ ๋๋ ค์.
๋์คํฌ ๋๋ผ์ด๋ธ ๋ฑ์ ๋๋ ์ ์ฅ์ฅ์น๋ ํ๋ก์ธ์๋ณด๋ค ๋ฐฑ๋ง ๋ฐฐ ๋๋ฆด ์๋ ์์ต๋๋ค.
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์จ ๊ฐ๋ ์ด ๋ฐ๋ก
๐ ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต(Memory Hierarchy)
๊ณ์ธต | ๋น์ | ํน์ง | ์๋ |
---|---|---|---|
๋ ์ง์คํฐ | ๋์ฅ๊ณ | ์์ฃผ ์๊ณ ๋น ๋ฆ, CPU ์์ ์์ | ์ต๊ณ ์ |
์บ์(L1~L3) | ์ ์ฅ๊ณ , ๋ฏธ๋๋์ฅ๊ณ | ์์ง๋ง ๋น ๋ฆ, CPU ๊ฐ๊น์ด | ๋งค์ฐ ๋น ๋ฆ |
์ฃผ ๋ฉ๋ชจ๋ฆฌ(RAM) | ์ํผ๋ง์ผ | ํผ์งํ์ง๋ง ๋๋ฆผ | ์ค๊ฐ |
๋์คํฌ(HDD/SSD) | ์ฐฝ๊ณ | ์์ฃผ ํผ, ์์ฒญ ๋๋ฆผ | ๋๋ฆผ |
์ฌ์ฉ์ ํ๋ก๊ทธ๋จ ์ ์ฅ์์๋ ์ ๋ถ "๋ฉ๋ชจ๋ฆฌ"์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ค์ ๋ก๋ ์ด์ฒ๋ผ ์๋๋ ์ฉ๋๋ ์ ํ ๋ค๋ฆ ๋๋ค.
๋ฉ์ด์ง์๋ก ์ปค์ง์ง๋ง ๋๋ ค์ง๊ณ , ๊ฐ๊น์ธ์๋ก ๋น ๋ฅด์ง๋ง ์์์ ธ์.
'์ฉ๋์ด ์์' ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ CPU๊ฐ ์ฌ์ฉํ ๋ฒํ ๋์์ "์์ธก"ํ์ฌ ์ ์ฅํ๋๋ฐ,
์ฉ์ด | ๋ป |
---|---|
โ ์บ์ ํํธ (Cache Hit) | CPU๊ฐ ํ์ํ ๋ฐ์ดํฐ๊ฐ ์บ์์ ์์ด์ ๋น ๋ฅด๊ฒ ์ ๊ทผ ์ฑ๊ณต |
โ ์บ์ ๋ฏธ์ค (Cache Miss) | ์บ์์ ๋ฐ์ดํฐ๊ฐ ์์ด์ ๋๋ฆฐ ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ๊น์ง ๊ฐ์ผ ํจ |
๊ทธ๋์ ๋ ๋ณต์กํ ์ฅ์น๋ค์ด ๋ฑ์ฅํฉ๋๋ค:
โ 1. Branch Prediction (๋ถ๊ธฐ ์์ธก)
์ค๋ช
: ํ๋ก๊ทธ๋จ์๋ if
, for
, while
๊ฐ์ ๋ถ๊ธฐ ๋ช
๋ น์ด๊ฐ ์์ฃผ ๋ฑ์ฅํฉ๋๋ค.
CPU๋ ์ด๋ฐ ๋ถ๊ธฐ๋ฅผ ๋ง๋ฌ์ ๋ ๋ค์ ๋ช
๋ น์ด๊ฐ ์ด๋๋ก ๊ฐ์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฏธ๋ฆฌ ์์ธกํด์ ์คํ ์ค๋น๋ฅผ ํด์.
์์ ๋น์ :
๋งํธ์์ ๊ณ์ฐ๋๊ฐ ๋ ์ค ์์ ๋, ์ฌ๋๋ค์ด ๋ณดํต ์ด๋ ์ค๋ก ๊ฐ๋์ง ์์ธกํ๊ณ ๋จผ์ ์ค ์๋ ๊ฒ๊ณผ ๋น์ทํด์!
ํจ๊ณผ:
โ 2. Out-of-Order Execution (์์ ๋ฌด์ ์คํ)
์ค๋ช
: CPU๋ ๋ช
๋ น์ด๋ฅผ ๋ฌด์กฐ๊ฑด ์์์ ์๋๋ก ์คํํ์ง ์์์.
๋จผ์ ์คํํ ์ ์๋ ๋ช
๋ น์ด๋ถํฐ ๊ณจ๋ผ์ ์ฒ๋ฆฌํด์.
์์กด์ฑ์ด ์๋ ์ฐ์ฐ๋ถํฐ ๋จผ์ ๋๋ด์ ๋๊ธฐ ์๊ฐ์ ์ค์ด๋ ๊ฑฐ์์.
์์ ๋น์ :
๋ผ๋ฉด ๋์ด๊ธฐ ์์๋ฅผ ์๊ฐํด๋ณด๋ฉด, ๋ฌผ์ ๋์ด๋ ๋์ ๋ฐ์ฐฌ์ ๊บผ๋ด๋ ๊ฒ์ฒ๋ผ, ํ ์ ์๋ ์ผ์ ๋จผ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด์์.
ํจ๊ณผ:
๊ธฐ๋ฒ | ์ญํ |
---|---|
Branch Prediction (๋ถ๊ธฐ ์์ธก) | ๋ถ๊ธฐ ๋ช ๋ น(if, loop ๋ฑ)์ด ์ด๋๋ก ๊ฐ์ง ๋ฏธ๋ฆฌ ์์ธกํด์ ๊ธฐ๋ค๋ฆฌ์ง ์์ |
Out-of-Order Execution | ์ฝ๋ ์์ ์๊ด์์ด, ํ ์ ์๋ ๋ช ๋ น์ด๋ถํฐ ๋จผ์ ์คํํจ |
์:
๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต ๊ตฌ์กฐ๋ ๋น ๋ฅธ CPU์ ๋๋ฆฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ ์๋ ์ฐจ์ด๋ฅผ ๋ฉ์ฐ๊ธฐ ์ํ ๊ตฌ์กฐ์ ํด๋ฒ์ด๋ค.
๊ณ์ธต | ๋น์ | ํน์ง |
---|---|---|
๋ ์ง์คํฐ | ๋์ฅ๊ณ | ๊ณต๊ฐ ์์, ์์ฃผ ๋น ๋ฆ |
์บ์ | ์ฃผ๋ฐฉ ์ํ์ฅ | ํฌ์ง ์์ง๋ง ๋น ๋ฆ, ์์ฃผ ์ฐ๋ ๊ฒ๋ง ์ ์ฅ |
์ฃผ ๋ฉ๋ชจ๋ฆฌ | ์ํผ๋ง์ผ | ํฌ์ง๋ง ๋๋ฆผ |
๋์คํฌ | ์ฐฝ๊ณ | ๋งค์ฐ ํผ, ๋งค์ฐ ๋๋ฆผ |
๋์คํจ์ฒ | ์์ฌ๋ฃ ๋ถ๋ฐฐ๊ธฐ | ์ด๋์ ์ด๋ค ๊ฑธ ๊บผ๋ด๊ณ ์ฑ์ธ์ง ๊ฒฐ์ ํจ |
๋ฉ๋ชจ๋ฆฌ๋ ๋น ๋ฅด์ง๋ง ๋น์ผ ๊ณต๊ฐ์์ ๋๋ฆฌ์ง๋ง ์ ๋ ดํ ๊ณต๊ฐ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์บ์ ๋ฏธ์ค๊ฐ ์๊ธฐ๋ฉด ํ์ ๊ณ์ธต์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๋ผ ์๊ฐ์ด ๋ ๊ฑธ๋ฆฝ๋๋ค.
"์ง โ ๋์ฅ๊ณ โ ์๋ฃํ ๊ฐ๊ฒ โ ์ฐฝ๊ณ
์ด ํ๋ฆ์ด ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ํํ ๋ฎ์์ฃ ."
๋ฉํฐ์ฝ์ด ํ๊ฒฝ์์๋ ์บ์ ์ผ๊ด์ฑ ๋ฌธ์ ๋ ์๊น๋๋ค. ์ฌ๋ฌ ์ฝ์ด๊ฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ทผํ ๋, ์บ์์ ์๋ ๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๊ฐ์ด ๋ค๋ฅผ ์ ์๊ธฐ ๋๋ฌธ์ด์ฃ . ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด:
๊ทธ๋ฆฌ๊ณ ๊ณ ๊ธ ํ๋ก์ธ์๋ ๋ค์ ๋ช ๋ น์ด๋ฅผ ๋ฏธ๋ฆฌ ์์ธกํ๋ ๋ถ๊ธฐ ์์ธก๊ธฐ์ ์์๋ฅผ ๋ฐ๊ฟ ํจ์จ์ ์ผ๋ก ์คํํ๋ Out-of-Order Execution ๊ธฐ๋ฅ๋ ํ์ฌํฉ๋๋ค.
CPU๋ ๊ต์ฅํ ๋ณต์กํ๊ณ ์ค์ํ ํ๋ก๋ผ์ ๋ชจ๋ ์ผ์ ํผ์ ์ฒ๋ฆฌํ๊ธด ์ด๋ ค์์.
๊ทธ๋์ ํน์ ์์ ์ โ๋ณด์กฐ ํ๋ก์ธ์โ, ์ฆ ์ฝํ๋ก์ธ์์ ๋งก๊น๋๋ค.
์ถ์ฒ : https://recipes.tistory.com/203
์ฝํ๋ก์ธ์๋ ๋ฉ์ธ CPU์ ํจ๊ป ๋์ํ๋ฉฐ, ํน์ ๊ธฐ๋ฅ์ ๋ณด์กฐํ๊ฑฐ๋ ์ ์ดํ๋ ํ๋์จ์ด ์ ๋์
๋๋ค.
ARM ๊ตฌ์กฐ์์๋ CP15(Coprocessor 15)๊ฐ ๋ํ์ ์ด๋ฉฐ, ์๋์ ๊ฐ์ ์ค์ํ ์ ์ด ๊ธฐ๋ฅ์ ๋ด๋นํฉ๋๋ค:
๊ธฐ๋ฅ | ์ค๋ช |
---|---|
MMU ON/OFF ์ ์ด | ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ฌ๋ถ ์ค์ |
์บ์ ON/OFF | I-Cache(๋ช ๋ น์ด ์บ์), D-Cache(๋ฐ์ดํฐ ์บ์) ์ฌ์ฉ ์ ์ด |
ํ์ด์ง ํ ์ด๋ธ ์ฃผ์ ์ค์ | MMU๊ฐ ์ฐธ์กฐํ ํ์ด์ง ํ ์ด๋ธ ์์น ์ง์ |
๊ถํ ์ ์ด (DACR ๋ฑ) | ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ๊ถํ(์ฝ๊ธฐ/์ฐ๊ธฐ ๋ฑ) ์ค์ |
ARM์ CPU ์ฝ์ด๋ ์ด๋ฏธ ์ฐ์ฐ/๋ถ๊ธฐ/ํ์ดํ๋ผ์ธ ๋ฑ ๋ค์ํ ๋ณต์กํ ์ฐ์ฐ์ ์ํํ๊ณ ์์ด์.
ํ์ง๋ง ์์คํ
์ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ฐ์ ์ ์ด์ฉ ๊ธฐ๋ฅ๊น์ง ๋ชจ๋ ์ง์ ๋ด๋นํ๋ฉด:
โ ๋ณต์ก์ฑ ์ฆ๊ฐ
โ CPU ์์ ๋ญ๋น
โ ์ํํธ์จ์ด-ํ๋์จ์ด ์ธํฐํ์ด์ค๊ฐ ์ด๋ ค์์ง
๊ทธ๋์ ์ ์ด ๊ด๋ จ ๊ธฐ๋ฅ๋ง ๋ฐ๋ก ๋ถ๋ฆฌํ ๊ฒ์ด ์ฝํ๋ก์ธ์์์.
CR (Control Register) ์ฃผ์ ๋นํธ ์ค๋ช
๋นํธ | ๊ธฐ๋ฅ | ์ค๋ช |
---|---|---|
M | MMU ์ ์ด | ON์ด๋ฉด ๊ฐ์ ์ฃผ์ โ ๋ฌผ๋ฆฌ ์ฃผ์ ๋ณํ ๊ฐ๋ฅ |
C | D-Cache ์ ์ด | ๋ฐ์ดํฐ ์บ์ ์ฌ์ฉ ์ฌ๋ถ |
I | I-Cache ์ ์ด | ๋ช ๋ น์ด ์บ์ ์ฌ์ฉ ์ฌ๋ถ |
์ฆ, CR ๋ ์ง์คํฐ๋ฅผ ์กฐ์ํ๋ฉด MMU ํ์ฑํ + ์บ์ ํ์ฑํ ์ฌ๋ถ๋ฅผ ์ํํธ์จ์ด์์ ์ ์ดํ ์ ์์ต๋๋ค.
๊ฐ์ ์ฃผ์ | ์ค์ ๋ฌผ๋ฆฌ ์ฃผ์ | ์ ๊ทผ ๊ถํ |
---|---|---|
0x13D00000 | 0x46200000 | ์ฝ๊ธฐ/์ฐ๊ธฐ |
0x14100000 | 0x74600000 | ์ฝ๊ธฐ/์ฐ๊ธฐ |
0x14300000 | 0x66300000 | ์ ๊ทผ ๋ถ๊ฐ |
์๋ํ๋ฉด:
ARM์ ์ฝํ๋ก์ธ์(CP15)๋ MMU์ ์บ์, ํ์ด์ง ํ ์ด๋ธ, ๊ถํ ์ ์ด๋ฅผ ๋ด๋นํ๋ ํต์ฌ ์ ์ด๊ธฐ์ด๋ฉฐ, ์ํํธ์จ์ด์์ ์ด๋ฅผ ์ ์ดํจ์ผ๋ก์จ ์์คํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋๋ค.
์๊ธฐ | ์ญํ |
---|---|
๊ณผ๊ฑฐ | ๋ถ๋์์์ ์ฐ์ฐ(FPU)์ ์ฝํ๋ก์ธ์๊ฐ ๋ด๋น |
์์ฆ | ๊ทธ๋ํฝ ์ฒ๋ฆฌ(GPU), AI ์ฐ์ฐ(NPU) ๊ฐ์ ๋ณต์กํ ์ฐ์ฐ์ ์ฝํ๋ก์ธ์๊ฐ ์ฒ๋ฆฌ |
๊ณผ๊ฑฐ์ ์นฉ ๊ณต๊ฐ์ด ๋ถ์กฑํด์ FPU(๋ถ๋์์์ ์ ๋)๋ฅผ ์ธ๋ถ ์ฝํ๋ก์ธ์๋ก ๋นผ๋์์ง๋ง,
์์ฆ์ ํ๋์ ์นฉ์ GPU๋ NPU๊ฐ ํจ๊ป ๋ค์ด์๋ SoC(System on Chip) ๊ตฌ์กฐ๊ฐ ์ผ๋ฐ์ ์ด์์.
CPU๋ ๊ณ์ฐ๋ง ์ํ๋ ๊ฒ ์๋๋ผ, ๋ฐ์ดํฐ๋ฅผ ์ด๋ฆฌ์ ๋ฆฌ ์ฎ๊ธฐ๋ ์ผ๋ ๋ง์ด ํด์.
๊ทธ๋ฐ๋ฐ ์ด๋ฐ ๊ฑด ์๊ฐ์ ์ค๋ ๊ฑธ๋ฆฌ๊ณ ... ๋๋๋ ํ์ ์์ด์! ๊ทธ๋์ ์ด ์ผ์ DMA๊ฐ ๋งก์ต๋๋ค.
โ์ฌ๊ธฐ์ ์ด๋งํผ ๋ฐ์ดํฐ๋ฅผ ์ ๊ธฐ๋ก ๋ณต์ฌํด์ค. ๋ค ๋๋๋ฉด ๋ํํ ์๋ ค์ค!โ
ํญ๋ชฉ | CPU๋ง ์ฒ๋ฆฌ | DMA๊ฐ ์ฒ๋ฆฌ |
---|---|---|
๋ฐ์ดํฐ ๋ณต์ฌ | CPU๊ฐ ๊ณ์ ๋ฐ์จ | CPU๋ ๊ณ์ฐ์ ์ง์ค ๊ฐ๋ฅ |
ํจ์จ์ฑ | ๋จ์ด์ง | ๋์์ง |
ํนํ ๋์คํฌ๋ ๋ธ๋ก ๋จ์(512B, 4KB)๋ก ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธฐ๊ธฐ ๋๋ฌธ์, ๋๋ ๋ณต์ฌ๊ฐ ์์ฃผ ๋ฐ์ํด์.
์ด๋ฐ ๊ฑธ CPU๊ฐ ์ง์ ์ฒ๋ฆฌํ๋ฉด ๋ญ๋น๋ผ์ DMA๊ฐ ๋์ ํด์ฃผ๋ ๊ฑฐ์์.
์ ์ก์ด ์๋ฃ๋๋ฉด DMA๋ชจ๋์ CPU์๊ฒ ์ธํฐ๋ฝํธ ์ ํธ๋ฅผ ๋ณด๋ด๊ณ CPU๋ ์ ์ก์ ์์๊ณผ ๋ ๋ถ๋ถ์๋ง ๊ด์ฌ
๊ตฌ๋ถ | ์ฝํ๋ก์ธ์ | DMA |
---|---|---|
ํ๋ ์ผ | ๊ณ์ฐ ๋ณด์กฐ (FPU, GPU, NPU ๋ฑ) | ๋ฐ์ดํฐ ๋ณต์ฌ ์ ๋ด |
๋ชฉ์ | CPU ์ฐ์ฐ ๋ถ์ฐ | CPU ๋ณต์ฌ ๋ถ๋ด ์ค์ด๊ธฐ |
์ฒ๋ฆฌ ๋์ | ํน์ ์ฐ์ฐ | ๋ฉ๋ชจ๋ฆฌ โ ๋์คํฌ ๋ฑ ๋ฐ์ดํฐ ์ ์ก |
CPU๊ฐ ํผ์ ๋ค ํ์ง ์๋๋ก, ๊ณ์ฐ์ ์ฝํ๋ก์ธ์์๊ฒ, ๋ฐ์ดํฐ ๋ณต์ฌ๋ DMA์๊ฒ ๋งก๊ธด๋ค.
๊ทธ๋ํฝ ์ฐ์ฐ์ GPU๊ฐ, ๋จ์ ๋ณต์ฌ๋ DMA๊ฐ ๋งก์์ผ๋ก์จ CPU๋ ๋ ์ค์ํ ์ผ์ ์ง์คํ ์ ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ๋ ๋จ์ํ ์คํํ ์ฝ๋(๋ช ๋ น์ด)๋ฟ๋ง ์๋๋ผ, ๋ค์ํ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ ํจ๊ป ์ ์ฅํฉ๋๋ค.
๊ตฌ๋ถ | ์ค๋ช |
---|---|
๋ช ๋ น์ด(Instruction) | CPU๊ฐ ์คํํ ๊ธฐ๊ณ์ด ์ฝ๋ |
์ ์ ๋ฐ์ดํฐ(Static Data) | ํ๋ก๊ทธ๋จ ์์ ์ ํฌ๊ธฐ์ ์์น๊ฐ ์ ํด์ง ๋ฐ์ดํฐ (์: ์ ์ญ ๋ณ์, ์์) |
์คํ(Stack) | ํจ์ ํธ์ถ/๋ณต๊ท ์ ์ฌ์ฉํ๋ ์์ ์ ์ฅ ๊ณต๊ฐ |
ํ(Heap) | ์คํ ์ค ํ์ํ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๊ณต๊ฐ (์: ์ฌ์ฉ์ ์ ๋ ฅ, ๊ฐ๋ณ ๊ธธ์ด ๋ฆฌ์คํธ ๋ฑ) |
๊ตฌ์กฐ | ๊ตฌ์ฑ ์ค๋ช |
---|---|
ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ | ๋ช ๋ น์ด์ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋จ |
ํ๋ฒ๋ ๊ตฌ์กฐ | ๋ช ๋ น์ด์ ๋ฐ์ดํฐ๊ฐ ์์ ํ ๋ถ๋ฆฌ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋จ (์๋โ) |
๋ ๋ค ๊ตฌ์กฐ์ ์ผ๋ก๋ ๋น์ทํ์ง๋ง, ํ๋ฒ๋๋ ๋ช ๋ น์ด ์บ์์ ๋ฐ์ดํฐ ์บ์๋ฅผ ๋ณ๋๋ก ์ด์ฉํ ์ ์์ด ์ฑ๋ฅ ๋ฉด์์ ์ ๋ฆฌํด์.
์ ์ ๋ฐ์ดํฐ๋ ๋ฏธ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์์ง๋ง, ํ์ค ์ธ๊ณ์ ํ๋ก๊ทธ๋จ์ ๋์ ์ผ๋ก ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ง์ด ๋ค๋ฃน๋๋ค.
์ด๋ด ๋๋ ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ผ ํ๋ฏ๋ก, ๋ค์๊ณผ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋๋ค:
[ ๋ฉ๋ชจ๋ฆฌ ์ต์๋จ ]
โโโโโโโโโโโโโโ
โ ์คํ (์๋๋ก ์๋) โ โ ํจ์ ํธ์ถ ์๋ง๋ค ์ฆ๊ฐ
โโโโโโโโโโโโโโค
โ ํ (์๋ก ์๋) โ โ malloc, new ๋ฑ์ผ๋ก ์ฆ๊ฐ
โโโโโโโโโโโโโโค
โ ์ ์ ๋ฐ์ดํฐ โ โ ์ ์ญ ๋ณ์, static ๋ฑ
โโโโโโโโโโโโโโค
โ ๋ช
๋ น์ด โ โ ํ๋ก๊ทธ๋จ ์ฝ๋
โโโโโโโโโโโโโโ
[ ๋ฉ๋ชจ๋ฆฌ ํ๋จ ]
ํ๊ณผ ์คํ์ด ์๋ก ์ถฉ๋ํ์ง ์๊ฒ ๊ด๋ฆฌํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ถฉ๋ํ๋ฉด ํ๋ก๊ทธ๋จ์ด ๋ป๊ฑฐ๋, ๋ณด์ ์ทจ์ฝ์ ์ด ์๊ธธ ์ ์์ด์.
MMU๊ฐ ์์ผ๋ฉด ์ด๋ฐ ๋ฐฐ์น๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ๋ฆฌ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ์์ ๋กญ๊ฒ ๊ตฌ์ฑํ ์ ์์ด์.
ํญ๋ชฉ | MMU ์์ | MMU ์์ |
---|---|---|
๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น | ํ๋ก๊ทธ๋จ์ด ์ง์ ์ค๊ณ | OS/์ปค๋์ด ํ์ด์ง ๋จ์๋ก ๋งคํ |
๊ณต๊ฐ ์ ์ฝ | ํ/์คํ ์ถฉ๋ ์ํ | ํ์ด์ง ๋จ์ ๋ถ๋ฆฌ๋ก ์ ์ฐ |
๋ณด์์ฑ | ๋ฎ์ | ์ ๊ทผ ์ ์ด ๊ฐ๋ฅ (์: read-only) |
MMU๋ฅผ ํ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ, ๋์ ํ์ฅ, ์ ๊ทผ ์ ์ด ๋ฑ ๋ ์์ ์ ์ด๊ณ ์ ์ฐํ ์ด์์ด ๊ฐ๋ฅํด์.
ํ๋ก๊ทธ๋จ์ ๋ช ๋ น์ด๋ฟ ์๋๋ผ ์ ์ /๋์ ๋ฐ์ดํฐ, ์คํ ๋ฑ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐฐ์นํ๋ฉฐ, MMU๊ฐ ์์ผ๋ฉด ์ด ๋ฐฐ์น๋ฅผ ๊ฐ์ ์ฃผ์๋ก ๋ ์ ์ฐํ๊ฒ ๊ตฌ์ฑํ ์ ์๋ค.
์ฉ์ด | ์ค๋ช |
---|---|
์ ์ ๋ฐ์ดํฐ | ํ๋ก๊ทธ๋จ ์์ ์ ํฌ๊ธฐ ๊ณ ์ , ์ ์ญ ๋ณ์ ๋ฑ |
๋์ ๋ฐ์ดํฐ (ํ) | ์คํ ์ค ํฌ๊ธฐ ๋ณ๋ ๊ฐ๋ฅ, malloc/new |
์คํ | ํจ์ ํธ์ถ/๋ณต๊ท, ์ง์ญ ๋ณ์ |
ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ | ๋ช ๋ น์ด/๋ฐ์ดํฐ ๋ฉ๋ชจ๋ฆฌ ํตํฉ |
ํ๋ฒ๋ ๊ตฌ์กฐ | ๋ช ๋ น์ด/๋ฐ์ดํฐ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ฆฌ |
MMU | ๊ฐ์ ์ฃผ์ โ ๋ฌผ๋ฆฌ ์ฃผ์ ๋งคํ, ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ/๊ฒฉ๋ฆฌ |
ELF(Executable and Linkable Format)๋ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ์น์ ์ผ๋ก ๋๋ ์คํ ํ์ผ ํ์์ ๋๋ค.
cube()
๊ฐ์ ๊ฒ)printf
, date
๋ฑ)๋ง์ปค๋ ์ด๋ค์ ์๋ก ์ฐ๊ฒฐ(resolve)ํด์ ์คํ ๊ฐ๋ฅํ ํํ๋ก ๋ง๋๋ ์ญํ ์ ํฉ๋๋ค.
๊ตฌ๋ถ | ์ค๋ช | ์ฅ์ | ๋จ์ |
---|---|---|---|
์ ์ ๋งํฌ | ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์คํ ํ์ผ์ ํฌํจ์ํด | ๋น ๋ฆ, ๋ ๋ฆฝ ์คํ ๊ฐ๋ฅ | ์คํ ํ์ผ์ด ์ปค์ง๊ณ ์ค๋ณต๋จ |
๋์ ๋งํฌ | ํ๋ก๊ทธ๋จ ์คํ ์ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐ๋ก ์ฐธ์กฐ | ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ, ์ ๋ฐ์ดํธ ์ฉ์ด | ์คํ ์์ ์ ์ธ๋ถ ํ์ผ ํ์ |
์ ์ ๋งํฌ๋ ๋ณต๋ถ,
๋์ ๋งํฌ๋ โ๊ณต์ ํ์ผ ์ฐธ์กฐโ๋ผ๊ณ ์๊ฐํ๋ฉด ์ฌ์์.
๐ ์์ ๊ทธ๋ฆผ (๊ทธ๋ฆผ 5-17)
[ ํ๋ก๊ทธ๋จ 1 ] [ ํ๋ก๊ทธ๋จ 2 ]
โ โ
โโโโโโโ โโโโโโโโ
โ โ
[ ๊ณตํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ ] โ MMU๊ฐ ๊ณต์ ๊ด๋ฆฌ
๋จ, ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ก๊ทธ๋จ๋ง๋ค ๋ ๋ฆฝ์ ์ธ ์คํ๊ณผ ํ์ ์ฌ์ฉํ๋๋ก ์ค๊ณํด์ผ ํฉ๋๋ค!
main()
ํจ์)main()
๋ณด๋ค ๋จผ์ ์คํ๋๋ ์ฝ๋๊ฐ ์์ต๋๋ค.ํ๋ก๊ทธ๋จ ์คํ ์ง์ ์ ์ค๋น ์์ ์ ํด์ฃผ๋ "๋์ฐ๋ฏธ ์ฝ๋"์ ๋๋ค.
์ญํ | ์ค๋ช |
---|---|
๐ ์คํ/ํ ์ค์ | ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์ ๊ตฌ์ฑ |
๐ ์ ์ ๋ฐ์ดํฐ ์ด๊ธฐํ | ์ ์ญ ๋ณ์ ๋ฑ ์ด๊ธฐ๊ฐ ๋ณต์ฌ |
๐ main() ํธ์ถ | ์ง์ง ์คํ ์์์ ์ผ๋ก ๋๊น |
๊ณ ๊ธ ์ธ์ด์ผ์๋ก ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ญํ ๋ ๋ง์์ ธ์ (์: ์์ธ ์ฒ๋ฆฌ, ๊ฐ์ฒด ์์ฑ ๋ฑ)
ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ์ฝ๋ ์กฐ๊ฐ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง์ปค๊ฐ ์ฎ๊ณ , ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์คํ ํ๊ฒฝ์ ๋ง๋ จํ ํ์์ผ ์ง์ง ์คํ์ด ์์๋๋ค.
์ฉ์ด | ์๋ฏธ |
---|---|
๋ผ์ด๋ธ๋ฌ๋ฆฌ | ์์ฃผ ์ฐ๋ ํจ์๋ฅผ ๋ชจ์๋ ํ์ผ |
๋ง์ปค(Linker) | ์ฌ๋ฌ ๊ฐ์ ์ค๋ธ์ ํธ ํ์ผ์ ํ๋์ ์คํ ํ์ผ๋ก ๋ฌถ๋ ๋๊ตฌ |
ELF | ์คํ ๊ฐ๋ฅํ ํ์ผ ํฌ๋งท (Executable and Linkable Format) |
์ ์ ๋งํฌ | ์คํ ํ์ผ์ ์ง์ ํจ์ ์ฝ๋ ์ฝ์ |
๋์ ๋งํฌ | ์คํ ์ค ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํธ์ถ |
๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ด ๋์์ ์ฌ์ฉํ๋ ๊ณตํต ํจ์ ๋ชจ์ |
๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ํ๋ก๊ทธ๋จ ์คํ ์ ์ด๊ธฐํ ์์ ์ ํด์ฃผ๋ ์ฝ๋ ๋ฌถ์ |
์ง์ ์ (Entry Point) | ํ๋ก๊ทธ๋จ์์ main() ์ด์ ์ ์คํ๋๋ ์์ ์ฃผ์ |
์ธ๊ทธ๋ฉํ ์ด์ ์ MMU๊ฐ ์ํํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ์ ์ค ํ๋์ ๋๋ค.
์ฆ, MMU๋ "์ธ๊ทธ๋ฉํ ์ด์ "์ด๋ผ๋ ๋ฐฉ์์ ๊ตฌํํ๊ธฐ ์ํ ํ๋์จ์ด์์!
์ฃผ์ ๋ณํ ๋ฐฉ์ | ์ค๋ช | ์์ |
---|---|---|
โ ๋จ์ผ ๋ฒ ์ด์ค/๋ฐ์ด๋ | ๋ชจ๋ ์ฃผ์์ ๊ฐ์ ๋ณํ ์ ์ฉ | ๊ฐ์ฅ ๋จ์ํ ๋ฐฉ์ |
โ ์ธ๊ทธ๋ฉํ ์ด์ | ์์ญ๋ณ(Base/Bound)๋ก ์ฃผ์ ๋ณํ | ํ, ์คํ, ์ฝ๋ ๋ฑ ๊ตฌ๋ถ |
โ ํ์ด์ง(Paging) | ๊ณ ์ ํฌ๊ธฐ ๋ธ๋ก(ํ์ด์ง) ๋จ์๋ก ๋ณํ | ํ๋ ์์คํ ๋๋ถ๋ถ |
โ ์ธ๊ทธ๋จผํธ+ํ์ด์ง | ์ธ๊ทธ๋จผํธ๋ฅผ ํ์ด์ง๋ก ๋๋ ๊ด๋ฆฌ | Intel x86 ๊ตฌ์กฐ ๋ฑ |
์ฆ, MMU๋ "์ฃผ์ ๋ณํ ์ ๋ต"์ ์คํํ๋ ํ๋์จ์ด๊ณ ,
๊ทธ ์ ๋ต์ด "์ธ๊ทธ๋ฉํ ์ด์ "์ผ ์๋ ์๊ณ , "ํ์ด์ง"์ผ ์๋ ์๊ณ , ์ฌ์ง์ด ๋ ๋ค ์ธ ์๋ ์์ด์.
MMU๋ง ์๋ค๊ณ ๋์ด ์๋๋๋ค.
MMU๊ฐ โ์ด๋ป๊ฒ ๋ณํํ ๊ฒ์ธ๊ฐโ๋ฅผ ์ด์์ฒด์ ๊ฐ ์ ํ๊ณ , ๊ทธ ๋ฐฉ์ ์ค ํ๋๊ฐ ์ธ๊ทธ๋ฉํ ์ด์ ์ด์์.
๋ฌธ์ ์ํฉ | ์ธ๊ทธ๋ฉํ ์ด์ ์ผ๋ก ํด๊ฒฐ ๊ฐ๋ฅ? | ์ค๋ช |
---|---|---|
ํ/์คํ์ด ์๋ผ๋ฉด์ ์ถฉ๋ | โ ํด๊ฒฐ | ์๋ก ๋ค๋ฅธ ์ธ๊ทธ๋จผํธ๋ก ๋๋ |
ํ๋ก๊ทธ๋จ๋ง๋ค ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ | โ ํด๊ฒฐ | ์ฝ๋/๋ฐ์ดํฐ/์คํ ๋ถ๋ฆฌ ๊ฐ๋ฅ |
์ฝ๋ ๊ณต์ (๋ฉ๋ชจ๋ฆฌ ์ ์ฝ) | โ ํด๊ฒฐ | ์ฝ๋ ์ธ๊ทธ๋จผํธ๋ฅผ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๊ณต์ |
์ ์ฐํ ์ฃผ์ ๊ณต๊ฐ | โ ํด๊ฒฐ | ๊ฐ ์ธ๊ทธ๋จผํธ๋ง๋ค ๋ ๋ฆฝ๋ ๋ฌผ๋ฆฌ ์์น ํ์ฉ |
์ ๊ทผ ๊ถํ ์ ์ด | โ ํด๊ฒฐ | ์ฝ๊ธฐ/์ฐ๊ธฐ/์คํ ๊ถํ ๋นํธ ์ค์ ๊ฐ๋ฅ |
โ ๊ฒฝ์์ด๋ผ๊ธฐ๋ณด๋จ, ๊ฐ์ ์ฅ๋จ์ ์ด ๋ค๋ฅด๊ณ , ๋๋ก๋ ํจ๊ป ์ฐ์ด๊ธฐ๋ ํฉ๋๋ค!
๋ฐฉ์ | ์ฅ์ | ๋จ์ |
---|---|---|
์ธ๊ทธ๋ฉํ ์ด์ | ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ ๊ตฌ๋ถ ์ฌ์, ์ ์ฐํ ํฌ๊ธฐ | ์ธ๋ถ ๋จํธํ ๋ฐ์ ๊ฐ๋ฅ |
ํ์ด์ง | ๋ด๋ถ ๋จํธํ ์ค์ด๊ณ , ๋ฉ๋ชจ๋ฆฌ ํ์ฉ ํจ์จ์ | ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ ํ์ ์ด๋ ค์ |
ํผํฉ ๋ฐฉ์ | ์ธ๊ทธ๋จผํธ๋ฅผ ํ์ด์ง๋ก ๋๋ | x86์์ ์ฌ์ฉ |
์์คํ | ๋ฐฉ์ |
---|---|
์ด์ฐฝ๊ธฐ ์์คํ | ๋จ์ MMU + ๋จ์ผ Base/Bound |
์ค๊ฐ ๋จ๊ณ ์์คํ | MMU + ์ธ๊ทธ๋ฉํ ์ด์ (x86 ์ด๊ธฐ) |
ํ๋ OS (Linux, Windows) | MMU + ํ์ด์ง ๋ฐฉ์ |
๊ณ ๊ธ ์์คํ | MMU + ์ธ๊ทธ๋ฉํ ์ด์ + ํ์ด์ง (x86 ํธํ ์ํคํ ์ฒ ๋ฑ) |
๐ ์ด์์ฒด์ ๊ฐ "์ด๋ ๊ฒ ์ฃผ์ ๊ด๋ฆฌํ์"๋ผ๊ณ ์ง์ํ๋ฉด,
MMU๋ ๊ทธ ๋ฐฉ์์ ๋ง๊ฒ ๋น ๋ฅด๊ฒ ๋ณํ์ ์ํํฉ๋๋ค.
๊ฐ์ ์ฃผ์ = 1234
๋ฌผ๋ฆฌ ์ฃผ์ = Base + 1234 (๋จ ํ๋์ Base๋ง ์กด์ฌ)
๊ฐ์ ์ฃผ์ = [์ธ๊ทธ๋จผํธ ๋ฒํธ: 01][์คํ์
: 0345]
โ ์ธ๊ทธ๋จผํธ 1์ Base + ์คํ์
= ๋ฌผ๋ฆฌ ์ฃผ์
ํญ๋ชฉ | ์ญํ |
---|---|
MMU | ์ฃผ์ ๋ณํ์ ์ํํ๋ ํ๋์จ์ด |
์ธ๊ทธ๋ฉํ ์ด์ | MMU๊ฐ ์ฌ์ฉํ ์ ์๋ ์ฃผ์ ๋ณํ ๋ฐฉ์ ์ค ํ๋ |
์ด์์ฒด์ | ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฃผ์๋ฅผ ๋ณํํ ์ง ๊ฒฐ์ ํ๊ณ MMU๋ฅผ ์ค์ |
MMU๋ ์ฃผ์๋ฅผ ๋ฐ๊ฟ์ฃผ๋ ๊ธฐ๊ณ์ด๊ณ , ์ธ๊ทธ๋ฉํ ์ด์ ์ ๊ทธ ๊ธฐ๊ณ๊ฐ ๋ฐ๋ฅด๋ ๊ท์น์ด๋ค.
ํค์๋ | ๊ฐ๋ ์์ฝ |
---|---|
์ปดํจํฐ ๊ตฌ์กฐ | ํฐ ๋ ธ์ด๋ง vs ํ๋ฒ๋ (๋ช ๋ น์ด/๋ฐ์ดํฐ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ฆฌ ์ฌ๋ถ) |
๋ฉํฐ์ฝ์ด | ์ ๋ ฅ ๋ฌธ์ ํด๊ฒฐ์ฑ ์ผ๋ก ๋ฑ์ฅํ ๋ค์ค ์ฝ์ด ์์คํ |
MMU | ๊ฐ์ ์ฃผ์ โ ๋ฌผ๋ฆฌ ์ฃผ์ ๋งคํ ์ฅ์น, ํ๋ก๊ทธ๋จ ๊ฒฉ๋ฆฌ ๊ฐ๋ฅ |
์คํ | ํจ์ ํธ์ถ/๋ณต๊ท๋ฅผ ์ํ LIFO ์ ์ฅ์ |
์ธํฐ๋ฝํธ | ์ธ๋ถ ์ด๋ฒคํธ ์ฒ๋ฆฌ (์: ์ด์ธ์ข ) ์์คํ |
๊ฐ์ ๋ฉ๋ชจ๋ฆฌ | ์ค์ ๋ณด๋ค ๋ ํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ํ์ ์์คํ |
์ค์ํ | ํ์ ์๋ ํ์ด์ง๋ฅผ ๋์คํฌ๋ก ์ด๋์ํค๋ ์ ๋ต |
์์คํ ๊ณต๊ฐ | ์ด์์ฒด์ ์ ์ฉ, ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ๊ณผ ๋ถ๋ฆฌ |
์บ์ | L1~L3 ๊ณ์ธต ๊ตฌ์กฐ, ์๋์ ์ฉ๋์ ๊ท ํ |
๋ง์ปค | ์ฌ๋ฌ ์ฝ๋ ์กฐ๊ฐ์ ํ๋๋ก ๋ฌถ์ด ์คํ ํ์ผ ์์ฑ |
๋จ์ ๊ฒ์ I/O๋ฟ์ธ๋ฐ, ์ด ์ฃผ์ ๋ฅผ 6์ฅ์์ ๋ค
๋ฃฌ๋ค.
์ฉ์ด ์์ฝํ ์ด๋ฏธ์ง๊ฐ ์กฐ๊ธ ์ด์ํด์!