์ ์ ๊ฐ๋ฐ์ ๊ธฐ์ ๋ฉด์ : ์ด์์ฒด์
๐ฎ ์ด์์ฒด์ ๋ ๋ฌด์์ธ๊ฐ์?
์ด์์ฒด์ ๋ ํ๋์จ์ด ์์ ์ค์น๋์ด ํ๋์จ์ด ๊ณ์ธต๊ณผ ๋ค๋ฅธ ์ํํธ์จ์ด ๊ณ์ธต์ ์ฐ๊ฒฐํ๋ ์ํํธ์จ์ด์ ๋๋ค. ์ปดํจํฐ ์์คํ ์ ์์ (์๋ฅผ ๋ค์ด CPU ์๊ฐ, ์ด์๋๊ธฐ ์ํด ํ์ํ ์ฃผ์ ๊ณต๊ฐ, ์ฝ๋ ๋ฐ์ดํฐ ์คํ ํ์ ๊ตฌ์กฐ๋ก ๋์ด ์๋ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ ๋ฑ) ์ ๊ด๋ฆฌํ๊ณ , ์ฌ์ฉ์๊ฐ ์ปดํจํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
๐ฎ ์์คํ ์ฝ์ด๋ ๋ฌด์์ธ๊ฐ์?
์์คํ ์ฝ์ด๋ ์ปค๋ ๋ชจ๋์ ์ฌ์ฉ์ ๋ชจ๋ ๊ฐ์ ํ์ํ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ํธ์ถํ๋ ํจ์์ ๋๋ค. OS๋ ์ฌ์ฉ์๊ฐ ํ๋์จ์ด์ ์ฃผ์ ์์์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๊ฒ ์ปค๋ ๋ชจ๋์ ์ฌ์ฉ์ ๋ชจ๋๋ก ๊ตฌ๋ถํฉ๋๋ค. ๊ทธ๋์ ํ๋ก์ธ์ค์์ ์์์ ์ ๊ทผํด ์์ ์ ์ฒ๋ฆฌํด์ผ ํ ๋๋ ์์คํ ์ฝ๋ก ํ์ํ ์์ฒญ์ ํ๊ณ ๊ทธ์ ๋ํ ๊ฒฐ๊ณผ ๊ฐ์ ๋๋ ค๋ฐ๊ฒ ๋ฉ๋๋ค.
๋ํ์ ์ธ ์๋ก๋ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ `fork()`, ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค์ ์ํ์ ๊ธฐ๋ค๋ฆฌ๋ `wait()`๋ฑ์ด ์์ต๋๋ค.
๐ฎ CPU์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํด ์ฃผ์ธ์.
CPU๋ "์ปดํจํฐ์ ๋" ์ญํ ์ ํ๋ฉฐ, ์ปดํจํฐ์์ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๋ฐ ํ์ํ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๊ณ ์ํํฉ๋๋ค. ๋ค๋ฅธ ๋ง๋ก ํ๋ก์ธ์๋ผ๊ณ ๋ ํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ธฐ์ต์ฅ์น๋ก, ํ๋ฐ์ฑ ๋ฉ๋ชจ๋ฆฌ์ธ ์ฃผ ๊ธฐ์ต์ฅ์น (RAM), ๋นํ๋ฐ์ฑ ๋ฉ๋ชจ๋ฆฌ์ธ ๋ณด์กฐ ๊ธฐ์ต์ฅ์น(SSD, HDD) ๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์ ํ๋ฐ์ฑ์ด๋ ์ ์ ๊ณต๊ธ์ด ์ค๋จ๋๋ฉด ์ ์ฅ๋ ์ ๋ณด๊ฐ ์์ด์ง๋ ์ฑ์ง์ ๋ปํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ๋ CPU์์ ๋นจ๋ฆฌ ์ ๊ทผํ ์ ์๋๋ก, ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋๋๋ฐ์.CPU์์ ๊ฐ๊น๊ณ ์๋๊ฐ ๋น ๋ฅธ ์์๋๋ก ๋ ์ง์คํฐ, ์บ์, RAM, ํ๋ ๋์คํฌ ์ ๊ตฌ์กฐ๋ก ๋๋ฉ๋๋ค.
๋ ์ง์คํฐ๋ CPU ๋ด๋ถ์,
์บ์๋ CPU ์ RAM ์ฌ์ด์ ์๋ ์ฐจ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ธฐ์ต์ฅ์น๋ก CPU ๋ด๋ถ์ ์์ต๋๋ค.
๐ฎ ์ปค๋์ด๋ ๋ฌด์์ธ๊ฐ์?
์ปค๋์ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ๋ ์ด์์ฒด์ ์ ํต์ฌ ๋ถ๋ถ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ธฐ ์ํด์๋ ์ฃผ๊ธฐ์ต์ฅ์น์ ์ ์ฌ๋ ์ํ์ฌ์ผ ํฉ๋๋ค. ์ด์์ฒด์ ์ญ์ ํ๋ก๊ทธ๋จ์ด๊ธฐ ๋๋ฌธ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๊ฐ ๋์ด์ผ ํ์ง๋ง, OS์ ํฌ๊ธฐ๊ฐ ๋๋ฌด ์ปค์ ์ ์ฒด๋ฅผ ๋ค ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๊ฒ ๋๋ค๋ฉด ๋นํจ์จ์ ์ ๋๋ค. (๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ญ๋น)
๋ฐ๋ผ์ ์ปค๋ (kernel) ์ด๋ผ๊ณ ํ๋, ํญ์ ํ์ํ ์ด์์ฒด์ ์ ํต์ฌ ๋ถ๋ถ๋ง์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ์ฌ OS๋ฅผ ์ฌ์ฉํ๊ฒ๋ ํฉ๋๋ค.
๐ฎ ์คํํ์ผ์ ์์ฑ ๊ณผ์ ์ ๋ง์ํด์ฃผ์ธ์.
์คํ ํ์ผ ์์ฑ ๊ณผ์ ์ ์์ค ์ฝ๋๊ฐ ์คํ ๊ฐ๋ฅํ ๋ฐ์ด๋๋ฆฌ ํ์ผ๋ก ๋ณํ๋๋ ๋จ๊ณ๋ฅผ ํฌํจํฉ๋๋ค.
- ์์ค ์ฝ๋ ์์ฑ: ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐ์์ ์ํด ์์ค ์ฝ๋๋ก ์์ฑ๋ฉ๋๋ค. ์ด ์ฝ๋๋ C, C++, Java ๋ฑ์ ๊ณ ์์ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ ์ ์์ต๋๋ค.
- ์ ์ฒ๋ฆฌ (Preprocessing): ์ ์ฒ๋ฆฌ๊ธฐ๋ ์์ค ์ฝ๋์์ ์ง์์(#include, #define ๋ฑ)๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์๋ฅผ ๋ค์ด, C/C++์์ #include ์ง์์๋ ํด๋น ํค๋ ํ์ผ์ ๋ด์ฉ์ ์์ค ํ์ผ์ ํฌํจ์ํค๋ ์ญํ ์ ํฉ๋๋ค.
- ์ปดํ์ผ (Compilation): ์ปดํ์ผ๋ฌ๋ ์ ์ฒ๋ฆฌ๋ ์์ค ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํฉ๋๋ค. ์ด ๋จ๊ณ์ ๊ฒฐ๊ณผ๋ฌผ์ ์ค๋ธ์ ํธ ํ์ผ์ ๋๋ค. ์ค๋ธ์ ํธ ํ์ผ์ ํ๋ซํผ์ ํนํ๋ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ๋ด๊ณ ์์ผ๋ฉฐ, .obj, .o ๋ฑ์ ํ์ฅ์๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
- ๋งํน (Linking): ๋ง์ปค๋ ์ฌ๋ฌ ์ค๋ธ์ ํธ ํ์ผ๊ณผ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ํ๋์ ์คํ ํ์ผ๋ก ๊ฒฐํฉํฉ๋๋ค. ์ด ๊ณผ์ ์์ ๊ฐ ํ์ผ ๋ด์ ์ฌ๋ณผ(ํจ์, ๋ณ์ ๋ฑ) ์ฐธ์กฐ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค. ์ต์ข ์ ์ผ๋ก ์คํ ๊ฐ๋ฅํ ํ์ผ(์: .exe ๋๋ .out)์ด ์์ฑ๋ฉ๋๋ค.
- ์คํ ํ์ผ ์์ฑ: ๋งํน ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ์ต์ข ์ ์ผ๋ก ์คํ ๊ฐ๋ฅํ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด ์์ฑ๋ฉ๋๋ค. ์ด ํ์ผ์ ์ด์์ฒด์ ์์ ์ง์ ์คํ๋ ์ ์์ผ๋ฉฐ, ๋ชจ๋ ํ์ํ ์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํฉ๋๋ค.
๐ฎ ํ๋ก๊ทธ๋จ ์คํ ๊ณผ์ ์ ๋ง์ํด์ฃผ์ธ์.
๋กํจ๋์ค
ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด, OS๊ฐ ๋์คํฌ์ ์๋ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ๋ก LOAD ํฉ๋๋ค.
(1) ๋ก๋ฉ : ์คํ ํ์ผ์ด ํ๋ ๋๋ผ์ด๋ธ์์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋๋ฉ๋๋ค.
(2) ํจ์น : ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ๋ ๋ช ๋ น์ด๋ค์ด CPU ๋ ์ง์คํฐ๋ก ์ฎ๊ฒจ์ง๋๋ค.
(3) ๋์ฝ๋ฉ : CPU ์ ์ด์ฅ์น์์ ๋ช ๋ น์ด๋ค์ ํด์ํด์ฃผ๋ ๋จ๊ณ์ ๋๋ค.
(4) ์คํ : CPU ALU (์ฐ์ ๋ ผ๋ฆฌ ์ฅ์น) ์์ ๋์ฝ๋ฉ๋ ์ฐ์ฐ์๋ค์ ์คํํด์ฃผ๋ ๋จ๊ณ ์ ๋๋ค.
์ด ์ค์์ CPU ๋ช ๋ น์ด ์ฌ์ดํด์ ํจ์น, ๋์ฝ๋ฉ, ์คํ ์ธ ๋จ๊ณ์ ๋๋ค.
๐ฎ CPU ์บ์๋ ๋ฌด์์ธ๊ฐ์?
CPU ๋ ๋ฉ๋ชจ๋ฆฌ์ ํต์ ํ๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ ํ๋ ๋๋ผ์ด๋ธ์ ํต์ ํฉ๋๋ค. ์บ์๋ CPU์์ ๋ฉ๋ชจ๋ฆฌ๊น์ง์ ์ ๊ทผ์ ์ค์ด๊ธฐ ์ํด, ์ฆ CPU์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ ์๋ ์ฐจ์ด๋ฅผ ์ขํ๋ ค๊ณ ์ฌ์ฉํ๋ CPU ๋ด๋ถ์ ์์ ๋ฉ๋ชจ๋ฆฌ์ธ๋ฐ์. ์บ์์ ํฌ๊ธฐ๋ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ์๊ธฐ ๋๋ฌธ์ ์์ผ๋ก ์ฌ์ฉ๋ ๊ฒ์ผ๋ก ์์๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅํ๋ ๊ฒ์ด ์ค์ํ ํฌ์ธํธ์ ๋๋ค. ์บ์ ์ ์ค๋ฅ (์บ์ ํํธ์จ) ์ ๋์ด๊ธฐ ์ํด ์๊ฐ์ง์ญ์ฑ์ด๋ ๊ณต๊ฐ์ง์ญ์ฑ ๊ฐ์ ์ง์ญ์ฑ์ ์๋ฆฌ๋ฅผ ์ด์ฉํ๊ฒ ๋ฉ๋๋ค. ์ง์ญ์ฑ์ ์๋ฆฌ๋ ํ ๋ฒ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ ๋ค์ ํน์ ์ฃผ๋ณ์ ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
๐ฎ ์ง์ญ์ฑ์ ์๋ฆฌ๊ฐ ๋ฌด์์ธ๊ฐ์?
ํ ๋ฒ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ ๋ค์ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ์๋ฆฌ์ ๋๋ค.
- ์๊ฐ ์ง์ญ์ฑ : ์ต๊ทผ ์ฐธ์กฐ๋ ๊ฑด ๋ค์ ์ฐธ์กฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ๊ฒ์ด๋ฉฐ (์: ๋ฐ๋ณต๋ฌธ)
- ๊ณต๊ฐ ์ง์ญ์ฑ : ํ ๋ฒ ์ฐธ์กฐ๋ ๊ฑด ์ฃผ๋ณ ๋ฐ์ดํฐ๋ ์ฐธ์กฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ์๋ฏธ์ ๋๋ค. (์: ๋ฐฐ์ด)
๐ฎ ์บ์๋ผ์ธ์ด ๋ฌด์์ธ๊ฐ์?
CPU๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ํ๋์ ๋ฐ์ดํธ ๋จ์๋ก ๊ฐ์ ธ์ค๋ ๊ฒ ์๋, ์บ์๋ผ์ธ์ ํฌ๊ธฐ๋ก ๊ฐ์ ธ์ค๋ ํฌ๊ธฐ๋ฅผ ๋งํฉ๋๋ค. ๊ณต๊ฐ์ง์ญ์ฑ์ ํ์ฉํด์ CPU์์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ํ์๋ฅผ ์ค์ฌ์ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
๐ฎ ๋ฉ๋ชจ๋ฆฌ (RAM) ๊ตฌ์กฐ (๋๋ ํ๋ก์ธ์ค์ ๊ตฌ์กฐ) ๋ฅผ ์ค๋ช ํด์ฃผ์ธ์.
ํฌ๊ฒ 4๊ฐ์ง๋ก ๋๋ ์ ์๋๋ฐ์. Code, Data, Stack, Heap ์์ญ์ด ์์ต๋๋ค.
Code ์์ญ์๋ ์คํํ ์ฝ๋๊ฐ ๊ธฐ๊ณ์ด๋ก ์ปดํ์ผ๋์ด ์ ์ฅ๋ฉ๋๋ค. Text ์์ญ์ด๋ผ๊ณ ๋ ๋ถ๋ฅด๋ฉฐ, CPU๋ ํด๋น ์ฝ๋ ์์ญ์ ์ ์ฅ๋ ๋ช ๋ น์ด๋ฅผ ํ๋์ฉ ๊ฐ์ ธ๊ฐ์ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
Data ์์ญ์๋ ์ ์ญ๋ณ์์ ์ ์ ๋ณ์, ๋ฐฐ์ด, ๊ตฌ์กฐ์ฒด ๋ฑ์ด ์ ์ฅ๋ฉ๋๋ค. ๋ฐ์ดํฐ ์์ญ์ ์ธ๋ถ์ ์ผ๋ก BSS(Block Stated Symbol) ์์ญ๊ณผ ๋ฐ์ดํฐ ์์ญ์ผ๋ก ๋ค์ ๋๋ ์ ์์ต๋๋ค. BSS ์์ญ์ ์ด๊ธฐํํ์ง ์์ ๋ณ์๋ฅผ, ๋ฐ์ดํฐ ์์ญ์ ์ด๊ธฐํํ ๋ณ์๋ฅผ ์ ์ฅํฉ๋๋ค. (์ด๋ ๊ฒ BSS ์์ญ์ ์ฌ์ฉํจ์ผ๋ก์จ, ์ด๊ธฐํ๋์ง ์์ ๋ณ์๋ค์ด ์คํ ํ์ผ์ ๋ณ๋์ ๊ณต๊ฐ์ ์ฐจ์งํ์ง ์๊ฒ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํํฉ๋๋ค.) Static ์์ญ์ด๋ผ๊ณ ๋ ๋ถ๋ฅด๋ฉฐ, ํ๋ก๊ทธ๋จ์ด ์์ํ๋ ๋์์ ์คํ๋๊ณ ์ข ๋ฃ ์ ์๋ฉธ๋ฉ๋๋ค.
Heap ์์ญ์ ์ฌ์ฉ์๊ฐ ์ง์ ๊ด๋ฆฌํ๋ ์์ญ์ผ๋ก ๋ฐํ์์ ๋ฐ์ดํฐ๊ฐ ๋์ ํ ๋น๋๋ ์์ญ์ ๋๋ค. ๋ฎ์ ์ฃผ์ ๊ฐ์์ ๋์ ์ฃผ์ ๊ฐ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๋ฉฐ, ์์ญ ํฌ๊ธฐ๋ ๋ฐํ์ ๋ ๊ฒฐ์ ๋ฉ๋๋ค. C ์ธ์ด์ malloc ํจ์, C++์ธ์ด์ new ํค์๋๊ฐ ๋์ ํ ๋น์ ํ๋ ์์์ ๋๋ค.
๋ง์ง๋ง์ผ๋ก Stack ์์ญ์๋ ํจ์์ ํธ์ถ์ ๋ฐ๋ฅธ ์ง์ญ ๋ณ์์ ๋งค๊ฐ ๋ณ์, ํจ์์ ํธ์ถ ์ ๋ณด, ๋ฐํ๋๋ ์ฃผ์ ๊ฐ ๋ฑ์ด ์ปดํ์ผ ํ์์ ๋์ ์ฃผ์ ๊ฐ์์ ๋ฎ์ ์ฃผ์ ๊ฐ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. ํจ์์ ํธ์ถ๊ณผ ํจ๊ป ํ ๋น๋๊ณ , ํจ์์ ํธ์ถ์ด ์ข ๋ฃ๋๋ฉด ์๋ฉธํฉ๋๋ค.
๐ฎ ๋ฉ๋ชจ๋ฆฌ์ ํ ์์ญ๊ณผ ์คํ ์์ญ์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
์คํ ์์ญ (Stack Area) | ํ ์์ญ (Heap Area) | |
์ ์ฅํ๋ ๋ฐ์ดํฐ | ์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์ | ๋์ ์ผ๋ก ์์ฑ๋ ๋ณ์ (new ์ฐ์ฐ์) |
ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ ํ์ด๋ฐ | ์ปดํ์ผ (Compile) | ๋ฐํ์ (Runtime) |
ํฌ๊ธฐ ์ ํ | ์คํ ํฌ๊ธฐ๊ฐ ์ ํ๋์ด ์๋ค. | ํฌ๊ธฐ๊ฐ ์ ํ๋์ด์์ง ์๋ค. (๋์ด๋จ) |
์ฃผ์ ํ ๋น ๋ฐฉํฅ | ๋์ ์ฃผ์ → ๋ฎ์ ์ฃผ์ | ๋ฎ์ ์ฃผ์ → ๋์ ์ฃผ์ |
๋น๊ต | ํ์ ๋นํด ๋น ๋ฅด๋ค, ํจ์์ ์ข ๋ฃ์ ๋ฐ๋ผ ์๋ฉธ๋๋ฏ๋ก ๋ณ๋ค๋ฅธ ๊ด๋ฆฌ๊ฐ ํ์ ์๋ค. | ์คํ์ ๋นํด ๋๋ฆฌ๋ค, ์ง์ ํ ์์ญ ๊ด๋ฆฌ ํ์ |
๋ ์์ญ์ ๊ฐ์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํ๋๋ฐ, ์คํ์ ๋์ ์ฃผ์์์ ๋ฎ์ ์ฃผ์๋ก, ํ์ ๋ฎ์ ์ฃผ์์์ ๋์ ์ฃผ์๋ก ์ฑ์์ง๊ธฐ ๋๋ฌธ์ ์๋ก์ ์์ญ์ ๋๊ฐ ์นจ๋ฒํ๋๋์ ๋ฐ๋ผ Heap Overflow, Stack Overflow๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ฐธ๊ณ ๋ก, ๋ฉ๋ชจ๋ฆฌ์ ์์ชฝ์ ์์นํ ์๋ก ๋ฎ์ ์ฃผ์์ด๋ฉฐ, ์๋์ชฝ์ ์์นํ ์๋ก ๋์ ์ฃผ์์ ๋๋ค.
๐ฎ Heap Overflow, Stack Overflow์ ๋ํด ์ค๋ช ํด์ฃผ์๊ฒ ์ด์?
ํ ์ค๋ฒํ๋ก๋ ํ ์์ญ์ด ์คํ ์์ญ์ ์นจ๋ฒํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ์๋ก๋ ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋์ ํ ๋น์ด ์์ต๋๋ค.
์คํ ์ค๋ฒํ๋ก๋ ๋ฉ๋ชจ๋ฆฌ์์ ์คํ ์์ญ์ด ํ ์์ญ์ ์นจ๋ฒํ ๋ ๋ฐ์ํฉ๋๋ค. ๊ทธ ์๋ก ๊ณผ๋ํ ์ฌ๊ท ํธ์ถ์ด ์์ต๋๋ค.
๐ฎ ๋ฉ๋ชจ๋ฆฌ์ ํ ์์ญ์ ๋๋ฌด ํฌ๊ฒ ์ก์ผ๋ฉด ์ด๋ค ์ผ์ด ์๊ธธ๊น์? (C++, Java)
`C++`
C++์์ ๊ฐ๋ฐ์๋ ์ง์ `new`, `delete`๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ํด์ ํด์ผ ํฉ๋๋ค. ํ ์์ญ์ด ๋๋ฌด ํฌ๋ฉด, ์ด๋ฌํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ๊ณผ ๋ถ๋ด์ด ์ฆ๊ฐํ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ๋์๋ double free ๊ฐ์ ์ค๋ฅ์ ์ํ์ด ์ปค์ง๋๋ค. ๋ํ ๋ฉ๋ชจ๋ฆฌ ํ๋๊ทธ๋จผํ ์ด์ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ ์ ์์ต๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋นํจ์จ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, ์์คํ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจ์จ์ฑ์ ๋จ์ด๋จ๋ฆฝ๋๋ค. ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ ์๊ฐ์ด ์์๋๋ ์์ ์ ๋๋ค. ํ ์์ญ์ด ๊ณผ๋ํ๊ฒ ํฌ๋ฉด ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ์ ๋ ๋ง์ ์๊ฐ์ด ์์๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
`Java`
ํ ์์ญ์ ์คํ ์์ญ๊ณผ ๋ค๋ฅด๊ฒ ์ง์ ์์ฑ๋ ๋ณ์๋ฅผ ์ ๊ฑฐ๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. ๋ง์ฝ ๋ฉ๋ชจ๋ฆฌ์ ํ ์์ญ์ด ๋๋ฌด ํฌ๋ค๋ฉด, ๋์ ํ ์์ญ์ ์กด์ฌํ๋ ๋์ ๋ณ์์ ๋ํด ์ฐธ์กฐ ์ฌ๋ถ๋ฅผ ํ์ธํด์ผ ํ๋ฏ๋ก Garbage Collect ์ ์ํ์๊ฐ์ด ๋๋ฌด ๊ธธ์ด์ง๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ Java์ JVM์์๋ ์ฒ์๋ถํฐ ํ ์์ญ์ ํฌ๊ฒ ์ก์ง ์๊ณ , Heap ์์ญ์ด ๊ฝ ์ฐผ์ ๋ GC ์งํ ํ Heap ์์ญ์ ํ์ฅํ๊ฒ ๋ฉ๋๋ค.
๐ฎ OS๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํด์ผํ๋ ์ด์ ์ ๋ํด ์ค๋ช ํด ์ฃผ์๊ณ , ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด ์ด๋ค ์ ๋ต์ ์ฌ์ฉํ๋์ง ์ค๋ช ํด ์ฃผ์ธ์.
์ฐ์ , ๊ฐ๊ฐ์ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ค๋ก์ง '์ด์์ฒด์ '๋ง์ด ์ด์์ฒด์ ๋ฉ๋ชจ๋ฆฌ ์์ญ๊ณผ ์ฌ์ฉ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ๊ทผ์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ OS๋ง์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ ์ ์์ผ๋ฏ๋ก ์ ์ ํ ๊ด๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์ฉํ Swapping, Paging/Segmentation, ๊ณ ์ ๊ธธ์ด ํ ๋น/๊ฐ๋ณ ๊ธธ์ด ํ ๋น, ์์ถ ๋ฑ์ ๋ฐฉ์์ผ๋ก OS๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
๐ฎ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ค, ์ฐ์ ๋ฐฉ์๊ณผ ๋น์ฐ์ ๋ฐฉ์์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
์ฐ์ ํ ๋น ๋ฐฉ์์, ํ๋ก์ธ์ค ์ด๋ฏธ์ง๊ฐ ๋ถ๋ฆฌ๋์ง ์์ ์จ์ ํ ํ๋ก์ธ์ค๋ฅผ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๋ ๋ฐฉ์์ ๋๋ค.
๋ฉํฐ ํ๋ก์ธ์ค ํ๊ฒฝ์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ๋ก๋ํ๋ ๋ฐฉ์์ ๋๋ค.
์ฐ์ ํ ๋น ๋ฐฉ์์๋ ํฌ๊ฒ 2๊ฐ์ง๊ฐ ์์ผ๋ฉฐ '๊ณ ์ ๊ธธ์ด ํ ๋น'๊ณผ '๊ฐ๋ณ ๊ธธ์ด ํ ๋น'์ด ์์ต๋๋ค. ์ฐ๊ณ ๊ฐ
- ๊ณ ์ ๊ธธ์ด ํ ๋น : ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ ๋ ๊ธธ์ด๋ก ํํธ๋ฅผ ๋ถ๋ฆฌํ๊ณ , ํ๋ก์ธ์ค๋ฅผ ํด๋น ํํธ์ ์ฝ์ ํฉ๋๋ค. ๊ณ ์ ๋ ๊ธธ์ด์ ํํธ ๋ด์ ํ๋ก์ธ์ค๊ฐ ๋ค์ด๊ฐ๋ฏ๋ก, ์ฌ๋ฐฑ์ด ์๊ธธ ์ ์๋๋ฐ ์ด๊ฒ์ '๋ด๋ถ ๋จํธํ'๋ผ๊ณ ํฉ๋๋ค.
- ๊ฐ๋ณ ๊ธธ์ด ํ ๋น : ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ก์ธ์ค์ ๊ธธ์ด์ ์๋ง๊ฒ ํํธ๋ฅผ ๋ถ๋ฆฌํ๊ณ , ํด๋น ํ๋ก์ธ์ค๋ฅผ ์ ์ฌํฉ๋๋ค. ๊ฐ๋ณ๋ ๊ธธ์ด์ด๋ฏ๋ก ๋ด๋ถ ๋จํธํ๋ ๋ฐ์ํ์ง ์์ง๋ง, ๊ฐ๋ณ์ ์ธ ๊ธธ์ด ํ ๋น์ ์ํด ์ผ๋ถ๋ถ์ด ๋จ์ผ๋ฏ๋ก '์ธ๋ถ ๋จํธํ'๊ฐ ๋ฐ์ํฉ๋๋ค.
๋น์ฐ์ ํ ๋น ๋ฐฉ์์, ํ๋ก์ธ์ค๊ฐ ์ฐ์๋ ์ด๋ฏธ์ง๊ฐ ์๋ ๋ถ๋ฆฌ๋ ์ด๋ฏธ์ง๋ก ๊ตฌ์ฑ๋์ด ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๋ ๋ฐฉ์์ ๋๋ค.
ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋๋ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ผ๋ก,
'ํ์ด์ง'๊ณผ '์ธ๊ทธ๋ฉํ
์ด์
' ๋ฐฉ์์ด ์์ต๋๋ค. ๋ถํ์ธ, ํ
์ด๋ธ
- ํ์ด์ง : ํ๋ก์ธ์ค์ ๋ ผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ๊ณผ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ๊ฐ ์ผ์ ํ ํฌ๊ธฐ์ ํ์ด์ง์ ํ๋ ์์ผ๋ก ๋๋๋๋ค. ์ด๋ ํ์ด์ง์ ํ๋ ์์ด ํฌ๊ธฐ๋ ๋์ผํ๊ตฌ์, ํ์ด์ง์ ํ๋ ์์๋ ๊ฐ๊ฐ ๋ฒํธ๋ฅผ ํ ๋นํด ํ๋ก์ธ์ค์ ํ์ด์ง์ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ ์์ ๋งคํํฉ๋๋ค. ํ์ด์ง์ ํ๋ ์์ ๋งคํํ๋ ๋ฐ๋ ํ์ด์ง ํ ์ด๋ธ์ ์ฌ์ฉํฉ๋๋ค. ๊ฐ ํ๋ก์ธ์ค์ PCB์ ํ์ด์ง ํ ์ด๋ธ์ด ์ ์ฅ๋ฉ๋๋ค. ํ๋ก์ธ์ค์ ๋ง์ง๋ง ํ์ด์ง๊ฐ ํ์ด์ง ํฌ๊ธฐ๋ณด๋ค ์์ ์ ์์ผ๋ฏ๋ก '๋ด๋ถ ๋จํธํ'๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. (์ฐ์ ํ ๋น ๋ฐฉ์๋ณด๋ค๋ ์ ๊ฒ ๋ฐ์ํฉ๋๋ค.)
- ์ธ๊ทธ๋ฉํ ์ด์ : ํ๋ก์ธ์ค๋ฅผ ๊ฐ๋ณ์ ์ธ ํฌ๊ธฐ์ ์ธ๊ทธ๋จผํธ๋ก ๋ถ๋ฆฌํ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํฉ๋๋ค. ์ฃผ๋ก ๋ ผ๋ฆฌ์ ์ธ ๋ธ๋ก๋จ์ ์ธ๊ทธ๋จผํธ๋ก Code, Data, Stack & Heap์ผ๋ก ๋ถ๋ฆฌํ ์ ์์ต๋๋ค. ์ธ๊ทธ๋ฉํ ์ด์ ์ญ์ '์ธ๋ถ ๋จํธํ'๊ฐ ๋ฐ์ํฉ๋๋ค.
์ถ๊ฐ์ ์ผ๋ก ํ์ด์ง๊ณผ ์ธ๊ทธ๋ฉํ ์ด์ ๋ฐฉ์์ ์ฐ์์ ์ด์ง ์์ผ๋ฏ๋ก, ๊ฐ ์กฐ๊ฐ์ด ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์์น์ ์๋์ง ์์์ผ ํ๋ฏ๋ก ํ์ด์ง/์ธ๊ทธ๋จผํธ ํ ์ด๋ธ์ด ์กด์ฌํฉ๋๋ค.
๐ฎ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์๊ณ ๋ฆฌ์ฆ์ ๋ฌด์์ธ๊ฐ์?
์ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ณ ๋ถํ ๋ฐฉ์์ ๋ํด ๋งํด๋ณด๊ฒ ์ต๋๋ค.
๊ฐ๋ณ ๋ถํ ๋ฐฉ์์ด๋ ํ ๋นํ ํ๋ก์ธ์ค์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ถํ ํ๋ค๋ ๋ป์ธ๋ฐ์.
ํฌ๊ฒ ์ธ๊ฐ์ง๋ก ๋๋ฉ๋๋ค.
- First Fit : ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฒ์๋ถํฐ ๋ณด๋ฉด์ ๋ฐ๋ก ํ๋ก์ธ์ค๋ฅผ ํ ๋นํฉ๋๋ค. ํ ๋น ์๊ฐ ๋ฉด์์ ๋น ๋ฅด์ง๋ง, ๋จํธํ ํ์์ผ๋ก ์ธํด์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ถ๋ถ์ ์์ ์กฐ๊ฐ๋ค์ด ๋ง์ด ์๊ธธ ์ ์์ต๋๋ค.
- Best Fit : ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋๊น์ง ๋ณด๊ณ ๊ฐ์ฅ ์์ ๊ณณ์ ํ ๋นํฉ๋๋ค. ์ธ๋ถ ๋จํธํ๋ฅผ ๊ฐ์ฅ ํจ๊ณผ์ ์ผ๋ก ์ค์ฌ์ค๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ฅ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ๊ฒ์ ์๊ฐ์ด ๊ธธ์ด์ง ์ ์์ต๋๋ค.
- Worst Fit : ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋๊น์ง ๋ณด๊ณ ๊ฐ์ฅ ํฐ ๊ณณ์ ํ ๋น ํฉ๋๋ค. ๋จํธํ๊ฐ ๊ฐ์ฅ ์ฌํฉ๋๋ค.
- ์ถ๊ฐ) Next fit : ๋ง์ง๋ง์ผ๋ก ์ฐธ์กฐํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์๋ถํฐ ํ์์ ์์ํด ๊ณต๊ฐ์ ์ฐพ์ต๋๋ค.
๐ฎ OS์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ต ์ค ํ์ด์ง๊ณผ ์ธ๊ทธ๋จผํ ์ด์ ์ ๋น๊ตํด์ ์ค๋ช ํด ๋ณด์ธ์.
- ํ์ด์ง๊ณผ ์ธ๊ทธ๋จผํ ์ด์ ์ ๋น์ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐฉ์์ผ๋ก, ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ํ ๋น๋ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ๋ณด์ํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
- ํ์ด์ง์ ๋ ผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ๊ณผ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์ ํฌ๊ธฐ๋ก ๋๋๊ณ , ๊ฐ๊ฐ์ ์์ญ์ 'ํ์ด์ง'์ 'ํ๋ ์'์ด๋ผ๊ณ ์ผ์ปซ์ต๋๋ค. ์ด ๊ธฐ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ง๋ง, ๋ด๋ถ ๋จํธํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ๋ฐ๋ฉด์ ์ธ๊ทธ๋จผํ ์ด์ ์ ํ๋ก์ธ์ค๋ฅผ ๋ ผ๋ฆฌ์ ๋จ์๋ก ๋ถํ ํฉ๋๋ค. ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ถํ ํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๊ฐ ์ฝ์ง๋ง, ์ธ๋ถ ๋จํธํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ํ์ด์ง๊ณผ ์ธ๊ทธ๋ฉํ ์ด์ ๋ฐฉ์์ ์ฐ์์ ์ด์ง ์์ผ๋ฏ๋ก, ๊ฐ ์กฐ๊ฐ์ด ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์์น์ ์๋์ง ์์์ผ ํ๋ฏ๋ก ํ์ด์ง/์ธ๊ทธ๋จผํธ ํ ์ด๋ธ์ด ์กด์ฌํฉ๋๋ค.
๐ฎ ๋จํธํ (fragmentation) ๋ฅผ ์ธ๊ธํ์ จ๋๋ฐ, ๋จํธํ๊ฐ ๋ญ์ง ์๋๋๋ก ์ค๋ช ํด์ฃผ์ธ์.
ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ฉด ๊ทธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋น ๊ณต๊ฐ(์ฌ์ฉํ์ง ์๋ ๊ณต๊ฐ) ์ด ๋๊ณ ๊ทธ ๋น ๊ณต๊ฐ์ ํฌ๊ธฐ๋ณด๋ค ํฐ ๋ฉ๋ชจ๋ฆฌ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌํ์ฌ ์ด ๊ณต๊ฐ๋ค์ด ํ๋ ๋ ์์ด๊ฒ ๋๋ฉด ์์น์์ผ๋ก๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋จ์์์๋ ๋ถ๊ตฌํ๊ณ , ์ค์ ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ ๊ฒ ๊ณต๊ฐ์ ์์ผ๋ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ํ ๋นํ ์ ์๋ ์ํฉ์ผ๋ก ํฌ๊ฒ ๋ด๋ถ, ์ธ๋ถ ๋จํธํ๊ฐ ์์ต๋๋ค.
- ๋ด๋ถ ๋จํธํ๋ ๊ณ ์ ๊ธธ์ด ํ ๋น / ํ์ด์ง ๊ธฐ๋ฒ์์ ๋ํ๋๋ ๊ฒ์ผ๋ก, ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ ์ ์ธ ํฌ๊ธฐ๋ก ๋๋ ์ํฉ์์ ์ด ํ๋ก์ธ์ค๊ฐ ๋๋ ๊ฑธ ๋ค ์ฌ์ฉํ์ง ๋ชปํ๊ณ ๋ด๋ถ์ ๋น๊ณต๊ฐ์ด ์๊ธด ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํ๋ก์ธ์ค๊ฐ ํ์ํ ์๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ ๋ง์ด ํ ๋น๋ ๊ฒฝ์ฐ์ ๋๋ค.
- ์ธ๋ถ ๋จํธํ๋ ๊ฐ๋ณ๊ธธ์ด ํ ๋น / ์ธ๊ทธ๋ฉํ ์ด์ ๊ธฐ๋ฒ์์ ๋ํ๋๋ ๊ฒ์ผ๋ก, ๋ฉ๋ชจ๋ฆฌ ์ค๊ฐ์ค๊ฐ์ ์ฌ์ฉํ์ง ์๋ ๋น ๊ณต๊ฐ์ด ์๊ฒจ์ ๋์ด์ ํ ๋น์ด ์๋๋ ํ์์ ๋งํฉ๋๋ค.
๋จํธํ ํด๊ฒฐ์ ์ํ ๋๊ฐ์ง ๊ธฐ๋ฒ์ด ์์ผ๋ ๊ทผ๋ณธ์ ์ผ๋ก๋ ์๋ฒฝํ ํด๊ฒฐํ์ง ๋ชปํฉ๋๋ค.
- ํ์ด์ง ๊ธฐ๋ฒ : ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ผ์ ํฌ๊ธฐ๋ก ์ชผ๊ฐ๊ณ ํ ๋นํฉ๋๋ค. ๋ด๋ถ ๋จํธํ๊ฐ ์๊ธด๋ค๋ ๋จ์ ์ด ์์ผ๋, ์ผ์ ํฌ๊ธฐ๋ก ๋๋ ์ ์ค๊ฐ์ค๊ฐ ๋น๊ณณ์ด ์์ต๋๋ค
- ์ธ๊ทธ๋จผํ ์ด์ ๊ธฐ๋ฒ : ํ์ด์ง์ฒ๋ผ ์ผ์ ํฌ๊ธฐ๋ก ๋๋๋ ๊ฒ ์๋๋ผ, ํ์ํ ํฌ๊ธฐ๋งํผ์ ๊ฐ๋ณ์ ์ธ ํฌ๊ธฐ์ ์ธ๊ทธ๋จผํธ๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํฉ๋๋ค. ์ฃผ๋ก ๋ ผ๋ฆฌ์ ์ธ ๋ธ๋ก๋จ์ ์ธ๊ทธ๋จผํธ๋ก Code, Data, Stack & Heap ์ผ๋ก ๋ถ๋ฆฌํ ์ ์์ต๋๋ค. ํ๋ก์ธ์ค์ ํฌ๊ธฐ๋งํผ ํ ๋นํ๋, ๋ด๋ถ๋จํธํ๊ฐ ์ ์ด์ ๋ฐ์ํ ์ ์์ผ๋, ์ธ๋ถ ๋จํธํ๊ฐ ์๊ธธ ์ ์๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
๐ฎ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๋ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์๋์?
๋ฉ๋ชจ๋ฆฌ ์์ถ (๋์คํฌ ์กฐ๊ฐ ๋ชจ์), ๋ฉ๋ชจ๋ฆฌ ํตํฉ (๋จํธํ๊ฐ ๋ฐ์๋ ๊ณต๊ฐ๋ค์ ํ๋๋ก ํตํฉ์์ผ ํฐ ๊ณต๊ฐ์ผ๋ก ๋ง๋๋ ๊ธฐ๋ฒ) ๊ทธ๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ ํ์ด ์์ต๋๋ค.
๐ฎ ๋ฉ๋ชจ๋ฆฌ ์์ถ, ๋ฉ๋ชจ๋ฆฌ ํตํฉ, ๋ฉ๋ชจ๋ฆฌ ํ์ ๋ํด ์ค๋ช ํด ์ฃผ์ค๋์?
์ธ๋ถ ๋จํธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๋ฉ๋ชจ๋ฆฌ ์์ถ(Memory Compaction)์ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉ ์ค์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ๋ฐฐ์นํด์ ํฉ์ด์ ธ ์๋ ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋๋ก ํฉ์น๋ ๊ฒ์ ๋๋ค. CPU๊ฐ ๋ช ๊ฐ์ ๋ฐ์ดํธ์ฉ ์ฝ์ด์ค๊ณ ๋ค์ ์ฐ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ๋ณตํด์ ์ฌ๋ฐฐ์นํ๋ฏ๋ก CPU ์ฒ๋ฆฌ ์๊ฐ์ด ์ฆ๊ฐํ์ฌ ์ฒ๋ฆฌ๊ธฐ ํจ์จ์ด ํฌ๊ฒ ๊ฐ์ํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ํตํฉ์ ๋จํธํ๊ฐ ๋ฐ์๋ ๊ณต๊ฐ์์ ์ธ์ ํด์๋ ๋ค๋ฅธ ๋จํธํ ๊ณต๊ฐ๋ค์ ํ๋๋ก ํตํฉ์์ผ ํฐ ๊ณต๊ฐ์ผ๋ก ๋ง๋๋ ๊ธฐ๋ฒ์ ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ํ(Memory Pool)์ ์ฌ์ ์ ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ์งํฉ์ ๋๋ค. ์ด ํ์์๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ํ ๋นํ๊ณ , ํ์ํ ๋๋ง๋ค ์ด ํ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๊ฑฐ๋ ๋ฐํํฉ๋๋ค. ํ๋ก๊ทธ๋จ ์คํ ์ค ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ํ ๋นํ๊ณ ํด์ ํ๋ ๊ฒ์ ๋นํด ์ค๋ฒํค๋๋ฅผ ์ค์ด๊ณ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ์ด๋ ํ ๋ด์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฐ์์ ์ผ๋ก ํ ๋น๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฐธ๊ณ ํ๋ฉด ์ข์ ๋ธ๋ก๊ทธ https://91ms.tistory.com/10
๐ฎ ์ ํจ์ฃผ์, ์ฃผ์์ง์ ๋ฐฉ์์ ์์๋์?
์ ํจ์ฃผ์๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ์๋ฏธํ๊ตฌ์. CPU์์ ์ด ์ฃผ์์ง์ ๋ฐฉ์์ ํตํด์ ์ค์ ์ ํจ์ฃผ์์ ์ ๊ทผํ๊ฒ๋ฉ๋๋ค. ์ฃผ์์ง์ ๋ฐฉ์์ ๋ช ๋ น์ด๊ฐ ์ฒ๋ฆฌํด์ผ ํ๋ ๋ฐ์ดํฐ์ ์ ํจ์ฃผ์๋ฅผ ์ด๋ป๊ฒ ์ ์ฅํ๋๋์ธ๋ฐ ๋ํ์ ์ผ๋ก ๋ ๊ฐ์ง๊ฐ ์๋ค.
- ์ง์ ์ฃผ์ ์ง์ ๋ฐฉ์ : ์คํผ๋๋(์ฃผ์ ํ๋) ๋ด์ ์ฃผ์๋ฅผ ์ค์ ๋ฐ์ดํฐ์ ์ฃผ์๋ก ์ง์ ํํํ๋ ๋ฐฉ์์ ๋๋ค. ๋ช ๋ น์ด์ ์ฃผ์๊ฐ์ ๋ฐ๋ก ์ ํจ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๊ฒ์ผ๋ก, ๋ฉ๋ชจ๋ฆฌ์ ํ๋ฒ๋ง ์ ๊ทผํด์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค. ํจ์จ์ ์ด์ง๋ง ์ง์ ํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ํจ์ฃผ์์ ํฌ๊ธฐ๊ฐ ์ ํ์ ์ด๋ค.
- ๊ฐ์ ์ฃผ์ ์ง์ ๋ฐฉ์ : ์ ํจ ์ฃผ์์ ์ฃผ์๋ฅผ ์คํผ๋๋ ํ๋์ ํํํ๋ ๋ฐฉ์์ ๋๋ค. CPU๊ฐ ์ฒ๋ฆฌํด์ผํ ๋ชฉ๋ก ์ค์ ์ ํจ์ฃผ์๊ฐ ์ ์ฅ์ด ๋ ๊ฒ์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ค. ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ์ต์ 2๋ฒ์ ์ฐธ์กฐํด์ผ ํ๋ค. ๋ช ๋ น์ด์ ์ฃผ์ํ๋๊ฐ ์งง๊ณ , ๋ฒ์๊ฐ ์ ํ๋์ด ์์ด์ ๊ธด ์ฃผ์์ ์ ๊ทผํ๊ธฐ ํ๋ค ๋ ์ฌ์ฉํ๊ธฐ ์ข์ต๋๋ค.
์ด๋ฏธ์ง ์ฐธ๊ณ : https://velog.io/@hyunji015/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-%EB%AA%85%EB%A0%B9%EC%96%B4%EC%9D%98-%EA%B5%AC%EC%A1%B0
๐ฎ ๋ช ๋ น์ด์ ์ฃผ์ํ๋๊ฐ ์งง๋ค๋ ๊ฒ์ด ์ด๋ค ์๋ฏธ์ธ๊ฐ์?
์ปดํจํฐ์ ๋ช ๋ น์ด๋ ์ฌ๋ฌ ํ๋๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ์ด ์ค ํ๋๊ฐ ์ฃผ์๋ฅผ ์ง์ ํ๋ '์ฃผ์ํ๋(์คํผ๋๋)'์ ๋๋ค. ๋ง์ฝ ์ด ์ฃผ์ํ๋๊ฐ ์งง๋ค๋ฉด, ์ฆ ๋นํธ ์๊ฐ ์ ๋ค๋ฉด, ๊ทธ๊ฒ์ ์ง์ ์ฃผ์ ์ง์ ๋ฐฉ์์ ์ฌ์ฉํ ๋ ์ง์ ํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๋ฒ์๊ฐ ์ ํ์ ์ด๋ผ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฃผ์ํ๋์ ๊ธธ์ด๊ฐ ์งง์ผ๋ฉด ํํํ ์ ์๋ ์ฃผ์ ๋ฒ์๋ ์ ํ์ ์ ๋๋ค. ์ฆ, ๋ฉ๋ชจ๋ฆฌ ์์ ๋ชจ๋ ์์น์ ์ง์ ์ ๊ทผํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ์ ํ์ ๊ทน๋ณตํ๊ธฐ ์ํด '๊ฐ์ ์ฃผ์ ์ง์ ๋ฐฉ์'์ด ์ฌ์ฉ๋ฉ๋๋ค.
์ฐธ๊ณ ํ๋ฉด ์ข์ ๋ธ๋ก๊ทธ : https://velog.io/@hyunji015/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-%EB%AA%85%EB%A0%B9%EC%96%B4%EC%9D%98-%EA%B5%AC%EC%A1%B0
๐ฎ ๊ฐ์์ฑ, ์์์ฑ์ ์์๋์?
๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ๊ณต์ ์์์ ์ฌ์ฉ (ํนํ write ์ฐ์ฐ) ํ ๋, ๋๊ฐ์ง๋ฅผ ์ ๊ฒฝ์จ์ค์ผ ํ๋๋ฐ์.
์ฒซ ๋ฒ์งธ๋ ๊ฐ์์ฑ์ด๊ณ ๋ ๋ฒ์งธ๋ ์์์ฑ์ ๋๋ค.
๊ฐ์์ฑ (Visibility)์ ๋ฉํฐ์ค๋ ๋์์ ๊ณต์ ์์์ ๋ํด์ ๋ชจ๋ ๊ฐ์ ์ํ๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ์ค๋ ๋์์ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ ๋ฐ์ดํธํ ๋ ๋ค๋ฅธ ์ค๋ ๋๋ ๋ณ๊ฒฝ๋๊ธฐ ์ด์ ์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ํด๊ฒฐํ๋ ๊ฑฐ์ฃ . CPU์ ์บ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ๋ก ๊ฐ์ ธ์ด์ผ๋ก์จ ํด๊ฒฐํ๊ฒ ํ๋๊ฑฐ์ฃ .
- C++์์ volatile์ ๋ณ์์ ๋ํ ์์์ ์ ๊ทผ์ด๋ ์ค๋ ๋ ์์ ์ ๋ณด์ฅํ์ง ์์ต๋๋ค. ๋จ์ํ ๋ณ์๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ง์ ์ฝํ๊ณ ์ฐ์ฌ์ง ๊ฒ์์ ๋ณด์ฅํ ๋ฟ์ ๋๋ค. ๋ณ์๊ฐ ์ปดํ์ผ๋ฌ์ ์ํด ์ต์ ํ๋์ง ์๊ณ , ํญ์ ๋ฉ๋ชจ๋ฆฌ์์ ์ง์ ์ฝ๊ณ ์ฐ์ฌ์ผ ํจ์ ๋ํ๋ด๋ ํค์๋์ ๋๋ค. ์ฆ volatile ํค์๋๊ฐ ์ ์ฉ๋ ๋ณ์๋ ์ปดํ์ผ๋ฌ์ ์ํ ์ต์ ํ ๊ณผ์ ์์ ์ ์ธ๋์ด, ๋ณ์์ ๊ฐ์ด ์ธ์ ๋ ์ง ๋ณ๊ฒฝ๋ ์ ์์์ ๋ํ๋ ๋๋ค.
- ์ค๋ ๋๊ฐ ์์ ํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ค๋ฉด, ์ถ๊ฐ์ ์ธ ๋๊ธฐํ ๋ฉ์ปค๋์ฆ (์: ๋ฎคํ ์ค) ์ด ํ์ํฉ๋๋ค.
- ์ต์ C++ ํ์ค์์๋ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ๊ณผ ๊ด๋ จ๋ ๋ ์ ๊ตํ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํฉ๋๋ค. (์: std::atomic)
๋ค์์ผ๋ก ์์์ฑ (Atomicity)์, ๋ฉํฐ์ค๋ ๋์ ๊ณต์ ์์์ ๋ํ ์์ ์ด ๋ชจ๋ ๋ฐ์๋๋ ๊ฒ์ ๋๋ค. ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋์์ ๋์์ ์ ๋ฐ์ดํธํ ๊ฒฝ์ฐ, ํ๋๋ง ๋ฐ์๋๋๊ฒ ์๋๋ผ ๋ชจ๋ ๋ฐ์๋์ด์ผ ํด์. ์ด๊ฑฐ๋ ๋๊ธฐํ๋ก ํด๊ฒฐํ๊ณ ์ ๋ฎคํ ์ค์ ๋ฝ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ๋๊ธฐํ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. ๊ทธ๋์ ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ์ ๊ทผํ๊ฒ ํด์ ํด๊ฒฐํ๋ ๊ฑฐ์ฃ .
๋ฎคํ ์ค๋ฅผ ์ฌ์ฉํ ์์์ ์ฐ์ฐ์ ์๋ก, std::mutex ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์ ๊ทผ์ ์ ์ดํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, mutex mtx; ๋ฅผ ์ ์ธํ๊ณ , ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ ์ mtx.lock(); ์ ํธ์ถํ๊ณ , ์ ๊ทผ์ด ๋๋ ํ์ mtx.unlock(); ์ ํธ์ถํฉ๋๋ค.
๐ฎ ์ค๋ ๋ ์์ ๊ณผ ์ด๋ฅผ ์ํ ์กฐ๊ฑด์ด ๋ฌด์์ธ๊ฐ์?
์ค๋ ๋ ์์ ์ด๋ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์, ํ๋์ ๋ณ์, ํจ์, ๊ฐ์ฒด์ ์ค๋ ๋ ์ฌ๋ฌ ๊ฐ๊ฐ ๋์์ ์ ๊ทผํด๋ ๋ฌธ์ ๊ฐ ์์์ ์๋ฏธํฉ๋๋ค.
์ด๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ 4๊ฐ์ง ์กฐ๊ฑด์ ์ง์ผ์ผ ํฉ๋๋ค.
์ํธ๋ฐฐ์ (mutual eclusive) : ๊ณต์ ์์์ ์ ๊ทผํด์ผ ํ ๋, ๋ฎคํ ์ค ๋๋ ์ธ๋งํฌ์ด์ ๊ฐ์ ์ํธ๋ฐฐ์ ๊ธฐ๋ฒ์ ์ฌ์ฉํด์ ์ ๊ทผ์ ํต์ ํด์ผ ํฉ๋๋ค.
์์ ์ฐ์ฐ (atomic operation) : ๊ณต์ ์์์ ์ ๊ทผํ ๋ ์์ ์ฐ์ฐ์ ์ด์ฉํ๊ฑฐ๋, ์์์ ์ผ๋ก ์ ์๋ ์ฐ์ฐ์ ์ด์ฉํด ์ฐ์ฐ ๋์ค์ ๋ค๋ฅธ ์ค๋๊ฐ ์ ๊ทผํ ์ ์๊ฒ ํฉ๋๋ค. ์ฌ๊ธฐ์ ์์ ์ฐ์ฐ์ด๋ "์ฐ์ฐํ๋ค"์ "์ฐ์ฐ ์ ํ๋ค" ๋ ๊ฐ์ง๋ง ์กด์ฌํ๋ ์ฐ์ฐ์ ๋๋ค.
์ฌ์ง์ ์ฑ (reentrancy) : ํน์ ํจ์๋ฅผ ํ๋์ ์ค๋ ๋์์ ์คํ ์ค์ผ ๋ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ํด๋น ํจ์๋ฅผ ์คํํด๋ ๊ฐ ์ค๋ ๋์ ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์๊ฒ ํด์ผ ํฉ๋๋ค.
์ค๋ ๋ ์ง์ญ ์ ์ฅ์ (thread local storage) : ๊ฐ ์ค๋ ๋์์๋ง ์ ๊ทผํ ์ ์๋ ์ ์ฅ์๋ฅผ ์ฌ์ฉํด์ ๊ณต์ ๋๋ ์์์ ์ค์ฌ์ผ ํฉ๋๋ค.
๐ฎ ํ๋ก์ธ์ค ์ค์ผ์ค๋ฌ๊ฐ ๋ฌด์์ธ๊ฐ์?
๋ฉ๋ชจ๋ฆฌ์ CPU๊ฐ ํ์ ๋์ด์์ผ๋ฏ๋ก, ๋ฉํฐ ํ๋ก์ธ์ค ํ๊ฒฝ์์ ๋ชจ๋ ํ๋ก์ธ์ค๋ฅผ ๊ณตํํ๊ฒ ์คํํ๊ธฐ ์ํด,
์ด๋ค ํ๋ก์ธ์ค์๊ฒ ๋ฉ๋ชจ๋ฆฌ์ CPU๋ฅผ ํ ๋นํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ์ค์ผ์ค๋ฌ๋ก, ํฌ๊ฒ ์ธ๊ฐ์ง๊ฐ ์์ต๋๋ค.
- ์ฅ๊ธฐ ์ค์ผ์ค๋ฌ : ๊ณผ๊ฑฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ์ ์ด์ ์ด๋ค ๊ฑธ ํ๋์์ ์ค๋นํ์ ์ฌ๋ฆด์ง๋ ๊ฒฐ์ ํด์ผ ํ์ต๋๋ค. ํ๋ ์ด์์ฒด์ ์์๋ ์๋ถํ ์์คํ ์ ์ฌ์ฉํ๋ฏ๋ก ๋๋ถ๋ถ ์ฌ์ฉํ์ง ์๋๋ค๊ณ ์๊ณ ์์ต๋๋ค.
- ์ค๊ธฐ ์ค์ผ์ค๋ฌ : ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ ๊ณต๊ฐ์ ์ํด ํ๋ก์ธ์ค ์๋ฅผ ๊ด๋ฆฌ ํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋, ์ฆ ์ค๋นํ์ ํ๋ก์ธ์ค์ ๊ฐ์ ๋ฅผ ๋์ ์ผ๋ก ์กฐ์ ํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ์ ํ๋ก์ธ์ค๊ฐ ๋ง์ด ๋ก๋๋๋ฉด SSD๊ฐ์ ๋์คํฌ ์ ์ฅ๊ณต๊ฐ์ผ๋ก ์ค์ ์์ํ๊ณ , ์ด๋ ๊ฒ ์ค์ ์์๋ ์ผ๋ถ ํ๋ก์ธ์ค๋ ์ค๋จ ์ํ(suspended) ๊ฐ ๋ฉ๋๋ค.
- ๋จ๊ธฐ ์ค์ผ์ค๋ฌ : ํํ ์ฐ๋ฆฌ๊ฐ ๋งํ๋ CPU ์ค์ผ์ค๋ฌ๋ก, ์ค๋นํ์์ ๋๊ธฐ ์ํ ํ๋ก์ธ์ค ์ค ์ด๋ค ํ๋ก์ธ์ค๋ฅผ CPU์ ํ ๋นํ ์ง๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ์ฆ, ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ๋์คํจ์นํ ์ง ๊ฒฐ์ ํฉ๋๋ค.
๐ฎ CPU ์ค์ผ์ค๋ฌ (๋จ๊ธฐ ์ค์ผ์ค๋ฌ) ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์ค๋นํ์ ์๋ ํ๋ก์ธ์ค์ ๋ํด์ CPU๋ฅผ ํ ๋นํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ณตํํ๊ฒ CPU๋ฅผ ํ ๋นํ๊ธฐ ์ํด ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ,
๊ทธ ์ค์์๋ ํฌ๊ฒ ๋ค์ฏ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ด ์๋๋ฐ์.
FCFS, SJF, SRT, Priority Scheduling, ๊ทธ๋ฆฌ๊ณ Round Robin์ด ์์ต๋๋ค.
๐ฎ CPU ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์ ์ค๋ช ํด์ฃผ์ธ์.
๋ชจ๋ ๋ฉํฐํ์คํน ํ๊ฒฝ์์ ์ฌ๋ฌ ํ๋ก์ธ์ค ๋๋ ์ค๋ ๋์ CPU ์๊ฐ์ ํ ๋นํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
๋น์ ์ ํ, ์ ์ ํ ์ค์ผ์ค๋ง์ผ๋ก ๋๋ ์ ์๋๋ฐ์.
(๋น์ ์ ํ ์ค์ผ์ค๋ง์ ํ๋์ ํ๋ก์ธ์ค๊ฐ ์คํ ์ค์ด๋ฉด ํด๋น ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์คํ๋ ์ ์์ต๋๋ค. ์ ์ ํ ์ค์ผ์ค๋ง์ ํ๋์ ํ๋ก์ธ์ค๊ฐ ์คํ ์ค์ผ ๋ ์ค์ผ์ค๋ฌ๊ฐ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ์ค๋จ์ํค๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์คํํ ์ ์์ต๋๋ค.
์ ์ ํ ์ค์ผ์ค๋ง์ ๋ ๋ณต์กํ๊ณ , ๋ฌธ๋งฅ ์ ํ(context switch) ๋น์ฉ์ด ๋ ๋์ ์ ์์ง๋ง, ๋ฐ์ ์๊ฐ์ ๋จ์ถ์ํค๊ณ ๋ ๊ณต์ ํ ์์ ๋ถ๋ฐฐ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด, ๋น์ ์ ํ ์ค์ผ์ค๋ง์ ๊ตฌํ์ด ๊ฐ๋จํ๊ณ ์ค๋ฒํค๋๊ฐ ์ ์ง๋ง, ํน์ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ๋ ์ ํ ์ํ์ด ์์ต๋๋ค.)
FCFS (First Come First Serve)
- ์ค๋น ํ์ ๋จผ์ ๋ค์ด์จ ํ๋ก์ธ์ค๊ฐ ์ฐ์ ์์๋ฅผ ๊ฐ๋ ๋น์ ์ ํ ์ ์ ์ ์ถ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
SJF (Shortest Job First)
- ์ค๋น ํ์ ์๋ ํ๋ก์ธ์ค ์ค CPU๋ฅผ ์ ์ ํ๋ ์คํ ์๊ฐ์ด ์งง์ ๊ฒ๋ถํฐ ์คํํ๋ ๋น์ ์ ํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
SRT (Shortest Remaining Time)
- SJF ์ ์ ์ ํ ๋ฒ์ ์ผ๋ก, ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ๋ฉด ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ๋น๊ตํ์ฌ ์ค์ผ์ค๋ง์ ๋ค์ ๊ฒฐ์ ํฉ๋๋ค.
- ์์ฃผ ๋ฐ์ํ๋ ๋ฌธ๋งฅ ๊ตํ (context switch) ์ผ๋ก ์ธํด ์ค๋ฒํค๋๊ฐ ์ฆ๊ฐํ ์ ์๋ ๋จ์ ์ด ์์ต๋๋ค.
- ๋ํ Starvation (๊ตถ์ฃผ๋ฆผ/๊ธฐ์) ์ด๋ผ๋ ๋ฌธ์ ๊ฐ ์ผ์ด๋ ์ ์์ต๋๋ค. ๊ธด ์คํ ์๊ฐ์ ๊ฐ์ง ํ๋ก์ธ์ค๋ ๊ณ์ํด์ ๋๊ธฐ ์ํ๋ก ๋จธ๋ฌผ ์ ์์ต๋๋ค.
Priority Scheduling : ์ ์ ํ ๋๋ ๋น์ ์ ํ ๋ฒ์ ์ด ์์ต๋๋ค.
- ๊ฐ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ํ ๋นํ๊ณ , ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค์ ๋จผ์ CPU๋ฅผ ํ ๋นํฉ๋๋ค. ์ฐ์ ์์๋ ์ ์ ์ด๊ฑฐ๋ ๋์ ์ผ ์ ์์ต๋๋ค.
- ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ํ๋ก์ธ์ค์ CPU๋ฅผ ํ ๋นํฉ๋๋ค. ์ ์ ํ ๋ฒ์ ์์๋ ๋ ๋์ ์ฐ์ ์์์ ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ๋ฉด ํ์ฌ ํ๋ก์ธ์ค๋ฅผ ์ค๋จํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด, ๋น์ ์ ํ ๋ฒ์ ์์๋ ํ์ฌ ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
Round Robin
- ์ ์ ํ ์ค์ผ์ค๋ง์ผ๋ก, ๋ชจ๋ ํ๋ก์ธ์ค์ ๋์ผํ ์๊ฐ ํ ๋น๋(ํ์ ํํ )์ ๋ถ์ฌํ๊ณ , ์ด ์๊ฐ์ด ์ง๋๋ฉด ๋ค์ ํ๋ก์ธ์ค์๊ฒ ์์๋ฅผ ๋๊น๋๋ค.
ํ... First ๊ฐ ๋ถ์ผ๋ฉด ๋น์ ์ ํ์ด๋ค!
๐ฎ ์ปจํ ์คํธ ์ค์์นญ์ด ๋ฌด์์ธ๊ฐ์?
์ปจํ ์คํธ ์ค์์นญ์ CPU๊ฐ ์ฒ๋ฆฌ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. CPU๋ ํ๋์ ํ๋ก์ธ์ค๋ง ์ฒ๋ฆฌํ ์ ์์ด์ ๋ฉํฐ ํ๋ก์ธ์ค ํ๊ฒฝ์์๋ ์ฝํ ์คํธ ์ค์์นญ์ด ๋ฐ์ํฉ๋๋ค. CPU ์ค์ผ์ค๋ฌ์ ์ํด ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ์คํ ์ํ์ ํ๋ก์ธ์ค๊ฐ ์ค๋น ๋๋ ๋๊ธฐ ์ํ๋ก ์ ํ๋๊ณ , ๋ค์์ ์คํํ ํ๋ก์ธ์ค๊ฐ ์คํ ์ํ๋ก ์ ํ๋ฉ๋๋ค. ์ด๋ ๋ ์ง์คํฐ์ ์ ์ฅ๋ ํ๋ก์ธ์ค ์ ๋ณด๊ฐ ๋ฐ๋๋ฉด์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
๐ฎ ๋ ์์ธํ ๋งํด์ฃผ์ธ์.
CPU๊ฐ ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ํ๋ก์ธ์ค์ PCB(Process control Block)์ ๋ฐ๋ก ์ ์ฅํ๊ณ ๋ค๋ฅธ PCB๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋งํฉ๋๋ค. PCB๋ ํน์ ํ๋ก์ธ์ค์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์๋ ์ด์์ฒด์ ์ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ์ด์์ฒด์ ๋ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ๋ก์ธ์ค์ ์์ฑ๊ณผ ๋์์ ๊ณ ์ ํ PCB๋ฅผ ์์ฑํฉ๋๋ค. ์ ์ฅ๋๋ ์ ๋ณด๋ก๋ ํ๋ก์ธ์ค์ ๊ณ ์ ์์ด๋์ธ PID, ํ๋ก์ธ์ค๊ฐ ๋ค์์ผ๋ก ์คํํด์ผ ํ๋ ๋ช ๋ น์ด์ ์ฃผ์ ๊ฐ์ธ PC ๋ฑ์ด ์์ต๋๋ค.
์ปจํ ์คํธ ์ค์์นญ์ ํ๋์ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฌ์ฉ ์ค์ธ ์ํ์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฌ์ฉํ๋๋ก ํ๊ธฐ ์ํด ์ด์ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ณด๊ดํ๊ณ ์๋ก์ด ํ๋ก์ธ์ค์ ์ํ๋ฅผ ์ ์ฌํ๋ ์์ ์ ๋๋ค. ์ฆ, ์ค์ผ์ค๋ง์ ์ํด ์คํ ์ค์ธ ์ฝ๋, ์์ ๋ฑ์ ์ ์ฅํ๊ณ ํ์ฌ ์ํ๋ฅผ ๋๊ธฐ ์ํ๋ก ๋ง๋ค๊ณ , ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์คํ์ํค๋ ๊ณผ์ ์ ๋๋ค.
๐ฎ ๋ฉํฐ ํ๋ก์ธ์ค์์ ์ฝํ ์คํธ ์ค์์นญ๊ณผ ๋ฉํฐ ์ค๋ ๋์์ ์ฝํ ์คํธ ์ค์์นญ์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋ฉํฐ ์ค๋ ๋์์ ์ฝํ ์คํธ ์ค์์นญํ ๋, ๋ฉํฐ ํ๋ก์ธ์ค๋ณด๋ค ์ค๋ฒํค๋๊ฐ ์ ๊ฒ ๋ฐ์ํ๋ค๋ ์ ์ ๋๋ค. ๋ฉํฐ ํ๋ก์ธ์ค๋ ํ๋ก์ธ์ค๋ณ๋ก ๊ณ ์ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์ง๋ ๋ฐ๋ฉด, ๋ฉํฐ ์ค๋ ๋๋ ์คํ ์์ญ์ ์ ์ธํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ณต์ ํฉ๋๋ค. ๊ทธ๋์ ๋ ์ง์คํฐ์ ๋ก๋ํด์ผ ํ๋ ๋ฐ์ดํฐ ์์ด ์ ์ด์ ์ค๋ฒํค๋๊ฐ ์ ๊ฒ ๋ฐ์ํฉ๋๋ค.
๐ฎ ์ธํฐ๋ฝํธ์ ํด๋ง์ ์์๋์?
- ์ธํฐ๋ฝํธ๋ ํ๋์จ์ด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ CPU์๊ฒ ์๋ฆฌ๋ ๋ฐฉ์์ด๋ฉฐ, ํด๋ง์ CPU๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ํ๋์จ์ด ์ฅ์น๋ฅผ ์ฒดํฌํ๋ ๋ฐฉ์์ ๋๋ค. ์ธํฐ๋ฝํธ๋ ์์ ์ฌ์ฉ ์ธก๋ฉด์์ ๋ ํจ์จ์ ์ด์ง๋ง ๊ตฌํ์ด ๋ณต์กํ ์ ์์ผ๋ฉฐ, ํด๋ง์ ๊ฐ๋จํ ์์คํ ์ ์ ํฉํ์ง๋ง ์ง์์ ์ธ ์์ ์ฌ์ฉ์ด ํ์ํฉ๋๋ค.
- ์ธํฐ๋ฝํธ๋ ํ๋์จ์ด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ CPU์๊ฒ ์๋ฆฌ๋ ๋ฐฉ์์
๋๋ค.
- CPU์์ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ๋ค๊ฐ ์ ์ถ๋ ฅ ๊ด๋ จ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์์ธ ์ํฉ์ด ๋ฐ์ํ ๋ ์ด์ ๋์ํ ์ ์๊ฒ CPU์ ์ฒ๋ฆฌ๋ฅผ ์์ฒญํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ๊ทธ ์๋ก ์ ์ถ๋ ฅ์ด ๋ฐ์ํ ๋, CPU ์ฌ์ฉ ์๊ฐ์ด ๋ง๋ฃ๋์์ ๋, ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ๋, I/O ์์ ์๋ฃ๋์์ ๋๋ฅผ ์๋ฆฌ๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
- ํด๋ง์ CPU๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ํ๋์จ์ด ์ฅ์น๋ฅผ ์ฒดํฌํ๋ ๋ฐฉ์์
๋๋ค.
- ์ธํฐ๋ฝํธ ์์ด๋ ์ฅ์น์ ์ํ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํ ์ ์์ผ๋ฏ๋ก, ์ธํฐ๋ฝํธ ์์คํ ์ด ํ์ ์๋ ๊ฐ๋จํ ์์คํ ์์ ์ ์ฉํฉ๋๋ค.
- CPU ์์์ ๋ญ๋น๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ์๋ต ์๊ฐ์ด ์ง์ฐ๋ ์ ์์ต๋๋ค. CPU๊ฐ ์ง์์ ์ผ๋ก ์ฅ์น๋ฅผ ํ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๊ฐ๋จํ ์๋ฒ ๋๋ ์์คํ , ํค๋ณด๋ ์ค์บ๋, ๊ฐ๋จํ I/O ์ฅ์น ์ฒดํฌ ๋ฑ์์ ์ฌ์ฉ๋ฉ๋๋ค.
๐ฎ TLB, MMU ๋ฅผ ์์๋์?
- TLB (translation look a side buffer ๋ณํ ์์ธ ๋ฒํผ) : ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ก ๋ณํํ๋ ๊ณผ์ ์ ๊ฐ์ํํ๊ธฐ ์ํ ํน์ํ ์ข ๋ฅ์ ์บ์์ ๋๋ค. ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ์ ์ฃผ์์ ๋ํ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ง์ฝ TLB Miss, Page Not Present ๋ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ์๋ ์๋ค๋ ๋ป์ด๋ ๋์คํฌ์์ Swap-in ํด์ค์ผ ํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ์ Swap-in ํ ํ ํ์ด์ง ํ ์ด๋ธ์ ์ ๋ฐ์ดํธ ํด์ฃผ๊ณ , TLB๋ฅผ ์ ๋ฐ์ดํธํด์ ๋ฌผ๋ฆฌ์ฃผ์์ ์ ๊ทผํ ์ ์์ต๋๋ค.
- MMU (Memory Management Unit) : CPU๊ฐ ํ๋ก์ธ์ค๋ฅผ ์คํํ ๋ ์ฌ์ฉํ๋ ์ฃผ์ ๊ฐ๊ณผ ์ค์ ์ฃผ์ ๊ฐ์ด ๋ค๋ฅด๋ฏ๋ก ๋ ผ๋ฆฌ ์ฃผ์๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์๋ก ๋ณํํด ์ค์ผ ํ๋๋ฐ, ์ด๋ฌํ ๋์์ ํ๋ ํ๋์จ์ด ์ฅ์น๋ฅผ MMUT ๋ผ๊ณ ํฉ๋๋ค. MMU๋ CPU์ ์์นํ๋ฉฐ, CPU์์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๊ธฐ ์ ์ MMU๋ฅผ ๊ฑฐ์ณ ๋ ผ๋ฆฌ ์ฃผ์์ ํด๋นํ๋ ๋ฌผ๋ฆฌ ์ฃผ์๋ฅผ ์ป์ต๋๋ค. MMU๋ ๋ณดํธํด์ผ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ํ ์ ๊ทผ์ ์ ํํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณดํธํ๋ ์ญํ ๋ ํฉ๋๋ค.์์ฐํ ๋ฐ์ง๋ฉด TLB๋ MMU ๋ด๋ถ์ ๋ฉ๋ชจ๋ฆฌ์ ๋๋ค. MMU๋ ๊ฐ์์ฃผ์, ๋ฌผ๋ฆฌ์ฃผ์ ๋ณํ ์์ ์ ์ ์ฒด๋ฅผ ์ฃผ๋ํฉ๋๋ค.
๐ฎ ํ๋ก์ธ์ค, ์ค๋ ๋์ ์ฐจ์ด์ ์ ์ค๋ช ํด์ฃผ์ธ์.
- ํ๋ก์ธ์ค๋ ์คํ ์ค์ธ ํ๋์ ํ๋ก๊ทธ๋จ์ ์๋ฏธํ๋ฉฐ ์คํ์ ๋จ์๋ผ๊ณ ํ ์ ์์ต๋๋ค.
- ๋ฐ๋ฉด์ ์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ํ๋ฆ์ ๋จ์๋ฅผ ์๋ฏธํฉ๋๋ค.
- ๊ทธ๋์ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์ง๋ง, ์ค๋ ๋๋ ์คํ ์์ญ๋ง ๋ ๋ฆฝ์ ์ด๊ณ , ๊ทธ ์ธ ์์ญ์ ๋ค๋ฅธ ์ค๋ ๋์ ๊ณต์ ํฉ๋๋ค.
๐ฎ ํ๋ก์ธ์ค ๋๊ธฐํ๊ฐ ๋ฌด์์ธ๊ฐ์?
ํ๋ก์ธ์ค ๋๊ธฐํ๋ ์ฌ๋ฌ ํ๋ก์ธ์ค ๋๋ ์ค๋ ๋๊ฐ ํ๋์ ๊ณต์ ์์์ ์ ๊ทผํด๋ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๊ณ ์ ๊ทผ ์์์ ๋ค๋ผ์ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ์ฝ๋ ์์ญ์ ์๊ณ ์์ญ์ด๋ผ๊ณ ํ๋ฉฐ, ์๊ณ ์์ญ์ ๋ํ ์ํธ๋ฐฐ์ ๊ธฐ๋ฒ์ด ์ ์ด๋ค์ ธ์ผ, ํ๋ก์ธ์ค ๋๊ธฐํ๋ฅผ ํ ์ ์์ต๋๋ค. ์ํธ๋ฐฐ์ ๊ธฐ๋ฒ์ผ๋ก๋ ๋ฎคํ ์ค์ ์ธ๋งํฌ์ด๊ฐ ์์ต๋๋ค.
๐ฎ ์ค๋ ๋๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋น๋๋ ๊ฒ์ด ๋ฌด์์ผ๊น์?
์ค๋ ๋๋ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ ์์ญ๊ณผ PC Register ๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค. ๊ทธ ์ด์ ๋ ์ค๋ ๋์ ์ ์์ ์ปจํ ์คํธ ์ค์์นญ์ ์์ต๋๋ค.
๋ ๋ฆฝ์ ์ผ๋ก ์คํ์ ๊ฐ๋ ์ด์ : ๋ ๋ฆฝ์ ์ธ ํจ์ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ฆ, ํ๋ก์ธ์ค ๋ด์ ๋ ๋ฆฝ์ ์ธ ์คํ ํ๋ฆ์ ๋ง๋ค๊ธฐ ์ํด ์ค๋ ๋๋ง๋ค ์คํ ์์ญ์ ๊ฐ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๋ฆฝ์ ์ผ๋ก PC Register๋ฅผ ๊ฐ๋ ์ด์ : PC Register ๊ฐ์ ์ค๋ ๋๊ฐ ๋ช ๋ น์ด๋ฅผ ์ด๋๊น์ง ์ํํ๋์ง๋ฅผ ๋ํ๋ ๋๋ค. ์ค๋ ๋๋ CPU๋ฅผ ํ ๋น๋ฐ์๋ค๊ฐ, ์ค์ผ์ค๋ฌ์ ์ํด ์ ์ ๋นํด ์ปจํ ์คํธ ์ค์์นญ์ด ์ผ์ด๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ค์ ํด๋น ์ค๋ ๋๊ฐ ์คํ๋ ๋ ์ด๋๊น์ง ์คํ๋์๋์ง ์์์ผ ํ๋ฏ๋ก ๋ ๋ฆฝ์ ์ผ๋ก PC Register ๊ฐ์ ๊ฐ๊ฒ ๋ฉ๋๋ค.
๐ฎ ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์์ ํ ํญ์ ์ค๋ฅ๊ฐ ์๊ธฐ๋๋ผ๋, ๋ค๋ฅธ ํญ์ ์ํฅ์ ๋ผ์น์ง ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ฐ๊ฐ์ ํฌ๋กฌ ํญ์ ํ๋ก์ธ์ค์ผ๊น์? ์ฐ๋ ๋์ผ๊น์?
ํฌ๋กฌ ํญ์ด ์ฐ๋ ๋๋ผ๋ฉด, ํ ํฌ๋กฌ ํญ์์ ์ค๋ฅ๊ฐ ์๊ธฐ๋ฉด ๋ค๋ฅธ ํฌ๋กฌ ํญ์๋ ์ํฅ์ด ๊ฐ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํ ํญ์ ์ค๋ฅ๊ฐ ์๊ธฐ๋๋ผ๋ ๋ค๋ฅธ ํญ์ ์ํฅ์ ๋ผ์น์ง ์๋๋ค๋ ํน์ฑ์ ์ํด, ํฌ๋กฌ ํญ์ ๋ณ๊ฐ์ ํ๋ก์ธ์ค์ธ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๐ฎ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์๋์?
๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋, ํ๋ก์ธ์ค ์ ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ์ฌ๋ผ์ค์ง ์๋๋ผ๋ ์คํ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ธฐ๋ฒ์ ๋๋ค. ๊ฐ์๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ค๋ฉด ์คํ๋๋ ์ฝ๋์ ์ ๋ถ๋ฅผ ์ ์ฌํด์ผ ํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฉ๋๋ณด๋ค ํฐ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์์ต๋๋ค.
์ฆ, ๋ชจ๋ ํ๋ก์ธ์ค์๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ธฐ์๋ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๊ฐ ํ๊ณ๊ฐ ์์ด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ํ๋ก์ธ์ค์์ ์ฌ์ฉํ๋ ๋ถ๋ถ๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๊ณ , ๋๋จธ์ง๋ ๋์คํฌ์ ๋ณด๊ดํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
๋ฐ๋ผ์ ํ๋ก์ธ์ค ์ ์ฒด๊ฐ ์๋ ์ผ๋ถ๋ง ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ์ฎ๊ธฐ๊ณ ๋๋จธ์ง๋ ๋ณด์กฐ ๊ธฐ์ต์ฅ์น์ธ ๋์คํฌ์ ์ฎ๊ฒจ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์์ญ๋ณด๋ค ๋ ํฐ ์์ญ์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํ๋ ๋ฐฉ์์ ๋๋ค.
๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋์์ ๋ง์ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๊ณ , ์๋ต์๊ฐ์ ์ ์งํ๋ฉด์ CPU ์ด์ฉ๋ฅ ๊ณผ ์ฒ๋ฆฌ์จ์ ๋์ผ ์ ์์ต๋๋ค. ใ ก๋จ์ ์ผ๋ก๋ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ์ ๊ตฌ๋๋ณด๋ค๋ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
+ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํด ํ๋ก์ธ์ค๋ค์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋๋ก ํ๊ณ , ํ๋ก์ธ์ค๋ค์ ์ด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํด ํต์ ํ ์ ์์ต๋๋ค. ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์ ๋ก ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ๋ผ๊ฐ์๊ณ , ๋ชจ๋ ํ๋ก์ธ์ค์๊ฒ ๊ณต์ ๋๊ฒ ๋ฉ๋๋ค.
ํ๋ก์ธ์ค๋ฅผ ์ฝ์ด๋ค์ผ ๋ ๋ฏธ๋ฆฌ ์ ํด์ง ํฌ๊ธฐ์ ๋จ์๋ฅผ ํ์ด์ง๋ผ๊ณ ํฉ๋๋ค. ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ Page Fault๊ฐ ์ผ์ด๋๋ฉด ํ์ด์ง๋ฅผ ๊ต์ฒดํฉ๋๋ค. ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ์๊ตฌ ํ์ด์ง์ด ์์ต๋๋ค.
๐ฎ ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ด ๋ญ๊ฐ์? ์์ธํ ์ค๋ช ํด์ฃผ์ธ์.
ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ ๋ชฉํ๋ ํ์ด์ง ๊ต์ฒด๊ฐ ์ต๋ํ ์ ๊ฒ ์ผ์ด๋๋ ๊ฒ์ด๋ค. ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ถ์กฑํด์ ์ด๋ฏธ ์คํ์ค์ธ ํ๋ก์ธ์ค์ ํ์ด์ง๋ฅผ ๋์คํฌ๋ก ์ค์์์ํ๊ณ ํ์ํ ํ๋ก์ธ์ค์ ํ์ด์ง๋ฅผ ๋์คํฌ์์ ์ค์์ธํ๋ ๊ฒ์ด๋ค. ํ์ด์ง ํดํธ๋ ์ผ๋ฐ์ ์ผ๋ก ๋๋ฆฐ ๋์คํฌ ์ ๊ทผ์ด ํ์ํ๊ธฐ ๋๋ฌธ์, ์์คํ ์ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ๋ฐ๋ผ์, ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ ์ ํ ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ ํฌ๊ฒ 3๊ฐ์ง๊ฐ ์๋๋ฐ์,
๋ณดํธ์ ์ผ๋ก๋ LRU๊ฐ ์บ์ ํํธ์จ์ด ๋ ๋์ ์ ์์ด์ ๋ง์ด ์ฐ์ธ๋ค๊ณ ํฉ๋๋ค.
- FIFO (First In First Out) : ์ค๋๋ ํ์ด์ง์ผ์๋ก ์ฌ์ฉ๊ฐ๋ฅ์ฑ ์์ผ๋ ๋ด๋ณด๋ด์. ๊ฐ์ฅ ์ค๋ ์ ์ ์บ์์ ๋ค์ด์จ ํญ๋ชฉ์ ๋จผ์ ์ ๊ฑฐํ๋ ๋ฐฉ์์ ๋๋ค.
- LRU (Least Recently Used) : ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉ๋์ง ์์ ๊ฑธ ๋ด๋ณด๋ด์. ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉ๋์ง ์์ ํญ๋ชฉ์ ๋จผ์ ์ ๊ฑฐํ๋ ๋ฐฉ์์ ๋๋ค.
- LFU (Least Frequently Used) : ์ฐธ์กฐํ์ ๊ฐ์ฅ ์ ์ ๊ฑธ ๋ด๋ณด๋ด์
๐ฎ FIFO, LRU์ ์ฐจ์ด์ ์ด ๋ญ๊น์?
- FIFO๋ ๋๊ฐ ํ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ฉ๋๋ค. ์ ํญ๋ชฉ์ด ๋ค์ด์ค๋ฉด ํ์ ๋ค์ ์ถ๊ฐ๋๊ณ , ๊ต์ฒด๊ฐ ํ์ํ ๋๋ ํ์ ์๋ถ๋ถ์์ ํญ๋ชฉ์ด ์ ๊ฑฐ๋ฉ๋๋ค. ์ฌ์ฉ ๋น๋๋ ์ต๊ทผ ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ๊ณ ๋ คํ์ง ์์ต๋๋ค. ์ค๋๋ ๋ฐ์ดํฐ๊ฐ ์์ฃผ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ์๋ ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค.
- LRU ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ทผ๋ ๋ฐ์ดํฐ์ ์์๋ฅผ ์ถ์ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ๋งํฌ๋ ๋ฆฌ์คํธ, ํด์ ๋งต ๋ฑ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ตฌํ์ด ๋ณต์กํ๊ณ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค. ์ค์ ์ฌ์ฉ ํจํด์ ๋ ์ ๋ฐ์ํ ์ ์์ด FIFO๋ณด๋ค ํจ์จ์ ์ผ ์ ์์ต๋๋ค. LRU๋ ์ฌ์ฉ ํจํด์ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์, ์ผ๋ฐ์ ์ผ๋ก FIFO๋ณด๋ค ์บ์ ํํธ์จ์ด ๋ ๋์ ์ ์์ต๋๋ค.
๐ฎ ์๊ตฌ ํ์ด์ง์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
ํ๋ ์ด์์ฒด์ ์์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ํ๋ก์ธ์ค์์ ํ์ํ ํ์ด์ง๋ง ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๋ ๋ฐฉ์์ธ๋ฐ์. ํ์ด์ง๋ฅผ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ์ง ์๊ณ ์ด๊ธฐ์ ํ์ํ ์์ญ๋ง ๋ก๋ํ ํ, ๋ค๋ฅธ ์์ญ์ ์์ฒญ์ด ์ฌ ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํฉ๋๋ค.
์ฝ๊ฒ ๋งํด์ ํ์ด์ง ๊ธฐ๋ฒ๊ณผ ์ค์ํ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
- ์๊ตฌ ํ์ด์ง์ ํ๋ก๊ทธ๋จ ์คํ ์์ ์์ ํ๋ก๊ทธ๋จ ์ ์ฒด๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๋ ๋์ , ์ด๊ธฐ์ ํ์ํ ๊ฒ๋ค๋ง ์ ์ฌํ๋ ์ ๋ต์ ์๋ฏธํฉ๋๋ค. ํ๋ก์ธ์ค์์ ํ์ํ (์๊ตฌํ๋) ํ์ด์ง๋ง ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๋ ๋ฐฉ์์ ๋๋ค. ํ์ด์ง๋ฅผ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ์ง ์๊ณ ์ด๊ธฐ์ ํ์ํ ์์ญ๋ง ๋ก๋ํ ํ, ๋ค๋ฅธ ์์ญ์ ์์ฒญ์ด ์ฌ ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํฉ๋๋ค.
- ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ํ์ด์ง ๊ฐ๋ ์ ํ์ฉํด ๊ด๋ฆฌ๋ฉ๋๋ค.
- ํ๋ก๊ทธ๋จ์ ์คํํ๋ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํ์ํ ํ์ด์ง๊ฐ ์์ ๋ ์ด๋ฅผ ํ์ด์ง ํดํธ ๋ผ๊ณ ํฉ๋๋ค. ํ์ด์ง ํดํธ๊ฐ ๋ฐ์ํ๋ฉด ๋์คํฌ์์ ํ์ํ ํ์ด์ง๋ฅผ ๋์คํฌ์์ ์ค์ ์ธํฉ๋๋ค. ์ด๋ ํ์ด์ง์ ํด๋นํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์๋์ง๋ ํ์ด์ง ํ ์ด๋ธ๋ก ํ์ ํ ์ ์์ต๋๋ค. ํ์ด์ง ํดํธ๊ฐ ์์ฃผ ๋ฐ์ํ๋ฉด ์ค๋ ์ฑ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
๐ฎ ํ์ด์ง ํดํธ๊ฐ ๋ฌด์์ธ๊ฐ์? ์ ์ฐจ๋ ์์๋์?
ํ์ด์ง ํดํธ(page fault)๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์คํ ์์ ํ๋ก๊ทธ๋จ์ด ํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ํ์ด์ง์ ์ ๊ทผํ๋ ค๊ณ ํ ๋ ๋ฐ์ํ๋ ์ํฉ์ ๋๋ค.
- ํ์ด์ง ํดํธ ๊ฐ์ง:
- ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ํ์ด์ง์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด, ํ๋์จ์ด๋ ํ์ด์ง ํดํธ๋ฅผ ๊ฐ์งํ๊ณ ์ด์์ฒด์ ์ ์ธํฐ๋ฝํธ๋ฅผ ๋ณด๋ ๋๋ค.
- ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด ์คํ:
- ์ด์์ฒด์ ๋ ํ์ด์ง ํดํธ ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด (Page Fault ISR) ์ ์คํํ์ฌ ์ด๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ด ๊ณผ์ ์์ ๋จผ์ ํดํธ๊ฐ ์ ํจํ์ง ํ์ธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ๊ทผํ๋ ค๋ ์ฃผ์๊ฐ ์ ํจ ๋ฒ์ ๋ด์ ์๋์ง, ํด๋น ํ์ด์ง์ ๋ํ ๊ถํ์ด ์๋์ง ๋ฑ์ ๊ฒ์ฌํฉ๋๋ค.
- ์ค์ ๊ณต๊ฐ์์ ํ์ด์ง ์ฐพ๊ธฐ:
- ์ ํจํ ํ์ด์ง ํดํธ์ ๊ฒฝ์ฐ, ์ด์์ฒด์ ๋ ํด๋น ํ์ด์ง๋ฅผ ๋์คํฌ์ ์ค์ ๊ณต๊ฐ(swap space)์์ ์ฐพ์ต๋๋ค. ์ค์ ๊ณต๊ฐ์ ํ๋ ๋๋ผ์ด๋ธ์ ์ผ๋ถ๋ก, ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ผ๋ถ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ์ ๊ณต๊ฐ ํ๋ณด:
- ์ด์์ฒด์ ๋ ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ์์ ํ์ด์ง๋ฅผ ๋ก๋ํ ๊ณต๊ฐ์ ํ๋ณดํฉ๋๋ค. ํ์ํ ๊ฒฝ์ฐ, ๋ค๋ฅธ ํ์ด์ง๋ฅผ ์ค์ ์์(swap out)ํ์ฌ ๋์คํฌ๋ก ์ฎ๊ฒจ ๊ณต๊ฐ์ ๋ง๋ญ๋๋ค.
- ๋์คํฌ์์ ํ์ด์ง ๋ก๋:
- ํ์ํ ํ์ด์ง๋ฅผ ๋์คํฌ์์ ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋ํฉ๋๋ค. ์ด ๊ณผ์ ์ ์๋์ ์ผ๋ก ์๊ฐ์ด ๋ง์ด ์์๋๋ ์์ ์ ๋๋ค.
- ํ์ด์ง ํ
์ด๋ธ ์
๋ฐ์ดํธ:
- ํ์ด์ง๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋๋ฉด, ์ด์์ฒด์ ๋ ํ์ด์ง ํ ์ด๋ธ์ ์ ๋ฐ์ดํธํ์ฌ ์๋ก์ด ํ์ด์ง์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ฐ์ํฉ๋๋ค.
- ํ๋ก์ธ์ค ์ฌ๊ฐ:
- ๋ชจ๋ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด, ์ด์์ฒด์ ๋ ์๋์ ํ๋ก์ธ์ค๋ฅผ ์ฌ๊ฐํฉ๋๋ค. ํ๋ก์ธ์ค๋ ์ด์ ํ์ํ ํ์ด์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๐ฎ ์ค๋ ์ฑ์ด ๋ฌด์์ธ๊ฐ์?
- ์ค๋ ์ฑ์ด๋ ํ์ด์ง ๋ถ์ฌ์จ์ด ๋์ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค. ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ๊ฒฝ์์ ๋ค์ค ํ๋ก๊ทธ๋๋ฐ ์ ๋๊ฐ ๋์์ง๋ฉด์ ํ์ด์ง ํดํธ๊ฐ ๋น๋ฒํ ๋ฐ์ํด ์ด๋ ํ๊ณ๊ฐ ์ง๋๋ฉด CPU ์ด์ฉ๋ฅ ์ด ์คํ๋ ค ๋ฎ์์ง๋ ์ฆ์ ์ ์๋ฏธํ๋๋ฐ์, ์ฆ, ์ค์ ์์คํ ์ด ์๋๋๋ ์๊ฐ๋ณด๋ค ํ์ด์ง ๊ต์ฒด๊ฐ ๋น๋ฒํ ์ผ์ด๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณ ๊ฐ๋์์ง๋ง, ํ๋ก์ธ์ค๋ฅผ ์คํํด์ผ ํ๊ธฐ ๋๋ฌธ์ Swap์ด ํ๋ฐํด์ง๋๋ค. ๋ฐ๋ผ์ CPU ์ด์ฉ๋ฅ ์ด ํ๋ฝํ๊ณ , OS๋ CPU ์ด์ฉ๋ฅ ์ด ๋ฎ์ผ๋ฏ๋ก ์คํ๋ ค ํ๋ก์ธ์ค๋ฅผ ์ถ๊ฐํ๊ฒ ๋๋ ์ค๋ ์ฑ ํ์์ด ๋ฐ์ํฉ๋๋ค. ์ด๋ฅผ ํด์ํ์ง ๋ชปํ๋ฉด Out Of Memory ์ํ๋ก ํ๋จํด ์ค์๋๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ๋ก ์ข ๋ฃํ๊ฒ ํฉ๋๋ค.
- ์ด๋ฅผ ํด์ ํ๊ธฐ ์ํด์ Working Set ์๊ณ ๋ฆฌ์ฆ๊ณผ Page Fault Frequency ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค.
- Working Set๋ ์ง์ญ์ฑ (์บ์์ ๊ทธ ์ง์ญ์ฑ ๋ง์ต๋๋ค) ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฃผ ์ฌ์ฉํ๋ ํ์ด์ง๋ฅผ ์ ์ฅํด ๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋๋ถ๋ถ์ ํ๋ก์ธ์ค๊ฐ ํน์ ํ์ด์ง๋ง ์ง์ค์ ์ผ๋ก ์ฐธ์กฐํ๋ ํน์ฑ์ ์ด์ฉ, ์ผ์ ์๊ฐ ๋์ ์ฐธ์กฐ๋๋ ํ์ด์ง ๊ฐ์๋ฅผ ํ์ ํ๊ณ , ๊ทธ ํ์ด์ง ์๋งํผ ์ฌ๋ถ ํ๋ ์์ด ํ๋ณด๋๋ฉด ๊ทธ ๋ ํ์ด์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ์ ๋๋ค.
- Page Fault Frequency : Page Fault ํผ์ผํธ์ ์ํ๊ณผ ํํ์ ๋ก๋๋ค. ์ํ์ ๋์ผ๋ฉด ํ์ด์ง์๊ฒ ์ง๊ธํ๋ ํ๋ ์ ๊ฐ์๋ฅผ ๋๋ฆฌ๊ณ , ํํ์ ๋์ผ๋ฉด ์ง๊ธ ํ๋ ์ ๊ฐ์๋ฅผ ์ค์ ๋๋ค.
๐ฎ ํ๋ก์ธ์ค์ ์ข ๋ฅ๋ ๋ฌด์์ด ์๋์ง ์ค๋ช ํด ์ฃผ์ธ์.
- ์์ ํ๋ก์ธ์ค
- fork๋ก ์์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ ์ํ, ๋ถ๋ชจ์ ๋ฐ์ดํฐ, ํ, ์คํ, PCB ๋ณต์ฌ
- ๋ฐ๋ชฌ ํ๋ก์ธ์ค
- ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋์ํ๋ฉด์ ํน์ ํ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ํ๋ก์ธ์ค
- ๊ณ ์ ํ๋ก์ธ์ค
- ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๋จผ์ ์ข ๋ฃ๋์ด ๊ณ ๋ฆฝ๋ ์์ ํ๋ก์ธ์ค
- ์ข๋น ํ๋ก์ธ์ค
- ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋์์์๋ ๋ถ๊ตฌํ๊ณ , ๋ถ๋ชจ ํ๋ก์ธ์ค๋ก๋ถํฐ ์์ ์ข ๋ฃ์ ๋ํ ์น์ธ์ ๋ฐ์ง ๋ชปํ ํ๋ก์ธ์ค
๐ฎ ์ฐ๋ ๋๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋นํ๋ 2๊ฐ์ง์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
์ฐ๋ ๋๋, ๋ ๋ฆฝ์ ์ผ๋ก ์คํ ์์ญ๊ณผ PC Register๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค. ๊ทธ ์ด์ ๋ ์ฐ๋ ๋์ ์ ์์ ์ปจํ ์คํธ ์ค์์นญ์ ์์ต๋๋ค.
1) ๋ ๋ฆฝ์ ์ผ๋ก ์คํ ์์ญ์ ๊ฐ๋ ์ด์ :
์คํ ์์ญ์ ํจ์์ ์คํ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ๋ ๋ฆฝ์ ์ผ๋ก ์คํ์ ๊ฐ๋๋ค๋ ๊ฒ์ ๊ณง ๋ ๋ฆฝ์ ์ผ๋ก ํจ์ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ฆ, ํ๋ก์ธ์ค ๋ด์ ๋ ๋ฆฝ์ ์ธ ์คํ ํ๋ฆ์ ๋ง๋ค๊ธฐ ์ํด ์ฐ๋ ๋๋ง๋ค ์คํ ์์ญ์ ๊ฐ์ต๋๋ค.
2) ๋ ๋ฆฝ์ ์ผ๋ก PC Register๋ฅผ ๊ฐ๋ ์ด์ :
PC Register ๊ฐ์, ์ฐ๋ ๋๊ฐ ๋ช ๋ น์ด๋ฅผ ์ด๋๊น์ง ์ํํ๋ ์ง๋ฅผ ๋ํ๋ ๋๋ค. ์ฐ๋ ๋๋ CPU๋ฅผ ํ ๋น๋ฐ์๋ค๊ฐ, ์ค์ผ์ค๋ฌ์ ์ํด์ ์ ์ ๋นํด ์ปจํ ์คํธ ์ค์์นญ์ด ์ผ์ด๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ค์ ํด๋น ์ฐ๋ ๋๊ฐ ์คํ๋ ๋ ์ด๋๊น์ง ์คํ์ด ๋์๋์ง ์์์ผ ํ๋ฏ๋ก ๋ ๋ฆฝ์ ์ผ๋ก PC Register ๊ฐ์ ๊ฐ๊ฒ ๋ฉ๋๋ค
๐ฎ ์ปจํ ์คํธ ์ค์์นญ์ ๋ํด ์ค๋ช ํ๊ณ , ์ ์ปจํ ์คํธ ์ค์์นญ์ด ํ์ํ์ง ์ค๋ช ํด ์ฃผ์ธ์.
์ปจํ ์คํธ ์ค์์นญ์ CPU๊ฐ ์ฒ๋ฆฌ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. CPU๋ ํ๋์ ํ๋ก์ธ์ค๋ง ์ฒ๋ฆฌํ ์ ์์ด์, ๋ฉํฐ ํ๋ก์ธ์ค ํ๊ฒฝ์์๋ ์ปจํ ์คํธ ์ค์์นญ์ด ๋ฐ์ํฉ๋๋ค. CPU ์ค์ผ์ค๋ฌ์ ์ํด ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด, ์คํ ์ํ์ ํ๋ก์ธ์ค๊ฐ ์ค๋น ๋๋ ๋๊ธฐ ์ํ๋ก ์ ํ๋๊ณ , ๋ค์์ ์คํํ ํ๋ก์ธ์ค๊ฐ ์คํ ์ํ๋ก ์ ํ๋ฉ๋๋ค. ์ด๋ ๋ ์ง์คํฐ์ ์ ์ฅ๋ ํ๋ก์ธ์ค ์ ๋ณด๊ฐ ๋ฐ๋๋ฉด์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
๊ณผ์ :
1) CPU๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ ํํ๋ฉด ์์คํ ์ ํ๋ก์ธ์ค์ ์ํ๋ฅผ PCB์ ์ ์ฅํฉ๋๋ค
2) ๋๊ธฐ์ด์์ ๋ค์ ํ๋ก์ธ์ค๋ฅผ ์ ํํ๊ณ ํด๋น ํ๋ก์ธ์ค์ PCB๋ฅผ ๋ณต์ํฉ๋๋ค.
3) PCB์ ํ๋ก๊ทธ๋จ ์นด์ดํฐ(๋ ์ง์คํฐ)๊ฐ ๋ก๋๋์ด ์ด์ ๊น์ง ์์ ํ ๊ณณ์ ์ง์ ์ผ๋ก ๋์๊ฐ ์ ํํ ํ๋ก์ธ์ค์ ์์ ์ ์ด์ด์ ํฉ๋๋ค.
๐ฎ ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก (PCB)์ ๋ํด ๋ ์์ธํ ์ค๋ช ํด ์ฃผ์ธ์.
- ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก(Process Control Block, ์ค์ฌ์ PCB)์ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ ๋ณด๋ฅผ ํฌํจํ๋ OS ์ปค๋์ ์๋ฃ ๊ตฌ์กฐ์ ๋๋ค.
- OS๋ ํ๋ก์ธ์ค์ ์์ฑ๊ณผ ๋์์ ๊ณ ์ ํ PCB ๋ฅผ ์์ฑํฉ๋๋ค.
- PCB๊ฐ ํ๋ก์ธ์ค์ ์ค์ํ ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์, ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ๋ณดํธ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์์ ์์นํฉ๋๋ค.
- ํ๋ก์ธ์ค๋ ์ํํ ์ฐจ๋ก๊ฐ ๋๋ฉด, CPU๋ฅผ ํ ๋น๋ฐ์ ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค. ์์ ์ ์ฒ๋ฆฌํ๋ ๋์ค ํ๋ก์ธ์ค์ ์๊ฐ์ด ๋ชจ๋ ๊ฒฝ๊ณผ๋๊ฑฐ๋ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ ๋ฑ์ ํ๋ก์ธ์ค ์ ํ์ด ๋ฐ์ํ๋ฉด, ์งํํ๋ ์์ ์ ์ ์ฅํ๊ณ CPU ๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ๋, ์ํํ๋ ํ๋ก์ธ์ค ๊ด๋ จ ๋ฐ์ดํฐ๋ค์ PCB ์ ์ ์ฅํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ ํ๋ก์ธ์ค์ ์ํ ์ฐจ๋ก๊ฐ ์์ CPU ๋ฅผ ํ ๋น๋ฐ๊ฒ ๋๋ฉด, PCB ์ ์ ์ฅ๋์ด์๋ ๋ด์ฉ์ ๋ถ๋ฌ์ ์ด์ ์ ์ข ๋ฃ๋๋ ์์ ๋ถํฐ ๋ค์ ์์ ์ ์ํํฉ๋๋ค. ์ด๋ ๊ฒ ์ฌ์ฉํ๋ ํ๋ก์ธ์ค์ ๋ฐ์ดํฐ๋ฅผ PCB์ ์ ์ฅํ๊ณ , ์คํํ ํ๋ก์ธ์ค์ ๋ฐ์ดํฐ๋ฅผ PCB์์ ๋ถ๋ฌ์ค๋ ๊ณผ์ ์ Context Switching์ด๋ผ๊ณ ํฉ๋๋ค.
- PCB ์ ์ ์ฅ๋๋ ์ ๋ณด๋ ์๋์ ๊ฐ์ต๋๋ค.
- ํ๋ก์ธ์ค ์๋ณ์ (Process ID, PID) : ํ๋ก์ธ์ค ์๋ณ๋ฒํธ
- ํ๋ก์ธ์ค ์ํ : `new`, `ready`, `running`, `waiting`, `terminated` ๋ฑ์ ์ํ๋ฅผ ์ ์ฅ
- PC (ํ๋ก๊ทธ๋จ ์นด์ดํฐ) : ํ๋ก์ธ์ค๊ฐ ๋ค์์ ์คํํ ๋ช ๋ น์ด์ ์ฃผ์
- CPU ๋ ์ง์คํฐ
- CPU ์ค์ผ์ฅด๋ง ์ ๋ณด : ํ๋ก์ธ์ค์ ์ฐ์ ์์, ์ค์ผ์ค ํ์ ๋ํ ํฌ์ธํฐ ๋ฑ
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ณด : ํ์ด์ง ํ ์ด๋ธ ๋๋ ์ธ๊ทธ๋จผํธ ํ ์ด๋ธ ๋ฑ๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ํฌํจ
- ์ ์ถ๋ ฅ ์ํ ์ ๋ณด : ํ๋ก์ธ์ค์ ํ ๋น๋ ์ ์ถ๋ ฅ ์ฅ์น๋ค๊ณผ ์ด๋ฆฐ ํ์ผ ๋ชฉ๋ก
- ์ด์นด์ดํ ์ ๋ณด : ์ฌ์ฉ๋ CPU ์๊ฐ, ์๊ฐ์ ํ, ๊ณ์ ๋ฒํธ ๋ฑ
๐ฎ ์ธํฐ๋ฝํธ๊ฐ ๋ฌด์์ธ๊ฐ์?
Interrupt(์ธํฐ๋ฝํธ)๋ ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ ์๋ ๋์ค์ ์ ์ถ๋ ฅ ์์ฒญ ํน์ ์์ธ ์ํฉ์ ์ฒ๋ฆฌํด์ผ ํ๋ฉด ์คํํ๋ ํ๋ก๊ทธ๋จ์ ๋ฉ์ถ๊ณ CPU๊ฐ ํด๋น ์์ ์ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๐ฎ ๋ฉ๋ชจ๋ฆฌ์ ์ข ๋ฅ์ ๋ํด ์ค๋ช ํ๊ณ , ์ข ๋ฅ๊ฐ ์ฌ๋ฌ๊ฐ์ง์ธ ์ด์ ์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
CPU์ ๊ฐ๊น์ด ์์๋๋ก ๋ ์ง์คํฐ, ์บ์, ์ฃผ๊ธฐ์ต์ฅ์น, ๋ณด์กฐ๊ธฐ์ต์ฅ์น๊ฐ ์์ต๋๋ค.
๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ์ ์ข ๋ฅ๊ฐ ๋ง์ ์ด์ ๋, ์ ๊ทผ ์๋์ ๋ฐ๋ฅธ ์ฐจ์ด๋ฅผ ๋๊ธฐ ์ํด์์ ๋๋ค.
(๋ ์ง์คํฐ > ์บ์ > ์ฃผ๊ธฐ์ต์ฅ์น > ๋ณด์กฐ๊ธฐ์ต์ฅ์น)
๐ฎ ์๋ธ๋ฃจํด์ ์์๋์?
์๋ธ๋ฃจํด (ํจ์ ๋๋ ๋ฉ์๋๋ผ๊ณ ๋ ํจ) ์ ํ๋ก๊ทธ๋จ ๋ด์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋ ๋ธ๋ก์ ๋๋ค. ๊ฐ์ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ฉฐ, ์ปจํ ์คํธ ์ค์์นญ์ด ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์์ ์ ์ํด ์ฌ์ฉ๋๋ฉฐ, ์ด์์ฒด์ ์ ์ง์ ์ ์ธ ๊ด๋ฆฌ ์์ด ์คํ๋ฉ๋๋ค.
C++์์ ์๋ธ๋ฃจํด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ํจ์(Function)๋ฅผ ์ ์ํ๊ณ ํธ์ถํ๋ ๊ฒ์ ๋๋ค. ํจ์๋ ํน์ ์์ ์ ์ํํ๋ ์ฝ๋ ๋ธ๋ก์ผ๋ก, ํ์ํ ๋๋ง๋ค ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐ฎ ํ๋ก์ธ์ค์ ์ ์ด ๋ช ๋ น์ ์๋๋๋ก ์๋ ค์ฃผ์ธ์.
ํ๋ก์ธ์ค ์ ์ด ๋ช ๋ น์ ์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค์ ์์ฑ, ์คํ, ์ข ๋ฃ ๋ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ช ๋ น๋ค์ ๋๋ค. ์๋ฅผ ๋ค์ด, `fork()`, `exec()`, `wait()`, `exit()` ๋ฑ์ด ์ด์ ํด๋นํฉ๋๋ค. ์ด ๋ช ๋ น๋ค์ ํ๋ก์ธ์ค์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , ๋ค์ค ํ๋ก์ธ์ค ํ๊ฒฝ์์์ ์์ ๊ด๋ฆฌ์ ์กฐ์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
๐ฎ fork() ์ vfork() ๋ ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ์?
`fork()`
- fork()๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ๋ณธ์ ์์ฑํ์ฌ ์๋ก์ด ์์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ญ๋๋ค.
- ์ด๋ก ์ธํด ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
- ์์ ํ๋ก์ธ์ค ์์ฑ ํ์๋ ๋ถ๋ชจ์ ์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ์คํ๋ฉ๋๋ค.
- ์ด ํจ์๋ฅผ ํธ์ถํ๋ฉด, ๋ถ๋ชจ ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค์ PID ๊ฐ์, ์์ ํ๋ก์ธ์ค๋ 0 ์ ๋ฐํํฉ๋๋ค.
`vfork()` โ๐ป
- vfork()๋ fork()์ ์ ์ฌํ์ง๋ง, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณต์ฌํ์ง ์๊ณ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํฉ๋๋ค.
- ์์ ํ๋ก์ธ์ค๋ exec() ์์คํ ์ฝ์ ํธ์ถํ๊ฑฐ๋ exit() ์ ํธ์ถํ ๋๊น์ง. ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์คํ์ ์ค๋จ์ํต๋๋ค.
- ์ฃผ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์โ๐ป์ํค๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
๐ฎ ๋์์ฑ, ๋ณ๋ ฌ์ฑ์ด ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ์?
๋์์ฑ์ ๋ฉํฐ ํ๋ก๊ทธ๋๋ฐ (Multi-Programming)์์ ๋์จ ๊ฐ๋ ์ผ๋ก, ์ฃผ๊ธฐ์ต์ฅ์น์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ์ ์ฌํด์ Context Switching์ ํตํด ๋์์ ์คํ๋๋ ๊ฒ ์ฒ๋ผ ๋ณด์ด๊ฒ ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ค์ ๋ก๋ ๋์์ ์คํ๋๋ ๊ฒ์ด ์๋๋ผ, ๋ฒ๊ฐ์ ์คํํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ปจํ ์คํธ ์ค์์นญ์ผ๋ก ์ธํ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํฉ๋๋ค. ์ฃผ๋ก ์ฑ๊ธ ์ฝ์ด์์ ๋ฉํฐ์ค๋ ๋๋ฅผ ๋์์ํค๊ธฐ ์ํ ๋ฐฉ์์ ๋๋ค.
๋ณ๋ ฌ์ฑ์ ๋ฉํฐ ํ๋ก์ธ์ฑ (Multi-Processing)์์ ๋์จ ๊ฐ๋ ์ผ๋ก, ์ค์ ๋ก ๋์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๋ณ๋ ฌ์ ์ผ๋ก ์คํํ๋ ๋ฐฉ์์ ๋๋ค. ์ฆ ๋ฌผ๋ฆฌ์ ์ธ ์๊ฐ ๊ด์ ์์ ์ฌ๋ฌ ์์ ์ด ๋์์ ์ฒ๋ฆฌ๋๋ ๋ฐฉ์์ ๋๋ค.๋ณ๋ ฌ์ ์ผ๋ก ์คํํ๊ธฐ ์ํด์๋ CPU๊ฐ ๋ฉํฐ ์ฝ์ด์ฌ์ผ ํฉ๋๋ค.
๐ฎ ๋ฉํฐ ํ๋ก์ธ์ค์ ๋ฉํฐ ์ค๋ ๋์ ์ฐจ์ด์ ์ ์ค๋ช ํด ์ฃผ์ธ์.
๋ฉํฐ ํ๋ก์ธ์ค๋ ์์ฉํ๋ก๊ทธ๋จ ํ๋๋ฅผ ํ๋ก์ธ์ค ์ฌ๋ฌ ๊ฐ๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ฉด์ ๋ฉํฐ ์ค๋ ๋๋ ํ ํ๋ก์ธ์ค ์์์ ์ฌ๋ฌ ์ค๋ ๋๋ก ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค ๊ฐ ์์ ๊ณต์ ์ ํต์ ์ ํ๋ ค๋ฉด IPC๋ฅผ ํ์ฉํด์ผ ํฉ๋๋ค. ํ๋์ ํ๋ก์ธ์ค๊ฐ ์ฃฝ๋๋ผ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํฅ์ ๋ผ์น์ง ์์ง๋ง, ๋ฉํฐ ์ฐ๋ ๋๋ณด๋ค ๋ง์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐจ์งํฉ๋๋ค.
์ค๋ ๋๋ ์์ ๊ณต๊ฐ์ ๊ณต์ ํ๋ฏ๋ก ์ค๋ ๋ ๊ฐ ํต์ ๊ณผ ์์ ๊ณต์ ๊ฐ ๊ฐ๋จํ๊ณ ํ๋ก์ธ์ค ๋๋น ์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ์ด ์ ๊ฒ ๋ค์ง๋ง, ๋๊ธฐํ๊ฐ ํ์ํฉ๋๋ค. ๋ํ ์ค๋ฅ๋ก ์ธํด ํ๋์ ์ฐ๋ ๋๊ฐ ์ข ๋ฃ๋๋ฉด ์ ์ฒด ์ฐ๋ ๋๊ฐ ์ข ๋ฃ๋ ์ ์๋ค๋ ์ ๊ณผ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ ๋ฉํฐ ์ฐ๋ ๋๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํ๋๊ฐ?
ํ๋์ ํ๋ก๊ทธ๋จ ์์์ ์ฌ๋ฌ ์์ ์ ํด๊ฒฐํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๊ณ , Context Switching ์, Stack ์์ญ๋ง ์ด๊ธฐํํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋ ๋น ๋ฆ ๋๋ค. ๋ํ ํ๋ก์ธ์ค ์์ฑ์ ์์ ํ ๋นํ๋ ์ฝ์ด ์ค์ด๋ค์ด์ ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ์ฅ์ ๋ ์์ต๋๋ค.
๐ฎ ๋๊ธฐ ๋น๋๊ธฐ ๋ธ๋กํน ๋ ผ๋ธ๋กํน์ด ๋ฌด์์ธ๊ฐ์?
- ๋๊ธฐ (Synchronous) ๋ ์์
์ ์์ฐจ์ ์ธ ์งํ์ ์๋ฏธํฉ๋๋ค.
- ์: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ํธ๋์ญ์ ์ด ์์ฐจ์ ์ผ๋ก ์คํ๋ฉ๋๋ค. ํ ํธ๋์ญ์ ์ด ์๋ฃ๋๊ธฐ ์ ๊น์ง ๋ค์ ํธ๋์ญ์ ์ ์์๋์ง ์์ต๋๋ค. ์ด๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
- ํ์ ๋ฐฐ๊ฒฝ: ์ด๊ธฐ ์ปดํจํ ์์คํ ์์๋ ์์ ๋ค์ด ์์ฐจ์ ์ผ๋ก ์คํ๋์์ต๋๋ค. ํ ์์ ์ด ์๋ฃ๋์ด์ผ ๋ค์ ์์ ์ด ์์๋ ์ ์์์ผ๋ฉฐ, ์ด๋ฌํ ๋๊ธฐ์ ์ฒ๋ฆฌ๋ ํ๋ก๊ทธ๋๋ฐ์ ๋จ์ํ๊ณ ์ง๊ด์ ์ผ๋ก ๋ง๋ค์์ต๋๋ค.
- ๋น๋๊ธฐ (Asynchronous) ๋ ์์
์ ์๋ฃ์ ๋ํ ์ฝ๋ฐฑ์ด๋ ์ด๋ฒคํธ๊ฐ์ ์๋ฆผ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ฆ, ์์
์ด ์๋ฃ๋๋ฉด ๊ฒฐ๊ณผ์ ๋ํ ์๋ฆผ์ ๋ฐ์ต๋๋ค.
- ์: ์น์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ HTTP ์์ฒญ์ ์ฒ๋ฆฌํ ๋ ํด๋ผ์ด์ธํธ๋ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๋ค๋ฅธ ์์ ์ ๊ณ์ํ ์ ์์ผ๋ฉฐ, ์๋ฒ๋ ์์ฒญ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฒ๋ฆฌํ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
- ํ์ ๋ฐฐ๊ฒฝ: ๋๊ธฐ์ ์ฒ๋ฆฌ์ ํ๊ณ, ํนํ I/O ์์ ์ด๋ ๋คํธ์ํฌ ์์ฒญ๊ณผ ๊ฐ์ ๊ธด ๋๊ธฐ ์๊ฐ์ด ํ์ํ ์์ ์์ ํ๋ก๊ทธ๋จ์ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด ๊ฐ๋ฐ๋์์ต๋๋ค. ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ์ด๋ฌํ ๋๊ธฐ ์๊ฐ ๋์ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๊ฒ ํด์, ์ ์ฒด ์์คํ ์ ํจ์จ์ฑ์ ๋์ ๋๋ค.
- ๋ธ๋กํน์ ์์
์ ์ํํ๋ ๋์ ๋ค๋ฅธ ์์
์ ์ํํ ์ ์๋ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค.
์ฆ, ๋ชจ๋ ๋๊ธฐ์ ์์ ์ ๋ธ๋กํน์ผ ํ์๋ ์์ต๋๋ค. ๋ํ ๋๊ธฐ์ ์ด์ง๋ง ๋๋ธ๋กํน์ธ ์์ ์ ๊ฒฝ์ฐ, ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์์ต๋๋ค.- ์: ๋คํธ์ํฌ๋ฅผ ํตํ ๋ฐ์ดํฐ ์ก์์ ์์ ๋ธ๋กํน ์์ผ์ ์ฌ์ฉํ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ ๋๊น์ง ์คํ์ด ์ค๋จ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, recv() ํจ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋๊น์ง ํ๋ก๊ทธ๋จ์ ์คํ์ ์ ์ง์ํค๊ณ ๊ธฐ๋ค๋ฆฝ๋๋ค.
- ํ์ ๋ฐฐ๊ฒฝ: ์ด๊ธฐ ์ปดํจํ ์์๋ ์์ ์คํ ์ ๋ค๋ฅธ ์์ ์ด ๋์์ ์คํ๋์ง ๋ชปํ๊ฒ ๋ง๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด์๋๋ฐ์, ์ด ๋ฐฉ์์ ํ๋ก๊ทธ๋จ์ ๋ณต์ก์ฑ์ ์ค์ด๊ณ , ๋ฆฌ์์ค์ ๋ํ ์์ ์ ์ธ ์ ๊ทผ์ ๋ณด์ฅํฉ๋๋ค.
- ๋๋ธ๋กํน์ ์์ฒญํ ์์
์ด ์ฆ์ ์๋ฃ๋์ง ์๋๋ผ๋ ๊ทธ ์ํ๋ฅผ ๋๊ธฐํ์ง ์๊ณ ์ฆ์ ๋ค๋ฅธ ์์
์ผ๋ก ๋์ด๊ฐ๋ฉฐ, ๋์ค์ ์์
์ ์๋ฃ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
- ์: ์ฃผ๋ก I/O ์์ ์์ ๋น ๋ฅธ ์๋ต์ฑ์ด ํ์ํ ๋. ์๋ฅผ ๋ค์ด, ๋๋ธ๋กํน ์์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ธ ์ ์๋ ์ํ๊ฐ ๋ ๋๊น์ง ๋๊ธฐํ์ง ์๊ณ , ๊ทธ ์ํ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธ polling ํฉ๋๋ค.
- ํ์ ๋ฐฐ๊ฒฝ: ๋ธ๋กํน ๋ฐฉ์์ ๋จ์ , ํนํ ์์คํ ์์์ด๋ ์์ ๋๊ธฐ ์๊ฐ์ผ๋ก ์ธํ ํจ์จ์ฑ ์ ํ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋ฐ๋์์ต๋๋ค. ๋ ผ๋ธ๋กํน ๋ฐฉ์์ ์์ ์ด ์ฆ์ ์๋ฃ๋์ง ์๋๋ผ๋ ๋ค๋ฅธ ์์ ์ผ๋ก ์ ํํด์ CPU ์๊ฐ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
- ๋๊ธฐ/๋น๋๊ธฐ = ํธ์ถ๋นํ ํจ์์ ์ข
๋ฃ๋ฅผ ๋๊ฐ ์ฒ๋ฆฌํ๋๋
๋ธ๋กํน/๋๋ธ๋กํน = ์ ์ด๊ถ์ด ๋๊ตฌ์๊ฒ ๋์๊ฐ๋๋
๐ฎ Race Condition ๊ณผ Critical Section ์ด ๋ฌด์์ด๊ณ , ๊ฒฝ์ ์ํ๋ฅผ ๋ง๊ธฐ ์ํด ์ด๋ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋์ง ์ค๋ช ํด ์ฃผ์ธ์.
๋ ๊ฐ ์ด์์ ์ฐ๋ ๋๊ฐ ๊ณต์ ์์์ ๋ํด ์ ๊ทผํ๋ ค๊ณ ์๋ก ๊ฒฝ์ํ๋ ๊ฒ์ 'Race Condition (๊ฒฝ์์ํ)' ๋ผ๊ณ ํฉ๋๋ค.
์ด ๊ณต์ ์์์ด ์กด์ฌํ๋ ๊ตฌ๊ฐ์ผ๋ก Race Condition ์ด ์ผ์ด๋ ์ ์๋ ์์ญ์ 'Critical Section (์๊ณ์์ญ)' ์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๋ฌํ ์๊ณ์์ญ์ ๋ํ ๊ฒฝ์์ํ๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด์, ํ ๊ณต์ ์์์ ๋ํด์ ํ ์ฐ๋ ๋์๋ง ์ ๊ทผ์ ํ๋ฝํ๋๋ก ํ๋ '์ํธ๋ฐฐ์ (Mutual Exclusion)' ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํ๋ก์ธ์ค ํน์ ์ค๋ ๋ ๊ฐ์ ํต์ ์์ shared memory ๋ฑ์ ์ฐ๋ ๊ฒฝ์ฐ ํ๋์ ์์์ ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค ํน์ ์ค๋ ๋๊ฐ ์ ๊ทผํ๋ ๊ฒฝ์ฐ์ ๊ฒฝ์ ์ํ (race condition) ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ฅผ ์ ์ดํ๊ธฐ ์ํด ๋๊ธฐํ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋๋ฐ ๋ฎคํ ์ค์ ์ธ๋งํฌ์ด๊ฐ ๊ทธ ์์์ ๋๋ค.
๐ฎ DeadLock(๊ต์ฐฉ์ํ)์ ๋ํด ์ค๋ช ํ๊ณ , ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
DeadLock(๊ต์ฐฉ์ํ)๋, ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๋ ์ฐ๋ ๋๊ฐ ์๋ก ์์์ ๊ธฐ๋ค๋ฆฌ๋ฉด์ ๋ฌดํํ ๋๊ธฐํ๋ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค.
DeadLock์ด ๋ฐ์ํ๊ธฐ ์ํ 4๊ฐ์ง์ ํ์ ์ถฉ๋ถ ์กฐ๊ฑด์ด ์์ต๋๋ค.
- ์ํธ ๋ฐฐ์ (Mutual Exclusion)
- ํ ์์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ ๊ทผํ ์ ์๋ค.
- ์ ์ ๋๊ธฐ (Hold and Wait)
- ํ๋์ ์์์ ์์ ํ ์ํ์์ ๋ค๋ฅธ ์์์ ๊ธฐ๋ค๋ฆฐ๋ค.
- ๋น์ ์ (Non-preemption)
- ํ๋ก์ธ์ค๊ฐ ์ด๋ค ์์์ ์ฌ์ฉ์ ๋๋ผ ๋๊น์ง ํ๋ก์ธ์ค์ ์์์ ๋บ์ ์ ์๋ค.
- ์ํ ๋๊ธฐ (Circular Wait)
- ๊ฐ ํ๋ก์ธ์ค๊ฐ ์ํ์ ์ผ๋ก ๋ค์ ํ๋ก์ธ์ค๊ฐ ์๊ตฌํ๋ ์์์ ๊ฐ๊ณ ์๋ค.
๊ต์ฐฉ์ํ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์์ 4๊ฐ์ง ์กฐ๊ฑด ์ค ํ๋๋ผ๋ ์ ๊ฑฐํ๋ฉด ๋ง์ ์ ์์ต๋๋ค.
๋ค๋ง Race Condition ์ ๊ฑฐ๋ฅผ ์ํด์ '์ํธ ๋ฐฐ์ ' ์กฐ๊ฑด์ ์ ๊ฑฐํ๊ธฐ๋ ํ์ค์ ์ผ๋ก ์ด๋ ต์ต๋๋ค.
- ์๋ฐฉ(Prevention)
- ๊ต์ฐฉ ์ํ ์กฐ๊ฑด ์ค ํ๋๋ฅผ ์ ๊ฑฐํจ์ผ๋ก ๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ง ์๋๋ก ์๋ฐฉํ๋ ๋ฐฉ์
- ์์ ๋ญ๋น๊ฐ ์ฌํ๋ค.
- ํํผ(Avoidance)
- ๋ฐ๋๋ฝ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ์ธ์ ํ๋ฉด์๋ ์ ์ ํ๊ฒ ํํผํ๋ ๋ฐฉ์
- ์ํ์ ์๊ณ ๋ฆฌ์ฆ
- ํ๋ก์ธ์ค๊ฐ ์์์ ์๊ตฌํ ๋ ์์คํ ์ ์์์ ํ ๋นํ ํ์๋ ์์ ์ํ๋ก ๋จ์์๊ฒ ๋๋์ง๋ฅผ ์ฌ์ ์ ๊ฒ์ฌํ๋ ์๊ณ ๋ฆฌ์ฆ
- ๋ฐ์ํ์ง ์์ผ๋ฉด ์์์ ํ ๋นํ๊ณ , ๋ฐ์ํ๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์์์ ํด์ ํ ๋๊น์ง ๋๊ธฐํ๋ค.
- ์์ ์ํ: ์์คํ ์ด ๊ต์ฐฉ์ํ๋ฅผ ์ผ์ผํค์ง ์์ผ๋ฉด์ ๊ฐ ํ๋ก์ธ์ค๊ฐ ์๊ตฌํ ์ต๋ ์๊ตฌ๋๋งํผ ํ์ํ ์์์ ํ ๋นํด ์ค ์ ์๋ ์ํ
- ํญ์ ์์ ์ํ๋ฅผ ์ ์งํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ผ๋ ์ต๋ ์์ ์๊ตฌ๋์ ๋ฏธ๋ฆฌ ์์์ผ ํ๊ณ ํญ์ ๋ถ์์ ์ํ๋ฅผ ๋ฐฉ์งํด์ผ ํ๋ฏ๋ก ์์ ์ด์ฉ๋๊ฐ ๋ฎ๋ค.
- ํ๋ณต(Recovery)
- ์ํ์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ ์ฌํ๊ฒ ์์คํ ์ ์์ ํ ๋น ์ํ๋ฅผ ๊ฐ๊ณ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ํ๋ค.
- ํ์งํ๋ค๋ฉด ๋ฐ๋๋ฝ์ ํ๋ณตํ๋ค.
- ๋ฐ๋๋ฝ ์ํ์ ํ๋ก์ธ์ค ๋ชจ๋ ์ค๋จ์ํค๊ธฐ
- ํ๋ก์ธ์ค๋ฅผ ํ๋์ฉ ์ค๋จ ์ํฌ ๋๋ง๋ค ํ์ง ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ฐ๋๋ฝ์ ํ์งํ๋ฉด์ ํ๋ณต์ํค๊ธฐ
- ์์ ์ ์ ์ ํตํด ํด๊ฒฐํ๊ธฐ(๊ต์ฐฉ ์ํ์ ์๋ ํ๋ก์ธ์ค๊ฐ ์ ์ ํ๊ณ ์๋ ์์์ ์ ์ ํ์ฌ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ํ ๋น)
๐ฎ ์์ฌํ๋ ์ฒ ํ์ ๋ฌธ์ ์์, DeadLock์ด ์ด๋จ ๋ ๋ฐ์ํ๋์ง ์ค๋ช ํ๊ณ , ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ ์ํด ์ฃผ์ธ์.
"์์ฌํ๋ ์ฒ ํ์ ๋ฌธ์ "
๋ค์ฏ ๋ช ์ ์ฒ ํ์๊ฐ ์ํ์ ์์ ์๊ณ , ๊ฐ์์ ์์๋ ์คํ๊ฒํฐ๊ฐ ์๊ณ ์์์ ํฌํฌ๊ฐ ํ๋์ฉ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ ์ฒ ํ์๋ ๋ค๋ฅธ ์ฒ ํ์์๊ฒ ๋ง์ ํ ์ ์๋ค. ์ด๋ ์ฒ ํ์๊ฐ ์คํ๊ฒํฐ๋ฅผ ๋จน๊ธฐ ์ํด์๋ ์ ์์ ํฌํฌ๋ฅผ ๋์์ ๋ค์ด์ผ ํ๋ค.
๋ชจ๋ ์ฒ ํ์๊ฐ ๋ฐฉ์ ์ ์ฅํ ํ, ๊ฐ์์ ์ผ์ชฝํฌํฌ๋ฅผ 5๋ช ์ด ๋ชจ๋ ๋๋ ๊ฒฝ์ฐ์ DeadLock์ด ๋ฐ์ํฉ๋๋ค.
1) 5๋ช ๋ชจ๋ ์์ ์ ์ผ์ชฝ ํฌํฌ๋ฅผ ๋ค๊ณ ์์ผ๋ฏ๋ก '์ ์ ๋๊ธฐ'
2) ๋จ์ด ํฌํฌ๋ฅผ ๋บ์ด์ฃผ์ง ์์ '๋น์ ์ '
3) ์๋ก ์ค๋ฅธ์ชฝ ํฌํฌ๋ฅผ ๋๊ธฐ๋ง์ ๊ธฐ๋ค๋ฆผ 'ํํ๋๊ธฐ'
4) ๊ฐ ํฌํฌ์ ๋ํด ํ ์ฌ๋๋ง ๋ค ์ ์์ '์ํธ๋ฐฐ์ '
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์, ์นด์ดํ ์ธ๋งํฌ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฐฉ์ ๋ํ ์ ์ฅ ์ ์์ ์นด์ดํ ์ธ๋งํฌ์ด๋ก ์ค๊ณํด, ์ต๋ 4๋ช ๋ง ๋ค์ด์จ๋ค๋ฉด ๋ฐฉ ์์ ๋ชจ๋ ์ฌ๋๋ค์ด ์ผ์ชฝ ํฌํฌ๋ฅผ ๋ ๋ค ํ๋๋ผ๋ DeadLock์ด ์ผ์ด๋์ง ์์ต๋๋ค.
๐ฎ ๋ฎคํ ์ค๊ฐ ๋ฌด์์ธ๊ฐ์?
์ค์ง 1๊ฐ๋ง์ ์ค๋ ๋(๋๋ ํ๋ก์ธ์ค)๋ง ์ ๊ทผ ํ ์ ์๋ค.
1๊ฐ๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ฏ๋ก ๋ฐ๋์ ๋ฝ์ ํ๋ํ ํ๋ก์ธ์ค๊ฐ ๋ฝ์ ํด์ ํด์ผ ํ๋ค.
ํ๋ก์ธ์ค ํน์ ์ค๋ ๋ ๊ฐ์ ํต์ ์์ shared memory ๋ฑ์ ์ฐ๋ ๊ฒฝ์ฐ ํ๋์ ์์์ ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค ํน์ ์ค๋ ๋๊ฐ ์ ๊ทผํ๋ ๊ฒฝ์ฐ์ ๊ฒฝ์ ์ํ (race condition) ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ฅผ ์ ์ดํ๊ธฐ ์ํด ์ค๋ ๋๋ ๋ฎคํ ์ค๋ฅผ ์ฌ์ฉํ๊ณ , ํ๋ก์ธ์ค์์๋ ์ธ๋งํฌ์ด๋ฅผ ์ฌ์ฉํ๋ค.
๋ฎคํ ์ค (mutex) ๋ ์ํธ ๋ฐฐ์ (mutual exclusive) ๋ผ๊ณ ๋ ํ๋ฉฐ, ์๊ณ ์์ญ (Critical Section) ์ ๊ฐ์ง ์ค๋ ๋์ Running Time ์ด ์๋ก ๊ฒน์น์ง ์๋๋ก ๊ฐ๊ฐ ๋จ๋ ์ผ๋ก ์คํํ๊ฒ ํ๋ ๊ธฐ์ ์ ๋๋ค.
๐ฎ ์ธ๋งํฌ์ด๊ฐ ๋ฌด์์ธ๊ฐ์? ๋ฎคํ ์ค์์ ์ฐจ์ด์ ์์?
๋ฎคํ ์ค์ ์ธ๋งํฌ์ด๋ ํ๋ก์ธ์ค ๋๊ธฐํ๋ฅผ ์ํ ์ํธ๋ฐฐ์ ๊ธฐ๋ฒ์ ๋๋ค. ์ด ์ค ๋ฎคํ ์ค๋ ๋ฝ์ ๊ฐ์ง ํ๋์ ํ๋ก์ธ์ค๋ง ์๊ณ ์์ญ์ ์ ๊ทผํ ์ ์๊ฒ ํ๋ ๋๊ธฐํ ๋ฐฉ์์ ๋๋ค. ์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์๊ณ ์์ญ์ ์ ๊ทผํ๋ ค๋ ํ๋ก์ธ์ค๋ ๋ฝ์ ์ป๊ธฐ ์ํด ๋๊ธฐ ์ํ๊ฐ ๋์ง ์๊ณ , ๋ฐ๋ณต๋ฌธ์ ๋๋ฉฐ ์๊ณ ์์ญ์ ์ ๊ทผ ๊ฐ๋ฅํ์ง ํ์ธํ๊ฒ ๋๋๋ฐ, ์ด๋ฌํ ํ์์ ์คํ๋ฝ์ด๋ผ๊ณ ํฉ๋๋ค.
๋ฐ๋ฉด์ ์ธ๋งํฌ์ด๋ ์๊ณ ์์ญ์ ํน์ ๊ฐ์์ ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ ์ ์๊ฒ ์ ์ดํ๋ ๋ฐฉ์์ ๋๋ค. ์๊ณ ์์ญ์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ฉด ํด๋น ํ๋ก์ธ์ค๋ ๋๊ธฐ ์ํ๋ก ๋ค์ด๊ฐ๊ณ , ์ดํ ์๊ณ ์์ญ์ ์ฒ๋ฆฌ ์ค์ด๋ ํ๋ก์ธ์ค๊ฐ ์๊ณ ์์ญ์ ๋๊ฐ๋ฉด์ ๋๊ธฐ ์ํ์ธ ํ๋ก์ธ์ค๋ฅผ ๊นจ์ฐ๊ฒ ๋ฉ๋๋ค.
๐ฎ ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ์ฅ์ ์ ๋ฌด์์ ๋๊น?
ํ๋ก์ธ์ค๋ฅผ ์ด์ฉํ์ฌ ๋์์ ์ฒ๋ฆฌํ๋ ์ผ์ ์ค๋ ๋๋ก ๊ตฌํํ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๊ณผ ์์คํ
์์ ์๋ชจ๊ฐ ์ค์ด๋ค๊ฒ ๋ฉ๋๋ค.
์ค๋ ๋ ๊ฐ์ ํต์ ์ด ํ์ํ ๊ฒฝ์ฐ์๋ ๋ณ๋์ ์์์ ์ด์ฉํ๋ ๊ฒ์ด ์๋๋ผ ์ ์ญ ๋ณ์์ ๊ณต๊ฐ ๋๋ ๋์ ์ผ๋ก ํ ๋น๋ ๊ณต๊ฐ์ธ Heap(ํ) ์์ญ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค ๊ฐ ํต์ ๋ฐฉ๋ฒ์ ๋นํด ์ค๋ ๋ ๊ฐ์ ํต์ ๋ฐฉ๋ฒ์ด ํจ์ฌ ๊ฐ๋จํฉ๋๋ค.
์ฌ์ง์ด ์ค๋ ๋์ context switch(๋ฌธ๋งฅ ๊ตํ)๋ ํ๋ก์ธ์ค context switch ์๋ ๋ฌ๋ฆฌ ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋น์ธ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ ๋น ๋ฆ ๋๋ค. ๋ฐ๋ผ์ ์์คํ ์ ์ฑ๋ฅ์ด ํฅ์๋๊ณ ์์ ์๋ชจ๊ฐ ์ค์ด๋ค๋ฉฐ ์์ฐ์ค๋ฝ๊ฒ ํ๋ก๊ทธ๋จ์ ์๋ต ์๊ฐ์ด ๋จ์ถ๋ฉ๋๋ค. ์ด๋ฌํ ์ฅ์ ๋๋ฌธ์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ก ํ ์ ์๋ ์์ ๋ค์ ํ๋์ ํ๋ก์ธ์ค์์ ์ค๋ ๋๋ก ๋๋ ์ํํ๋ ๊ฒ์ ๋๋ค.
๐ฎ ๊ทธ๋ ๋ค๋ฉด ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ๋จ์ ์ ๋ฌด์์ ๋๊น? ์ฃผ์ํ ์ ์ด ์์๊น์?
๋ฉํฐ ํ๋ก์ธ์ค ๊ธฐ๋ฐ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ ๋๋ ํ๋ก์ธ์ค ๊ฐ ๊ณต์ ํ๋ ์์์ด ์๊ธฐ ๋๋ฌธ์ ๋์ผํ ์์์ ๋์์ ์ ๊ทผํ๋ ์ผ์ด ์์์ง๋ง, ๋ฉํฐ ์ค๋ ๋ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ ๋๋ ์ด ๋ถ๋ถ์ ์ ๊ฒฝ ์จ์ค์ผ ํฉ๋๋ค. ์๋ก ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋ฐ์ดํฐ์ ํ ์์ญ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ค ์ค๋ ๋๊ฐ ๋ค๋ฅธ ์ค๋ ๋์์ ์ฌ์ฉ ์ค์ธ ๋ณ์๋ ์๋ฃ๊ตฌ์กฐ์ ์ ๊ทผํ์ฌ ์๋ฑํ ๊ฐ์ ์ฝ์ด์ค๊ฑฐ๋ ์์ ํ ์ ์์ต๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฉํฐ์ค๋ ๋ฉ ํ๊ฒฝ์์๋ ์๋ก ํ ํ๋ก์ธ์ค ๋ด์ ์์์ ๊ณต์ ํ๋ฏ๋ก ๋๊ธฐํ ๋ฅผ ํญ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ๋๊ธฐํ๋ฅผ ํตํด ์์
์ฒ๋ฆฌ ์์๋ฅผ ์ปจํธ๋กคํ๊ณ ๊ณต์ ์์์ ๋ํ ์ ๊ทผ์ ์ปจํธ๋กคํ๋ ๊ฒ์
๋๋ค. ํ์ง๋ง ์ด๋ก ์ธํด ๋ณ๋ชฉํ์ / ๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ฌ ์ฑ๋ฅ์ด ์ ํ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๊ณผ๋ํ ๋ฝ์ผ๋ก ์ธํ ๋ณ๋ชฉํ์์ ์ค์ฌ์ผ ํฉ๋๋ค.
๐ฎ Python์์์ ๋ฉํฐ ํ๋ก์ธ์ค์ ๋ํด์๋ ์ค๋ช ํด์ฃผ์๊ฒ ์ด์?
ํ์ด์ฌ์ GIL(Global Interpreter Lock) ์ ์ฑ ์ ์ฌ์ฉํฉ๋๋ค. ํ๋์ ํ๋ก์ธ์ค ์์ ๋ชจ๋ ์์์ Lock์ ๊ธ๋ก๋ฒํ๊ฒ ๊ด๋ฆฌํจ์ผ๋ก์จ ํ ๋ฒ์ ํ๋์ ์ฐ๋ ๋๋ง ์์์ ์ปจ๋๋กคํด ๋์ํ๋๋ก ํฉ๋๋ค. GIL ๋๋ถ์ ์์ ๊ด๋ฆฌ๋ฅผ ๋ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ผ๋, CPU ์์ ์ด ๋ง์ ๊ฒฝ์ฐ์๋ ๋ฉํฐ ์ฐ๋ ๋๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์๋ ๊ฐ์ ์ ๋๋ผ์ง ๋ชปํ ์ ์์ต๋๋ค.
I/O ๋์์ด ๋ง์ ํ๋ก๊ทธ๋จ์์๋ ๋ฉํฐ ์ฐ๋ ๋๋ง์ผ๋ก ํฐ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
CPU ๋์์ด ๋ง์ ๊ฒฝ์ฐ, ๋ฉํฐ ํ๋ก์ธ์ค๋ฅผ ์ด์ฉํด์ ๋ณ๋ ฌ์ ์ผ๋ก ์ํ์ด ๊ฐ๋ฅํฉ๋๋ค.
๐ฎ CPU ์ค์ผ์ค๋ง์ด ๋ฌด์์ธ๊ฐ์?
์ฐ์ ์ค์ผ์ค๋ง์ ๋ํด ๋งํด๋ณด๊ฒ ์ต๋๋ค. ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์๊ณ , ์ด ํ๋ก์ธ์ค๋ค์ด ์์(CPU ๋ฑ)์ ๋์์ ์๊ตฌํ๋๋ฐ ์์์ด ์ ํ๋์ด์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ ํ๋ ์์๋ค์ ์ด๋ป๊ฒ(์์๋ฅผ ํ ๋นํ๋ ๋ฑ) ๋๋ ์ค ๊ฒ์ธ์ง์ ๋ํ ์ ์ฑ ์ ๋งํฉ๋๋ค.
CPU ํ๋๋ ๋์์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์, ํ ์๊ฐ์ ์ด๋ค ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋์ง ๊ฒฐ์ ํ๋ ์ ์ฑ ์ ๋๋ค.
๐ฎ CPU ์ ์ฑ๋ฅ ์ฒ๋์ ๋ฌด์์ด ์๋์?
- CPU Utilization(์ด์ฉ๋ฅ ) : CPU๊ฐ ๋์ง ์๊ณ ์ผํ ์๊ฐ
- Throughput(์ฒ๋ฆฌ๋) : ๋จ์ ์๊ฐ๋น ์ฒ๋ฆฌ๋, CPU๊ฐ ์ผ๋ง๋ ๋ง์ ์ผ์ ํ๋์ง
- Turnaround Time(์์์๊ฐ, ๋ฐํ์๊ฐ) : CPU ์ฌ์ฉ ์๊ฐ + ๊ธฐ๋ค๋ฆฐ ์๊ฐ (์งง์์๋ก ์ข๋ค)
- Waiting Time(๋๊ธฐ์๊ฐ) : ํ๋ก์ธ์ค๊ฐ Ready Queue์์ ๊ธฐ๋ค๋ฆฐ ์ ์ฒด ์๊ฐ์ ํฉ
- Response Time(์๋ต์๊ฐ) : ํ๋ก์ธ์ค๊ฐ Ready Queue์ ๋ค์ด๊ฐ์ ์ต์ด๋ก CPU ์ป๊ธฐ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ
๐ฎ ์ ์ , ๋น์ ์ ์ด ๋ฌด์์ธ๊ฐ์?
์ ์ ๋ฐฉ์์, ํน์ ํ๋ก์ธ์ค๊ฐ ์คํ ์ค์ด๋๋ผ๋ CPU ํ ๋น์ ๋บ์ด ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ถ์ฌํ ์ ์๋ ๋ฐฉ์์ ๋๋ค.
System Call, Time Quantum, Interrupt ๋ฑ์ ์ํด ์ ์ ์ด ์ผ์ด๋ฉ๋๋ค.
๋น์ ์ ๋ฐฉ์์, ํน์ ํ๋ก์ธ์ค๊ฐ ์คํ ์ค์ด๋ฉด ๋๋๊ธฐ ์ ๊น์ง๋ ์ ๋๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ CPU๋ฅผ ๋บ๊ธฐ์ง ์๋ ๋ฐฉ์์ ๋๋ค.
๐ฎ ์ปค๋ ์์ค ์ค๋ ๋์ ์ฌ์ฉ์ ์์ค ์ค๋ ๋์ ์ฐจ์ด์ ์ด ๋ฌด์์ ๋๊น? ๐
์ฝ๋๊ฐ ์คํ๋๋ ๋ชจ๋์ ์ฐจ์ด์ ๋๋ค. ์ปค๋์ ์ปค๋์์ ๊ด๋ฆฌํ๋ ์์์ ๋ณดํธํ๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉ์ ๋ชจ๋์ ์ปค๋ ๋ชจ๋๋ก ๊ตฌ๋ถํฉ๋๋ค. ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ค๋ ๋๋ ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๋ ์ฃผ์ฒด์ ๋ฐ๋ผ ๊ตฌ๋ถ๋ฉ๋๋ค.
์ฌ์ฉ์ ์์ค ์ค๋ ๋(user-level thread)๋ ์ฌ์ฉ์๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด ์์ฑ ๋ฐ ๊ด๋ฆฌํฉ๋๋ค.
์ปค๋์ ์ด๋ฌํ ์ค๋ ๋์ ์กด์ฌ๋ฅผ ์ธ์ํ์ง ๋ชปํฉ๋๋ค.
์ปค๋ ์์ค ์ค๋ ๋(Kernel-level thread)๋ ์ปค๋์ด ์ค๋ ๋๋ฅผ ์์ฑ ๋ฐ ๊ด๋ฆฌํฉ๋๋ค.
๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ์ฌ์ฉ์ ์์ค ์ค๋ ๋์ ์ปค๋ ๋ ๋ฒจ ์ค๋ ๋๋ 3๊ฐ์ง ๊ด๊ณ๋ฅผ ๋งบ์ ์ ์์ต๋๋ค.
1. ๋ค๋์ผ ๋ชจ๋ธ
์ฌ์ฉ์ ์์ค ์ค๋ ๋ n๊ฐ์ ์ปค๋ ์์ค ์ค๋ ๋ 1๊ฐ๊ฐ ๋งคํ๋์ด ์ฌ์ฉ์ ์์ค์์ ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ํ๋์ ์ฌ์ฉ์ ์์ค ์ค๋ ๋์์ ์์คํ ์ฝ์ ํธ์ถํ๋ฉด, ๋๋จธ์ง ์ฌ์ฉ์ ์์ค ์ค๋ ๋๋ ์ปค๋ ๋ ๋ฒจ์ ์ ๊ทผํ ์ ์์ผ๋ฏ๋ก ๋ฉํฐ ์ฝ์ด์ ๋ณ๋ ฌ์ฑ์ ์ด์ฉํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์์ค ์ค๋ ๋๊ฐ ์์คํ ์ฝ์ ํธ์ถํ๋ฉด, ํด๋น ์ค๋ ๋๋ฅผ ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์ปค๋ ๋ชจ๋๋ก ์ ํ๋ฉ๋๋ค. ๋ง์ฝ ํธ์ถ๋ ์์คํ ์ฝ์ด ๋ธ๋กํน ํ์ ์ด๋ผ๋ฉด, ์ ์ฒด ํ๋ก์ธ์ค(์ฆ, ๋ชจ๋ ์ฌ์ฉ์ ์์ค ์ค๋ ๋)๊ฐ ๋ธ๋ก๋ ์ ์์ต๋๋ค. ์ด๋ ์ปค๋์ด ์ฌ์ฉ์ ์์ค ์ค๋ ๋๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ธ์ํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ปค๋์ ์ฌ์ฉ์ ์์ค ์ค๋ ๋๋ฅผ ๊ฐ๋ณ์ ์ธ ์คํ ๋จ์๋ก ๋ณด์ง ์๊ณ , ์ ์ฒด ํ๋ก์ธ์ค๋ฅผ ํ๋์ ์คํ ๋จ์๋ก ๊ฐ์ฃผํฉ๋๋ค. ๋ฐ๋ผ์, ํ๋์ ์ค๋ ๋๊ฐ ์์คํ ์ฝ๋ก ์ธํด ๋ธ๋ก๋๋ฉด, ์ปค๋์ ์ ์ฒด ํ๋ก์ธ์ค๋ฅผ ๋ธ๋กํฉ๋๋ค.
2. ์ผ๋์ผ ๋ชจ๋ธ
์ฌ์ฉ์ ์์ค ์ค๋ ๋ 1๊ฐ์ ์ปค๋ ์์ค ์ค๋ ๋ 1๊ฐ๊ฐ ๋งคํ๋ฉ๋๋ค. ์ด ๋ฐฉ์์ ํ๋์ ์ฌ์ฉ์ ์์ค ์ค๋ ๋์์ ์์คํ ์ฝ์ ํธ์ถํ๋ฉด, ๋ค๋ฅธ ์ฌ์ฉ์ ์์ค ์ค๋ ๋๊ฐ ๋ชจ๋ ์คํ๋์ง ์๋ ๋ค๋์ผ ๋ชจ๋ธ์ ๋จ์ ์ ํด๊ฒฐํฉ๋๋ค. ํ์ง๋ง ์ฌ์ฉ์ ์์ค ์ค๋ ๋ ์๋งํผ ์ปค๋ ์์ค ์ค๋ ๋๊ฐ ์์ฑ๋๋ฏ๋ก ์ฑ๋ฅ ์ ํ๊ฐ ์ผ์ด๋ ์ ์์ต๋๋ค.
3. ๋ค๋๋ค ๋ชจ๋ธ
์ฌ์ฉ์ ์์ค ์ค๋ ๋ n๊ฐ์ ์ปค๋ ์์ค ์ค๋ ๋ m๊ฐ๊ฐ ๋งคํ๋ฉ๋๋ค. (m <= n)
์ด ๋ฐฉ์์ ๋ค๋์ผ ๋ชจ๋ธ๊ณผ ์ผ๋์ผ ๋ชจ๋ธ์ ์ฅ์ ์ ํฌํจํ์ง๋ง, ๊ตฌํ์ด ์ด๋ ต๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
๐ฎ ์ค๋ ๋๋ ํ๋ก์ธ์ค ๋จ์๋ผ๋ฉด์ ์ด๋ป๊ฒ ์ด์์ฒด์ ๋ ๋ฒจ์ธ ์ปค๋ ์์ด ์๋๋ผ ์ปค๋ ๋ฐ์์ ์์ฑํ์ฌ ์ด์ฉํ ์ ์๋์? ์ค๋ ๋๊ฐ ์ปค๋ ๋ฐ์ ์๋ค๊ตฌ์?
์ด๊ฒ์ ์ค์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ๋ง ์ปค๋ ๋ฐ์ ์๊ณ ๊ทธ๋ฐ ๊ฒ์ด ์๋๋ผ, ์ ๋ถ ์ปค๋ ๋ด๋ถ์ ์์ง๋ง ์ปค๋์ ํต์ ๊ถ ์์ ์๋์ง ์ฐจ์ด์ธ ๊ฒ์ ๋๋ค.
์ปค๋์๋ '์ปค๋ ๋ชจ๋'์ '์ฌ์ฉ์ ๋ชจ๋' ๋ ๊ฐ์ง๊ฐ ์๊ณ , ์ฌ๊ธฐ์ '์ฌ์ฉ์ ๋ชจ๋'์์ ๋์ํ๋ ์ค๋ ๋๊ฐ ์ฌ์ฉ์ ์์ค ์ค๋ ๋์ธ ๊ฒ์ ๋๋ค.
์ ์ถ๋ ฅ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ์ปค๋์ '์ฌ์ฉ์ ๋ชจ๋'๊ฐ ๋์ด์ ์ฌ์ฉ์ ์์ค ์ค๋ ๋์ ์๋ต์ ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ฌ์ฉ์ ์์ค ์ค๋ ๋์ ์๋ต์ด ์ค๋ฉด ๋ค์ '์ปค๋ ๋ชจ๋'๋ก ๋ณํ๋์ด ์ด์ด์ ์ปค๋ ์ค๋ ๋๊ฐ ์ผ ์ฒ๋ฆฌ๋ฅผ ํ๊ฒ ๋๋ ๊ฒ์ ๋๋ค.
์ถ์ฒ https://helloinyong.tistory.com/293
๐ฎ ์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด ์์ ๋จ์์ธ๋ฐ, ์ฌ์ฉ์ ์์ค์ ์ค๋ ๋๋ ์ด๋ป๊ฒ ํ๋ก์ธ์ค ์์ด ์ค๋ ๋๋ง ์์ฑํ ์ ์๋์?
์ฌ์ฉ์ ์์ค์ ์ค๋ ๋๋ ์์ฑํ ๋๋ง๋ค ํ๋ก์ธ์ค ๋จ์๋ก ์์ฑ์ ํ๊ธฐ ๋๋ฌธ์, ํ๋ก์ธ์ค ๊ฒธ ์ค๋ ๋๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
์ด๋ฌํ ํน์ง ๋๋ฌธ์ ์ฌ์ฉ์ ์์ค์ ์ค๋ ๋๋ ์ปค๋ ์ค๋ ๋์ ๋ค๋ฅด๊ฒ ๋ฉํฐ ์ค๋ ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
์ถ์ฒ https://helloinyong.tistory.com/293
๐ฎ DMA (Direct Memory Accecc)์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
๋ฐ์ดํฐ์ ์ด๋์๋ CPU์ ๊ฐ์ ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ค๋์ ๋ฐ์ดํฐ๊ฐ ์ด๋ํ๋ ๊ณผ์ ์์๋ CPU์ ๋ง์ ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ CPU๋ฅผ ๊ฑฐ์น์ง ์๊ณ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐฉ๋ฒ์ธ DMA๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๐ฎ ํ์ปด์คํผ์ค 'ํ๊ธ'์ ํด๋ฆญ ํ, ๋น ํ๋ฉด์ ์ปค์๊ฐ ๊น๋นก์ด๊ณ ์์ต๋๋ค. ์ด ๋, 'hello world!' ๋ฅผ ์์ฑํ๋ฉด ์ปดํจํฐ ๋ด๋ถ์์ ์ด๋ค ์ผ์ด ๋ฐ์ํ ๊น์?
- ํค๋ณด๋์์ ์ฌ์ฉ์ ์ ๋ ฅ์ด ๋ค์ด์ค๋ฉด ํค๋ณด๋ ์ปจํธ๋กค๋ฌ๊ฐ ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์์ผ CPU์๊ฒ ํค๊ฐ ์ ๋ ฅ๋์๋ค๋ ์ฌ์ค์ ์๋ ค์ค๋๋ค.
- CPU๋ ํ์ฌ ์ํ์ค์ด๋ ์์ ์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ์ธํฐ๋ฝํธ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด OS๋ด์ ์ ์๋ ํค๋ณด๋ ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ๋ฃจํด์ ์ฐพ์๊ฐ๋.
- ํค๋ณด๋ ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ๋ฃจํด์ ํค๋ณด๋๋ก ๋ถํฐ ์ ๋ ฅ๋ฐ์ ๋ด์ฉ์ ๋ฉ๋ชจ๋ฆฌ์ ํน์ ๋ถ๋ถ์ ์ ์ฅํด ํด๋น ํ๋ก๊ทธ๋จ์๊ฒ ํค๋ณด๋ ์ ๋ ฅ์ด ๋ค์ด์์์ ์๋ฆฌ๋ฉฐ ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ๋ฅผ ์๋ฃํฉ๋๋ค.
- ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ๊ฐ ๋๋๋ฉด ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๊ธฐ ์ง์ ์ํ๋ฅผ ๋ณต๊ตฌ์์ผ ์ค๋จ๋์๋ ์์ ์ ์ฌ๊ฐํฉ๋ค.
๐ฎ ํ๋ก์ธ์ค ๊ฐ ํต์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์๋ ค์ฃผ์ธ์. ์ฅ๋จ์ ๋ ์๋ ค์ฃผ์๊ตฌ์. ๋ฉ์ธ์ง ์ ๋ฌ ์ ๋๋ ์ด์ ๋ํ ๋ถ๋ถ์ ๋จ์ ์ผ๋ก ๋๋ตํด์ฃผ์ธ์.
ํ๋ก์ธ์ค๋ ๊ณ ์ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์ง๋ฏ๋ก ํ๋ก์ธ์ค ๊ฐ ์์์ ๊ณต์ ํด์ผ ํ ๋, IPC๋ฅผ ํด์ผ ํฉ๋๋ค. IPC๋ Inter Process Communication ์ ์ฝ์ด๋ก, ํ๋ก์ธ์ค ๊ฐ์ ์์์ ๊ณต์ ํ๋ ๋ฐฉ์์ ๋ํ๋ ๋๋ค.
1. ํ์ดํ(Pipes)
- ์ฅ์ : ๋จ์ํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฝ์ต๋๋ค. ๋ถ๋ชจ-์์ ํ๋ก์ธ์ค ๊ฐ์ ํต์ ์ ์ ํฉํฉ๋๋ค.
- ๋จ์ : ๋จ๋ฐฉํฅ ํต์ ๋ง ๊ฐ๋ฅํ๊ณ , ์๋ฐฉํฅ ํต์ ์ ์ํด์ ์ฝ๊ธฐ ํ์ดํ์ ์ฐ๊ธฐ ํ์ดํ๋ฅผ ๊ฐ๊ฐ ์์ฑํด์ผ ํฉ๋๋ค. ํ์ดํ๋ฅผ ์์ฑํ ํ๋ก์ธ์ค๋ค ์ฌ์ด์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฉ์์ง ์ ๋ฌ ์ ๋๋ ์ด๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
2. ๋ฉ์์ง ํ(Message Queues)
- ์ฅ์ : ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ๋ฌํ ์ ์์ผ๋ฉฐ, ์์คํ
ํ์ ๋ฉ์์ง๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋น๋๊ธฐ ํต์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋จ์ : ํ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ฉฐ, ๋ฉ์์ง ์ ๋ฌ์ ๋๋ ์ด๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
3. ๊ณต์ ๋ฉ๋ชจ๋ฆฌ(Shared Memory)
- ์ฅ์ : ๋ฐ์ดํฐ๋ฅผ ํ์ผ์ด๋ ๋ฉ์์ง ํํ๋ก ๋ณํํ ํ์๊ฐ ์์ด ๋น ๋ฅธ ๋ฐ์ดํฐ ์ ์ก์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋จ์ : ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. ๋ฉ์์ง ์ ๋ฌ ์ ๋๋ ์ด๋ ์๋์ ์ผ๋ก ์ ์ง๋ง ์ฌ์ ํ ๋ฐ์ํ ์ ์์ต๋๋ค.
4. ์์ผ(Sockets)
- ์ฅ์ : ๋คํธ์ํฌ๋ฅผ ํตํ ํ๋ก์ธ์ค ๊ฐ ํต์ ์ ์ ํฉํ๋ฉฐ, ๋ค์ํ ํ๋กํ ์ฝ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋จ์ : ๊ตฌํ์ด ๋ณต์กํ๋ฉฐ, ๋คํธ์ํฌ ์ง์ฐ์ผ๋ก ์ธํ ๋ฉ์์ง ์ ๋ฌ ๋๋ ์ด๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
5. ์ธ๋งํฌ์ด (Semaphores)
์ ๊ทผํ๋ ํ๋ก์ธ์ค๋ฅผ ์ ์ดํด์ ๊ณต์ ์์์ ๊ด๋ฆฌํฉ๋๋ค.
๐ฎ ์ธํฐ๋ฝํธ์ ๋ํด์ ์ค๋ช ํด ์ฃผ์ธ์
Trap ์ ์ํํธ์จ์ด์ ์ผ๋ก ๋ฐ์ํ๋ ์ธํฐ๋ฝํธ๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ช ์นญ์ผ๋ก ์๊ณ ์์ต๋๋ค.
์ธํฐ๋ฝํธ๋ `Ctrl + C`๋ฅผ ๋๋ฅผ๋ ์ฒ๋ผ ํ๋์จ์ด์์ ๋ฐ์ํ๋ ์ ํธ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด์ ๊ฐ์ด ์ธํฐ๋ฝํธ๋ ์ฅ์น ๋ด์์ ์์ธ์ํฉ์ด ๋ฐ์ํ์ฌ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ ๋งํฉ๋๋ค. `interrupt vector`์ ์ฒ๋ฆฌํด์ผ ํ๋ ๋์์ ๊ฐ๋ฆฌํค๋ ์ฃผ์๋ฅผ ๊ธฐ๋กํด์ ๊ด๋ฆฌํ๊ฒ ๋ฉ๋๋ค. ์ธํฐ๋ฝํธ๋ ํ๋ก์ธ์๊ฐ ํ์ฌ ์คํ ์ค์ธ ์์ ์ ์ค๋จํ๊ณ , ์ธํฐ๋ฝํธ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ํํ๋๋ก ํฉ๋๋ค.
Segmentation fault : ์๋ชป๋ ํฌ์ธํฐ ์ฐธ์กฐ, ๋ฐฐ์ด ๋ฒ์ ์ค์ ๊ทผ, ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ, ํฌ์ธํฐ ์ค์ฌ์ฉ
ํ๋์จ์ด ์ธํฐ๋ฝํธ
- ๊ฐ์ข ํ๋์จ์ด ์ฅ์น๋ค์ด CPU์๊ฒ ์๋น์ค๋ฅผ ๋ฐ์์ผ ํ๋ ๊ฒฝ์ฐ ๋ฐ์.
- ์ธํฐ๋ฝํธ ๋ผ์ธ์ ํตํด CPU์๊ฒ ์ ๋ฌ
- ์: ํค๋ณด๋ ์ ๋ ฅ, ํ์ด๋จธ ์ ํธ ๋ฑ
์ํํธ์จ์ด ์ธํฐ๋ฝํธ
- ํ๋ก๊ทธ๋จ์ด ์๋ชป๋ ์ฐ์ฐ์ ์ํํ ๊ฒฝ์ฐ ์ด์ ๋ํ ์ ์ ํ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉ๋๋ ์์ธ ์ํฉ ์ฒ๋ฆฌ
- ์์ ์ด ์์ฑํ์ง ์์ ์ฝ๋๋ฅผ ์ด์์ฒด์ ๋ก๋ถํฐ ์๋น์ค๋ฅผ ๋ฐ๊ธฐ ์ํด ๋ฐ์์ํค๋ ์์คํ ์ฝ (์ด๋ฅผ Trap์ด๋ผ๊ณ ํฉ๋๋ค.)
- ์: System Call, Segmentation fault, 0์ผ๋ก ๋๋๊ธฐ
๐ฎ DMA ๊ฐ ํ์ํ ์ด์ ์ ๋ํด์ ์ค๋ช ํด ์ฃผ์ธ์
- ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ฐ์ฐ์ด CPU์ ์ํด์๋ง ์ด๋ฃจ์ด์ง ๊ฒฝ์ฐ, ์ฃผ๋ณ ์ฅ์น๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์ํ ๋๋ง๋ค ์ธํฐ๋ฝํธ๋ฅผ ํตํด CPU ์ ๋ฌด๊ฐ ๋ฐฉํด๋ฅผ ๋ฐ๊ฒ ๋์ด CPU์ ์ฌ์ฉ์ ํจ์จ์ฑ์ด ๋จ์ด์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
- DMA๋ฅผ ์ฌ์ฉํ๋ฉด ๋ก์ปฌ ๋ฒํผ์์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ฝ์ด์ค๋ ์์ ์ CPU๊ฐ ๋ด๋นํ๋ ๊ฒ์ด ์๋๋ผ, DMA๊ฐ ๋ํํจ์ผ๋ก์จ CPU๋ ์๋ ํ๋ ์์ ์ ๋ฉ์ถ๊ณ ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ ํ์๊ฐ ์์ด์ง๋๋ค.
- DMA๋ ์ผ์ข ์ ์ปจํธ๋กค๋ฌ๋ก์ CPU๊ฐ ์ฃผ๋ณ ์ฅ์น๋ค์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์์ฒญ์ ์ํด ์์ฃผ ์ธํฐ๋ฝํธ๋นํ๋ ๊ฒ์ ๋ง์์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
๐ฎ ์ด์์ฒด์ ๋ ๋ค์ค ์ ์ ๊ฐ ํ๋์ ์ปดํจํฐ์ ์์์ ์ฌ์ฉํ ๋ ์์์ '๋ณดํธ'๋ฅผ ํฉ๋๋ค. ์ด๋ ํ ๋ณดํธ๋ฅผ ํ๋์ง ์ค๋ช ํ๊ณ ์๋๋ฆฌ์ค๋ฅผ ์ค๋ช ํด ์ฃผ์ธ์.
ํฌ๊ฒ ์ธ ๋ถ๋ถ์ผ๋ก ๋๋ ์ ์์ต๋๋ค.
[1] ์ ์ถ๋ ฅ์ฅ์น ๋ณดํธ
- A๊ฐ ํ๋ฆฐํฐ์ ์ธ์๋ฅผ ์์ฒญํ์ฌ ํ๋ฆฐํฐ๊ฐ A์ ์์ ์ ์ํ ์ค์ผ ๋, B๊ฐ ํ๋ฆฐํฐ ์์ฒญ์ ํ๋ฉด A์ ์์ ์ดํ์ B์ ์์ ์ ์ํํด์ผํฉ๋๋ค.
- ์ด์ ๊ด๊ณ๋ ํน๊ถ ๋ช ๋ น(in, out) ๋ช ๋ น์ ์ํ๋ฆฌ์ผ์ด์ ์์ ํ๋ ๊ฒ์ด ์๋ ์ด์์ฒด์ ๊ฐ ์ํํฉ๋๋ค.
[2] ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ
- A๊ฐ ์คํํ ํ๋ก์ธ์ค๋ B๊ฐ ์คํํ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ์ง ๋ชปํ๋๋ก ๋ง์ต๋๋ค.
- CPU์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ MMU(Memory Management Unit)๋ฅผ ๋์ด์ base, limit ๋ ์ง์คํฐ ๊ฐ์ ์ฝ์ด์ ํด๋น ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ถ์ ๋์ง ๋ชปํ๋๋ก ํฉ๋๋ค.
[3] CPU ๋ณดํธ
- while ( n = 1) ๊ณผ ๊ฐ์ด ์ค์ ํน์ ๊ณ ์๋ก ํ๋์ ํ๋ก์ธ์ค๊ฐ CPU์๊ฐ์ ๋ ์ ํ๋ ์ผ์ ๋ฐฉ์งํด์ผํฉ๋๋ค.
- ์ผ์ ์ฃผ๊ธฐ๋ก CPU์๊ฒ ํ์ด๋จธ๊ฐ ์ธํฐ๋ฝํธ๋ฅผ ๊ฑธ๋๋ก ํ๋ก๋ฅผ ์ค๊ณํฉ๋๋ค. ์ธํฐ๋ฝํธ๋ฅผ ๊ฑธ๋ฉด CPU๋ ์ง๊ธ ํ๋ ์ผ์ ๋ฉ์ถ๊ณ ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด์ผ๋ก ๋์ด๊ฐ๋๋ค. ์ด ์ฝ๋์๋ CPU ์๊ฐ์ด ๋ค๋ฅธ ๋ชจ๋ ํ๋ก์ธ์ค์๊ฒ ๊ณจ๊ณ ๋ฃจ ๊ฐ๋์ง, ํ ํ๋ก์ธ์ค์๊ฒ ์ง์ค๋๋์ง ์ฒดํฌํฉ๋๋ค.
๐ฎ synchronized์ ๋ํด ์๋ ๋ฐ๋ฅผ ์ ๋ถ ์๊ธฐํด ์ฃผ์ธ์.
- ๋ฉํฐ์ค๋ ๋ฉ ์ํฉ์ ์ ์ด๋ฅผ ์ํด synchronized๋ฅผ ์ ๊ทน ํ์ฉ.
- ์ด๋ค ๋ฉํฐ์ค๋ ๋ ์ํฉ์ด์๋์ง, ์ synchronized๋ฅผ ์ผ๋์ง, synchronized๊ฐ mutex๋ฅผ ์ด๋ป๊ฒ ๋ณด์ฅํ๋์ง
- ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ๊ตฌํํ๋์ง, ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์์๋์ง, ๋ค๋ฅธ ๋ฐฉ๋ฒ๊ณผ synchronized๋ฅผ ๋น๊ตํ์ ๋์ ์ฅ๋จ์ ์ ๋ฌด์์ธ์ง,
- ํน์ ์ํฉ์ ์ ์ํ ๋ค ์ด ๊ฒฝ์ฐ๋ผ๋ฉด ์ด๋ป๊ฒ ์ ์ฉ์ํฌ ์ ์์ ๊ฒ์ธ์ง
๐ฎ ํจ์ํธ์ถ๊ณผ ์์คํ ์ฝ์ ์ฐจ์ด์ ๋ํด์ ์ค๋ช ํด ์ฃผ์ธ์.
- ํจ์ํธ์ถ์ ์์ ์ด ์์ฑํ ํจ์ ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฅ๋ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ด๊ตฌ์,
- ์์คํ ์ฝ์ ์ด์์ฒด์ ์ ์ ์๋ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋๋ค.
๐ฎ ์ธํฐ๋ฝํธ์ ์์คํ ์ฝ์ ์ฐจ์ด์ ๋ํด์ ์ค๋ช ํด ์ฃผ์ธ์.
๐ฎ ์ค๋ ๋์ ๋ฉํฐ์ค๋ ๋์ ๋ํด์ ์ค๋ช ํด ์ฃผ์ธ์.
์ค๋ ๋์ ๋ฉํฐ์ค๋ ๋ ์ฃผ์ ๋ ๋ฉด์ ์์ ์ ๋ง ์ค์ํ ์ฃผ์ ์ ๋๋ค. L์ฌ์ ๊ฒฝ์ฐ ์ผ๋ง๋ ์จ๋ดค๋์ง ๊ผฌ๋ฆฌ ์ง๋ฌธ์ผ๋ก ๋ฑ์ฅํ ์ ๋ ฅ์ด ์์ต๋๋ค. ์์ฝ ๊ธ๋ก๋ ์ถฉ๋ถํ์ง ์์ ๊ฒ์ ๋๋ค. C ์์ค์ด ์๋๋๋ผ๋ Java, Python ์ธ์ด ๋ ๋ฒจ์์ ๋๋ ค๋ณด๋ฉด์ ์ดํด๋ณผ๋ฒํ ์ค์ํ ์ฃผ์ ์ ๋๋ค. ์์ธํ๊ฒ ์๊ณ ์ถ๋ค๋ฉด Covenant. ํ์ด์ฌ ์ฝ๋๋ก ๋ณด๋ ๋ฉํฐ์ค๋ ๋๋ฅผ ์ฐธ๊ณ ํ์ธ์!
- ์ค๋ ๋
- ํ๋ก์ธ์ค ๋ด์ ๋ ๋ฆฝ์ ์ธ ์คํ ํ๋ฆ ๋จ์์ ๋๋ค.
- ์ค๋ ๋๋ ํ๋ก์ธ์ค์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ, CPU ๋ฑ์ ์์์ ์ฌ์ฉํฉ๋๋ค.
- Stack๋ง ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ฉฐ Code, Data, Heap์ ์ฐ๋ ๋๊ฐ ๊ณต์ ํฉ๋๋ค.
- ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ๊ณ ๋ คํด์ ๊ตฌํํด์ผํฉ๋๋ค.
- ๋ฉํฐ ์ค๋ ๋
- ํ ๊ฐ์ ๋จ์ผ ์ดํ๋ฆฌ์ผ์ด์ (์์ฉํ๋ก๊ทธ๋จ)์ ์ฌ๋ฌ ์ค๋ ๋๋ก ๊ตฌ์ฑ ํ ์์ ํด์ผ ํฉ๋๋ค.
- 'ํ๊ธ'์์ ์ฑ๊ธ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ํ๋ฆฐํธ๋ฅผ ํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ์์ ์ ๋ถ๊ฐ๋ฅํ ๊ฒ์ ๋๋ค.
- ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊ณ ๋น์ฉ์ ๋๋ค. ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์์คํ ์์ ์๋ชจ ๊ฐ์ ๋ฐ ์ฒ๋ฆฌ๋ ์ฆ๊ฐ์ํฌ ์ ์์ต๋๋ค.
- ์ค๋ ๋๋ ์ด๋ฏธ ๊ณต์ ํ๊ณ ์๊ธฐ์ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์๊ธธ ํต์ ๋ถ๋ด์ ๊ฐ์ํด์ค๋๋ค.
- ๋ฉํฐ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋๋ฒ๊น ์ด ์ด๋ ต์ต๋๋ค. ์์ ๊ณต์ ๋ฌธ์ (์ผ๋ช ๊ต์ฐฉ์ํ) ๊ฐ ์๊น๋๋ค.
๐ฎ Deadlock์ ๋ฐ์ ์กฐ๊ฑด๊ณผ Decklock์ ๊นจ๊ธฐ ์ํด์ ์ด๋ป๊ฒ ํด์ผ ํ๋์?
๋ฐ๋๋ฝ์ด๋?
- ๋ ์ด์์ ํ๋ก์ธ์ค(์ค๋ ๋)๊ฐ ๊ณต์ ์์์ ํ๋ํ์ง ๋ชปํด ๋ ์ด์ ์คํํ ์ ์๊ณ ์์ํ ๊ธฐ๋ค๋ ค์ผํ๋ ์ํฉ์ ๋งํฉ๋๋ค.
๋ฐ๋๋ฝ ๋ฐ์ ์กฐ๊ฑด
๋ค์ ๋ค๊ฐ์ง ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํด์ผ Deadlock์ด ๋ฐ์ํฉ๋๋ค.
- ์ํธ๋ฐฐ์ (Mutual exclusion)
- (1) ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ฌ์ฉํ์ง ๋ชปํ๊ณ (2) ๊ฐ์๊ฐ ์ ํ์ ์ด๋ผ๋ฉด ์ํธ๋ฐฐ์ฌ ์กฐ๊ฑด์ ๋๋ค.
- ์ํธ๋ฐฐ์ ์ํฉ ์์. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ์ธ๋งํฌ์ด
- ์ ์ ๋๊ธฐ (Lock & Wait)
- ์ค๋ ๋๊ฐ ์์์ ์ ์ ํ๋ฉด ์์ ์ ๋ง์น ๋๊น์ง ์ด๋ฏธ ์ ์ ํ ์์์ ๋ด๋์๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
- ์ ์ ๋ถ๊ฐ (No Preemption)
- ์ค๋ ๋๊ฐ ๋ค๋ฅธ ์ค๋ ๋๋ก๋ถํฐ ์์์ ๋นผ์์ง ๋ชปํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
- ์์์ ์ ์ ํ ์ค๋ ๋๊ฐ ์์์ ๋ด๋์์ผ์ง ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์์์ ํ๋ํ ์ ์์ต๋๋ค.
- ์ํ ๋๊ธฐ (Circular wait)
- ๊ฐ ์ค๋ ๋๊ฐ ํ์ํ ์์์ด ์๋ก ๋ค๋ฅธ ์ค๋ ๋์ ์๋ ์ํฉ์ ๋๋ค.
- ๊ทธ๋ํ๋ก ๊ทธ๋ฆด์ ์ํ์ผ๋ก ๋ณด์ ๋๋ค.
๋ฐ๋๋ฝ์ ๊นจ๋ ๋ฐฉ๋ฒ
- ์ํธ๋ฐฐ์ ํผํ๋ ๋ฒ
- ๋์์ ์ฌ์ฉํด๋ ๊ด์ฐฎ์ ์์์ ์ฌ์ฉํฉ๋๋ค.
- ์์์ ์๋ฅผ ์ค๋ ๋ ์ ์ด์์ผ๋ก ๋๋ฆฝ๋๋ค.
- ์์์ ์ ์ ํ๊ธฐ ์ ํ์ํ ์์์ด ๋ชจ๋ ์๋์ง ํ์ธํฉ๋๋ค.
- ์ ๊ธ & ๋๊ธฐ ํผํ๋ ๋ฒ
- ๋๊ธฐ ํ์ง ์๋ ์ ๋ต์ ์ฌ์ฉํฉ๋๋ค.
- ์์์ ์ ์ ํ๊ธฐ ์ ์ ํ์ํ ์์์ด ์๋์ง ํ์ธํ๊ณ ์์์ด ๋ถ์กฑํ ๊ฒฝ์ฐ ๊ฐ์ง๊ณ ์๋ ์์์ ๋ชจ๋ ๋ด๋์ต๋๋ค.
- ๋ฌธ์ ์
- ๊ธฐ์ (Starvation): ํ ์ค๋ ๋๊ฐ ๊ณ์ํด์ ํ์ํ ์์์ ์ ์ ํ์ง ๋ชปํ๋ค. ์ ์ ํ๊ณ ์ ํ๋ ์์์ด ํ ๋ฒ์ ํ๋ํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ ์ด ์ํฉ์ด ๋๋๋ฌ์ง๋๋ค.
- ๋ผ์ด๋ธ๋ฝ (Livelock): ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผํ๊ธฐ์ ์์์ ํ๋ํ๋ค๊ฐ ๋ด๋๋ ์ํฉ์ ๋ฐ๋ณตํฉ๋๋ค.
- ์ ์ ๋ถ๊ฐ ํผํ๋ ๋ฒ
- ์์์ด ํ์ํ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ค๋ ๋์ ์์์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์์์ด ํ์ํ ์ค๋ ๋๊ฐ ์์์ ์์ ํ ์ค๋ ๋์๊ฒ ์์์ ์์ฒญํฉ๋๋ค.
- ์์์ ์์ ํ ์ค๋ ๋๊ฐ ๋ค๋ฅธ ์์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ค๋ฉด ์์ ์ด ์์ ํ ์์์ ๋ชจ๋ ํ์ด์ฃผ๊ณ ์ฒ์๋ถํฐ ์์ํฉ๋๋ค.
- ์ํ ๋๊ธฐ ํผํ๋ ๋ฒ
- ๋ฐ๋๋ฝ ๋ฐฉ์งํ๋ ํํ ์ ๋ ฅ์ ๋๋ค.
- ์ค๋ ๋์๊ฒ ์์๋๋ก ์์์ ํ ๋นํ๋ ๋ฐฉ์์ ๋๋ค.
- ํน์ ์์๋ค์ ์์๋ฅผ ์ค ๋ค์ ๊ฐ ์ค๋ ๋๋ค์ด ์์์ ์์ฒญํ ๋ ์ฐ์ ๋๊ฐ ์ฆ๊ฐํ๋ ์์๋ก ์์ฒญํ๊ฒ ํ๋ ๊ฒ์ ๋๋ค. ์์ฒญ ์์๋ณด๋ค ์ฐ์ ๋๊ฐ ํฐ ์์์ ์ ๋ถ ํด์ ํ ๊ฒฝ์ฐ์๋ง ์์ ์์ฒญ์ ํ๊ฐํ๋ ๋ฐฉ์์ ๋๋ค.
- ๋ฌธ์ ์
- ์์์ ํ ๋น ์์์ ์ฌ์ฉ ์์๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ์์์ ์์๋ฅผ ํ ๋นํ๊ธฐ ์ด๋ ต์ต๋๋ค.
๐ฎ OS์์ ํ๋ก์ธ์ค๋ CPU์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ MMU (Memory Management Unit) ๋ฅผ ๋์ด์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ ๊ทผํ์ง ๋ชปํฉ๋๋ค. ๊ทธ๋ฌ๋ GDB์ ๊ฐ์ ๋๋ฒ๊ฑฐ์ ๊ฒฝ์ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ ๊ทผํ์ฌ ์ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๊ฐ์ ์ฝ์ด์ฌ ์ ์์ต๋๋ค. ์ด๋ป๊ฒ ๊ฐ๋ฅํ์ง ๋์ ๋ฐฉ์์ ๋ํด์ ์ค๋ช ํ์ธ์.
GDB์ ๊ฐ์ ๋๋ฒ๊ฑฐ๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ์ ์๋ ๋ฅ๋ ฅ์ ์ด์ ์ฒด์ ์ ํน๋ณํ ๋ฉ์ปค๋์ฆ์ ํตํด ๊ฐ๋ฅํฉ๋๋ค. ๋๋ฒ๊ฑฐ๋ ํน์ ์์คํ
ํธ์ถ๊ณผ ๊ถํ์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๊ทผํ๊ณ ์กฐ์ํ ์ ์์ต๋๋ค.
1. ์์คํ
ํธ์ถ: ๋๋ฒ๊ฑฐ๋ `ptrace`์ ๊ฐ์ ์์คํ
ํธ์ถ์ ์ฌ์ฉํ์ฌ ๋์ ํ๋ก์ธ์ค์ ์ ๊ทผํ๊ณ , ํด๋น ํ๋ก์ธ์ค์ ์คํ์ ์ ์ดํฉ๋๋ค.
2. ์ด์์ฒด์ ์ ๊ถํ ๋ถ์ฌ: ๋๋ฒ๊ฑฐ๋ ์ด์์ฒด์ ๋ก๋ถํฐ ํน๋ณํ ๊ถํ(์: root ๊ถํ)์ ๋ถ์ฌ๋ฐ์, ๋ณด์ ๋งค์ปค๋์ฆ์ ์ฐํํ๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฝ๊ฑฐ๋ ์ธ ์ ์์ต๋๋ค.
3. ๋ฉ๋ชจ๋ฆฌ ์ฝ๊ธฐ/์ฐ๊ธฐ: ๋๋ฒ๊ฑฐ๋ ๋์ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๊ณ , `read`์ `write` ์์
์ ํตํด ๋ณ์์ ๊ฐ๊ณผ ์ํ๋ฅผ ๊ฒ์ฌํ๊ฑฐ๋ ์์ ํ ์ ์์ต๋๋ค.
4. ํ๋ก์ธ์ค ์ ์ด: ๋๋ฒ๊ฑฐ๋ ๋์ ํ๋ก์ธ์ค์ ์คํ์ ์ผ์ ์ค์ง, ์ฌ๊ฐ, ๋จ๊ณ๋ณ ์คํ ๋ฑ์ ์กฐ์ํ๋ฉฐ, ๋ธ๋ ์ดํฌํฌ์ธํธ ์ค์ ๊ณผ ๊ฐ์ ๋๋ฒ๊น
์์
์ ์ํํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก, ๋๋ฒ๊ฑฐ๋ ๊ฐ๋ฐ์๊ฐ ํ๋ก๊ทธ๋จ์ ๋ฒ๊ทธ๋ฅผ ์ฐพ๊ณ ์์ ํ๋ ๋ฐ ํ์์ ์ธ ๋๊ตฌ๋ก ์์ฉํ๋ฉฐ, ํ๋ก๊ทธ๋จ์ ๋์์ ์์ธํ ์กฐ์ฌํ ์ ์๊ฒ ํด์ค๋๋ค.
๐ฎ ์ด์ค๋ชจ๋์ ํน์ง๊ณผ ์ฅ์ ์ ๋ํด ์ค๋ช ํ์ธ์
์ด์ค ๋ชจ๋(Dual Mode) ์ด์์ ์ด์ ์ฒด์ ๊ฐ ์ฌ์ฉ์ ๋ชจ๋(User Mode)์ ์ปค๋ ๋ชจ๋(Kernel Mode)์ ๋ ๊ฐ์ง ๋ค๋ฅธ ์คํ ์ํ๋ฅผ ์ ๊ณตํ๋ ์์คํ
์
๋๋ค. ์ด ๋ฐฉ์์ ์์คํ
์ ์์ ์ฑ๊ณผ ๋ณด์์ ๊ฐํํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
1. ์ฌ์ฉ์ ๋ชจ๋์ ์ปค๋ ๋ชจ๋: ์ฌ์ฉ์ ๋ชจ๋์์๋ ์ ํ๋ ์ ๊ทผ ๊ถํ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๊ณ , ์ปค๋ ๋ชจ๋์์๋ ์ด์์ฒด์ ๊ฐ ์์คํ
์์๊ณผ ํ๋์จ์ด๋ฅผ ์ง์ ์ ์ดํ ์ ์์ต๋๋ค.
2. ๋ณด์ ๊ฐํ: ์ด์ค ๋ชจ๋๋ฅผ ํตํด ์ฌ์ฉ์ ํ๋ก์ธ์ค๊ฐ ์์คํ
์์์ ๋ํ ๋ฌด์ ํ ์ ๊ทผ์ ๋ง์, ์ด์ ์ฒด์ ์ ์์คํ
์ ๋ณด์์ ๊ฐํํฉ๋๋ค.
3. ์์ ์ฑ ํฅ์: ์๋ชป๋ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ์์คํ
์ ์ฒด์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ, ์ ์ฒด ์์คํ
์ ์์ ์ฑ์ ํฅ์์ํต๋๋ค.
4. ์์ ๊ด๋ฆฌ์ ํจ์จ์ฑ: ์ปค๋ ๋ชจ๋์์ ์ด์ ์ฒด์ ๋ ํ๋์จ์ด ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ฌ์ฉ์ ๋ชจ๋์์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํ์ ๊ด๋ฆฌํฉ๋๋ค.
๐ฎ 64๋นํธ์ 32๋นํธ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ์?
64๋นํธ์ 32๋นํธ ์ํคํ
์ฒ์ ์ฐจ์ด๋ ์ฃผ๋ก CPU๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐ์ดํฐ์ ์๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ง์ ๋ฐฉ์์์ ๋ํ๋ฉ๋๋ค.
1. ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ง์ ๋ฅ๋ ฅ: 64๋นํธ ์์คํ
์ 32๋นํธ ์์คํ
๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ์ฃผ์ ์ง์ ํ ์ ์์ผ๋ฉฐ (32๋นํธ๋ ์ต๋ 4GB, 64๋นํธ๋ 16EB๊น์ง), ์ด๋ ๋์ฉ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
2. ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฅ๋ ฅ: 64๋นํธ ํ๋ก์ธ์๋ ํ ๋ฒ์ 64๋นํธ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ด, 32๋นํธ ํ๋ก์ธ์์ ๋นํด ๋ ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
3. ์ฑ๋ฅ ๊ฐ์ : 64๋นํธ ์ํคํ
์ฒ๋ ๋ ๋ง์ ๋ ์ง์คํฐ์ ๋ ๋์ ๋ฐ์ดํฐ ๋ฒ์ค๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ, ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์ ๊ฐ์ ํฉ๋๋ค.
4. ์ํํธ์จ์ด ํธํ์ฑ: 64๋นํธ ์์คํ
์ 32๋นํธ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ ์ ์์ง๋ง, ๊ทธ ๋ฐ๋๋ ๋ถ๊ฐ๋ฅํ๋ฉฐ, ์ต์ ์ํํธ์จ์ด์ ์ด์์ฒด์ ๋ ์ ์ 64๋นํธ ์ต์ ํ๋ก ์ด๋ํ๊ณ ์์ต๋๋ค.
์ ๋ฐ์ ์ผ๋ก, 64๋นํธ ์ํคํ
์ฒ๋ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ง์ ๋ฅ๋ ฅ๊ณผ ๋ ๋์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ํตํด ํ๋ ์ปดํจํ
ํ๊ฒฝ์์์ ์ฑ๋ฅ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑ์ํค๋ ๋ฐ ์ค์ํฉ๋๋ค.
+ ํฌ์ธํฐ
64๋นํธ ์์คํ ์์๋ 32๋นํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ํธํ ๋ชจ๋๋ก ์คํํ ์ ์์ง๋ง, ์ด ๊ฒฝ์ฐ ํฌ์ธํฐ๋ 32๋นํธ๋ก ์ ํ๋ฉ๋๋ค.
32๋นํธ ์์คํ ์์๋ 64๋นํธ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐ฎ ๋ง์ฐ์ค๋ก ํ๊ธ ๋ฐ๋ก๊ฐ๊ธฐ๋ฅผ ํด๋ฆญํ์ ๋, ์ปดํจํฐ์์ ์ผ์ด๋๋ ๋ชจ๋ ์ผ์ ๋ํด์ ์ค๋ช ํ์ธ์.
Points: Interrupt, Process Scheduling, Disk Scheduling, Swapping, Thread
๋ง์ฐ์ค๋ก ํ๊ธ ๋ฐ๋ก๊ฐ๊ธฐ(๋จ์ถ ์์ด์ฝ)๋ฅผ ํด๋ฆญํ ๋ ์ปดํจํฐ์์ ์ผ์ด๋๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค
1. Interrupt (์ธํฐ๋ฝํธ): ์ฌ์ฉ์๊ฐ ๋ง์ฐ์ค๋ก ํ๊ธ ๋ฐ๋ก๊ฐ๊ธฐ๋ฅผ ํด๋ฆญํ๋ฉด, ๋ง์ฐ์ค ํด๋ฆญ์ ์ธํฐ๋ฝํธ๋ก ์์คํ
์ ์ ๋ฌ๋ฉ๋๋ค. ์ด ์ธํฐ๋ฝํธ๋ ํ์ฌ CPU๊ฐ ์ํ ์ค์ธ ์์
์ ์ผ์ ์ค๋จ์ํค๊ณ , ์ด์์ฒด์ ๊ฐ ์ฌ์ฉ์์ ์
๋ ฅ ์ฒ๋ฆฌ๋ฅผ ์์ํ๊ฒ ํฉ๋๋ค.
2. Process Scheduling (ํ๋ก์ธ์ค ์ค์ผ์ค๋ง): ์ด์์ฒด์ ๋ ํ๋ก์ธ์ค ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ธ ํ๋ก๊ทธ๋จ์ ์คํ์ํค๊ธฐ ์ํ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๊ณ , ์ด ํ๋ก์ธ์ค์ CPU ์๊ฐ์ ํ ๋นํฉ๋๋ค.
3. Disk Scheduling (๋์คํฌ ์ค์ผ์ค๋ง): ํ๊ธ ํ๋ก๊ทธ๋จ์ ์คํ ํ์ผ๊ณผ ํ์ํ ๋ฐ์ดํฐ๋ ๋์คํฌ์์ ์ฝํ์ ธ์ผ ํฉ๋๋ค. ์ด๋ ๋์คํฌ ์ค์ผ์ค๋ฌ๊ฐ ๋์คํฌ ์ฝ๊ธฐ/์ฐ๊ธฐ ์์ฒญ์ ๊ด๋ฆฌํ์ฌ, ํ์ํ ํ์ผ๋ค์ด ํจ์จ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋๋ฉ๋๋ค.
4. Swapping (์ค์ํ): ๋ฉ๋ชจ๋ฆฌ์ ์ถฉ๋ถํ ๊ณต๊ฐ์ด ์๋ ๊ฒฝ์ฐ, ์ค์ํ์ ํตํด ํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ ๋์คํฌ๋ก ์ฎ๊ธฐ๊ณ , ํ๊ธ ํ๋ก๊ทธ๋จ์ ์ํ ๊ณต๊ฐ์ ํ๋ณดํฉ๋๋ค.
5. Thread (์ค๋ ๋): ํ๊ธ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์์ฑํ์ฌ ๋ค์ํ ์์
์ ๋์์ ์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ฒ๋ฆฌ, ๋ฌธ์ ๋ก๋ฉ, ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
๋ฑ์ด ๋ณ๋์ ์ค๋ ๋์์ ์คํ๋ ์ ์์ต๋๋ค.
์ด ๊ณผ์ ์ ์ฌ์ฉ์์ ๊ฐ๋จํ ๋ง์ฐ์ค ํด๋ฆญ ํ๋์๋ ์ฌ๋ฌ ๋ณต์กํ ์์คํ
์ํธ์์ฉ์ด ์ผ์ด๋๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ด์์ฒด์ , ํ๋์จ์ด, ์ํํธ์จ์ด ๊ฐ์ ๊ธด๋ฐํ ํ๋ ฅ์ ํตํด ์ฌ์ฉ์ ์
๋ ฅ์ ์ ์ ํ ์๋ต์ผ๋ก ๋ณํ๋ฉ๋๋ค.
๐ฎ ๋ฉํฐํ์คํน, ๋ฉํฐํ๋ก์ธ์ค, ๋ฉํฐํ๋ก๊ทธ๋๋ฐ, ๋ฉํฐ์ค๋ ๋ ๊ฐ๊ฐ ์ฐจ์ด์ ์?
๋ชจ๋ ์ปดํจํฐ์์ ์ฌ๋ฌ ์์ ์ ๋์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ๋ค์ด์ง๋ง, ๊ฐ๊ฐ์ ๊ฐ๋ ๊ณผ ์ฌ์ฉ ์ํฉ์๋ ๋ช ํํ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
- ๋ฉํฐํ์คํน์ ์ฌ๋ฌ ์์ ์ ๋์ ์คํ์ฒ๋ผ ๋ณด์ด๊ฒ ํ๋ ๊ธฐ์ ์ ๋ํ ๊ฐ๋ ์ ๋๋ค.
- ๋ฉํฐํ๋ก์ธ์ค๋ ์ฌ๋ฌ ๋ ๋ฆฝ๋ ํ๋ก์ธ์ค๊ฐ ๋์์ ์คํ๋๋ ๊ฒฝ์ฐ์, ๋จ์ผ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ฌ๋ฌ ํ๋ก์ธ์ค๋ก ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
- ๋ฉํฐํ๋ก๊ทธ๋๋ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ ๋์์ ์ ์ฌํด CPU๊ฐ ์ด ์ค ํ๋๋ฅผ ์ ํํ ์ ์๋๋ก, ํจ์จ์ ์ผ๋ก ์์ ์ ์ ํํ๊ฒ ํ๋ ๊ฒ์ ๋๋ค.
- ๋ฉํฐ์ค๋ ๋ฉ์ ํ๋์ ํ๋ก์ธ์ค ๋ด์์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋ณ๋ ฌ๋ก ์คํ๋๋ ๊ฒ์ ๋งํฉ๋
Reference
https://github.com/brave-people/brave-tech-interview/blob/main/contents/os.md
https://minhamina.tistory.com/235