๐ง๐ป๐ป ๊ธ์ ์์ํ๊ธฐ์ ์์..
- ์ ์ ๊ฐ๋ฐ์ ์ธํฐ๋ทฐ์์ ์์ฃผ ๋์ค๋ ์ง๋ฌธ์ ๋ชจ์ ํ ๋ฒ์ ์ ๋ฆฌํ ํฌ์คํธ์ ๋๋ค.
- ์ ์ ๊ฐ๋ฐ์ ๊ธฐ์ ๋ฉด์ ์ ์ค๋นํ๋ ์ฌ๋์ผ๋ก, ์ ํํ์ง ์์ ์ ๋ณด๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ๋ ์ฌ๋ฐ๋ฅธ ๋ต์ ์๊ณ ์๋ค๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ฐ์ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
- ํ์๋ Java ๊ธฐ๋ฐ์ ๋ฐฑ์๋ ์์ง๋์ด๋ฅผ ๋ชฉํ๋ก ํ๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ธ ๋ด๋ถ์ Java ํน์ ๋ฐฑ์๋ ๊ด๋ จ ์ฉ์ด๊ฐ ๋์ฌ ์ ์์ต๋๋ค. Java๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด, ์์ ์ ์ง๋ฌด ์ธ์ด ๋ฐ ํ๋ ์์ํฌ ๊ด์ ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
๐ง๐ป๐ป ์ด์์ฒด์ ๋ฉด์ ์ง๋ฌธ
๐ก OS(์ด์์ฒด์ )๊ฐ ๋ฌด์์ธ์ง ์ค๋ช ํด์ฃผ์ค ์ ์๋์?
์ด์์ฒด์ ๋ ํ๋์จ์ด ์์์ ๊ด๋ฆฌํ๊ณ , ์์ฉ ํ๋ก๊ทธ๋จ์ ํ๋์จ์ด ์ฌ์ด๋ฅผ ์ค์ฌํ๋ ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธํฉ๋๋ค.
+ ์ธํฐํ์ด์ค : ์๋ก ๋ค๋ฅธ ๋ ๊ฐ์ ์์คํ ์ฌ์ด์์ ์ ๋ณด๋ ์ ํธ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์ ์ ์ด๋ ๊ฒฝ๊ณ๋ฅผ ์๋ฏธ
๐ก ์ปค๋์ด ๋ฌด์์ธ์ง ์ค๋ช ํ์ค ์ ์๋์?
๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ธฐ ์ํด์๋ ์ฃผ๊ธฐ์ต์ฅ์น์ ์ ์ฌ๋ ์ํ์ฌ์ผ ํฉ๋๋ค.
์ด์์ฒด์ ์ญ์ ํ๋ก๊ทธ๋จ์ด๊ธฐ ๋๋ฌธ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๊ฐ ๋์ด์ผ ํ๋, ์ด์์ฒด์ ์ ํฌ๊ธฐ๊ฐ ๋๋ฌด ์ปค์ ์ ์ฒด๋ฅผ ๋ค ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๊ฒ ๋๋ค๋ฉด ๋นํจ์จ์ ์ ๋๋ค. (๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ญ๋น)
๋ฐ๋ผ์ ์ปค๋(kernel)์ด๋ผ๊ณ ํ๋ ํญ์ ํ์ํ ์ด์์ฒด์ ์ ํต์ฌ ๋ถ๋ถ๋ง์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ์ฌ ์ด์์ฒด์ ๋ฅผ ์ฌ์ฉํ๊ฒ๋ ํฉ๋๋ค.
์ฆ, ์ปค๋์ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ๋ ์ด์์ฒด์ ์ ํต์ฌ ๋ถ๋ถ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
๐ก ๋ฉ๋ชจ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์์ญ์ ๋ฐ๋ผ์ ์ค๋ช ํด์ค ์ ์๋์?
1) ์ฝ๋ ์์ญ(ํ ์คํธ ์์ญ) :
์คํํ ํ๋ก๊ทธ๋จ์ ์ฝ๋๊ฐ ์ ์ฅ๋๋ ์์ญ์ผ๋ก, 'ํ ์คํธ' ์์ญ์ด๋ผ๊ณ ๋ ๋ถ๋ฆ ๋๋ค. CPU๋ ํด๋น ์ฝ๋ ์์ญ์ ์ ์ฅ๋ ๋ช ๋ น์ด๋ฅผ ํ๋์ฉ ๊ฐ์ ธ๊ฐ์ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
2) ๋ฐ์ดํฐ ์์ญ(static ์์ญ) :
์ ์ญ ๋ณ์์ ์ ์ ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์ญ์ผ๋ก, ํ๋ก๊ทธ๋จ์ด ์์ํ๋ ๋์์ ํ ๋น๋๋ฉฐ, ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ฉด ์๋ฉธํฉ๋๋ค.
3) ํ ์์ญ (Heap) :
์ฌ์ฉ์๊ฐ ์ง์ ๊ด๋ฆฌํ๋ ์์ญ์ด๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋์ ์ผ๋ก ํ ๋น ๋ฐ ํค์ ๋ฉ๋๋ค. ๋์ ์ผ๋ก ํ ๋น๋๋ฏ๋ก new๋ก ์์ฑํ object๊ฐ ๋ง์์ง ์๋ก ํ ์์ญ์ ํฌ๊ธฐ๊ฐ ๋์ด๋๊ฒ ๋ฉ๋๋ค.
4) ์คํ ์์ญ (Stack) :
ํจ์์ ํธ์ถ์ ๋ฐ๋ฅธ ์ง์ญ๋ณ์์ ๋งค๊ฐ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์ญ์ผ๋ก, ์ปดํ์ผ ์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค. ํจ์์ ํธ์ถ๊ณผ ํจ๊ป ํ ๋น๋๊ณ , ํจ์์ ํธ์ถ์ด ์ข ๋ฃ๋๋ฉด ์๋ฉธํฉ๋๋ค.
๐ก ๋ฉ๋ชจ๋ฆฌ์ ํ ์์ญ๊ณผ ์คํ ์์ญ์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์คํ ์์ญ (Stack Area) | ํ ์์ญ (Heap Area) | |
์ ์ฅํ๋ ๋ฐ์ดํฐ | ์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์ | ๋์ ์ผ๋ก ์์ฑ๋ ๋ณ์ (new ์ฐ์ฐ์) |
ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ ํ์ด๋ฐ | ์ปดํ์ผ (Compile) | ๋ฐํ์ (Runtime) |
ํฌ๊ธฐ ์ ํ | ์คํ ํฌ๊ธฐ๊ฐ ์ ํ๋์ด ์๋ค. | ํฌ๊ธฐ๊ฐ ์ ํ๋์ด์์ง ์๋ค. (๋์ด๋จ) |
์ฃผ์ ํ ๋น ๋ฐฉํฅ | ๋์ ์ฃผ์ → ๋ฎ์ ์ฃผ์ | ๋ฎ์ ์ฃผ์ → ๋์ ์ฃผ์ |
๋น๊ต | ํ์ ๋นํด ๋น ๋ฅด๋ค, ํจ์์ ์ข ๋ฃ์ ๋ฐ๋ผ ์๋ฉธ๋๋ฏ๋ก ๋ณ๋ค๋ฅธ ๊ด๋ฆฌ๊ฐ ํ์ ์๋ค. | ์คํ์ ๋นํด ๋๋ฆฌ๋ค, ์ง์ ํ ์์ญ ๊ด๋ฆฌ ํ์ |
๋ ์์ญ์ ๊ฐ์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํ๋๋ฐ, ์คํ์ ๋์ ์ฃผ์์์ ๋ฎ์ ์ฃผ์๋ก, ํ์ ๋ฎ์ ์ฃผ์์์ ๋์ ์ฃผ์๋ก ์ฑ์์ง๊ธฐ ๋๋ฌธ์ ์๋ก์ ์์ญ์ ๋๊ฐ ์นจ๋ฒํ๋๋์ ๋ฐ๋ผ heap overflow, stack overflow๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ฐธ๊ณ ๋ก, ๋ฉ๋ชจ๋ฆฌ์ ์์ชฝ์ ์์นํ ์๋ก ๋ฎ์ ์ฃผ์์ด๋ฉฐ, ์๋์ชฝ์ ์์นํ ์๋ก ๋์ ์ฃผ์์ ๋๋ค.
๐ก ๋ฉ๋ชจ๋ฆฌ์ ํ ์์ญ์ ๋๋ฌด ํฌ๊ฒ ์ก์ผ๋ฉด ์ด๋ค ์ผ์ด ์๊ธธ๊น์?
์์์ ์ธ๊ธํ๋ฏ์ด, ํ ์์ญ์ ์คํ ์์ญ๊ณผ ๋ค๋ฅด๊ฒ ์ง์ ์์ฑ๋ ๋ณ์๋ฅผ ์ ๊ฑฐ๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
๋ง์ฝ ๋ฉ๋ชจ๋ฆฌ์ ํ ์์ญ์ด ๋๋ฌด ํฌ๋ค๋ฉด, ๋์ ํ ์์ญ์ ์กด์ฌํ๋ ๋์ ๋ณ์์ ๋ํด ์ฐธ์กฐ ์ฌ๋ถ๋ฅผ ํ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ Garbage Collect์ ์ํ์๊ฐ์ด ๋๋ฌด ๊ธธ์ด์ง๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ Java์ JVM์์๋ ์ฒ์๋ถํฐ ํ ์์ญ์ ํฌ๊ฒ ์ก์ง ์๊ณ , Heap ์์ญ์ด ๊ฝ ์ฐผ์ ๋ GC ์งํ ํ Heap ์์ญ์ ํ์ฅํ๊ฒ ๋ฉ๋๋ค.
๐ก ํ๋ก์ธ์ค์ ์ฐ๋ ๋์ ๋ํด ์ค๋ช ํ๊ณ , ๋์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
1) ํ๋ก์ธ์ค
- ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ(์ฃผ๊ธฐ์ต์ฅ์น)์ ์ ์ฌ๋์ด ์คํ๋๋ ํ๋ก๊ทธ๋จ์ ์๋ฏธํฉ๋๋ค.
- PCB, code, data, heap, stack ์์ญ์ ๊ฐ์ต๋๋ค.
- ํ๋ก์ธ์ค๋ณ ๊ฐ๊ฐ์ ์์ญ์ ๊ฐ๊ธฐ ๋๋ฌธ์ ๋ณ๋ค๋ฅธ ๋๊ธฐํ ์์ ์ด ํ์ํ์ง ์์ต๋๋ค.
- ํ๋ก์ธ์ค๋ณ ๊ฐ๊ฐ์ ์์ญ์ ๊ฐ๊ธฐ ๋๋ฌธ์ context switching ๋น์ฉ์ด ํฝ๋๋ค.
- ํ๋ก์ธ์ค ์ฐ๋ ๋๋ณด๋ค ๋ฌด๊ฒ๊ธฐ ๋๋ฌธ์ ์์ฑ ์๊ฐ์ด ๋ ๊น๋๋ค.
- ํ ํ๋ก์ธ์ค์์ ์ค๋ฅ๊ฐ ์๊ธฐ๋๋ผ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค.
2) ์ฐ๋ ๋
- ํ ํ๋ก์ธ์ค ๋ด์ ์คํ ๋จ์, ์คํ์ ํ๋ฆ์ ์๋ฏธํฉ๋๋ค.
- stack ์์ญ๋ง ๋ณ๋๋ก ๊ฐ๊ณ , ๋๋จธ์ง ์์ญ(code, data, heap)์ ๋ํด์๋ ํด๋น ์ฐ๋ ๋๋ฅผ ํฌํจํ ํ๋ก์ธ์ค์ ์์์ ๊ณต์ ํฉ๋๋ค.
- stack ์์ญ ์ธ๋ถ์ ๊ณต์ ์์์ ๋ํด ์ ๊ทผ ์ ๋๊ธฐํ ์์ ์ด ํ์ํฉ๋๋ค.
- stack ์์ญ ์ธ๋ถ๋ฅผ ๊ณต์ ํ๋ฏ๋ก ์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ์ด ์ ์ต๋๋ค.
- ์ฐ๋ ๋๋ ํ๋ก์ธ์ค๋ณด๋ค ๊ฐ๋ณ๊ธฐ ๋๋ฌธ์ ์์ฑ ์๊ฐ์ด ๋ ์งง์ต๋๋ค.
- ํ ์ฐ๋ ๋์์ ์ค๋ฅ๊ฐ ์๊ธฐ๋ฉด, ๋๋จธ์ง ํ๋ก์ธ์ค ๋ด์ ์ฐ๋ ๋์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
๐ก ์ปจํ ์คํธ ์ค์์นญ์ ๋ํด์ ์ค๋ช ํ๊ณ , ์ ์ปจํ ์คํธ ์ค์์นญ์ด ํ์ํ์ง ์ค๋ช ํด์ฃผ์ธ์.
๋ฌธ๋งฅ๊ตํ(context switching)์, ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ์ํฉ์์ ํ์ฌ ์งํ์ค์ธ Task(ํ๋ก์ธ์ค ํน์ ์ฐ๋ ๋)์ ์ํ๋ฅผ PCB์ ์ ์ฅํ๊ณ , ๋ค์์ ์งํํ Task์ ์ํ ๊ฐ์ ์ฝ์ด ๋ ์ง์คํฐ์ ์ ์ฌํ๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค.
์๋ฅผ ๋ค์ด, CPU Cycle์ ์๋๋ I/O ์์ ์ ๋นํด ๊ต์ฅํ ๋น ๋ฆ ๋๋ค.
I/O ์์ ์ด ์คํ๋๊ณ Blocking ๋๋ค๋ฉฐ, CPU๋ ์๋ฌด๋ฐ ์ผ์ ํ์ง ์๊ณ ์ค๋ ๊ธฐ๊ฐ๋์ ์ฌ๊ฒ ๋ฉ๋๋ค.
์ปจํ ์คํธ ์ค์์นญ์ ํตํด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ฐ๋ ๋์ ์์ ์ผ๋ก ์ ํํ๋ค๋ฉด, CPU์ ์ฌ์ฉ๋ฅ ์ ๋์ผ ์ ์์ต๋๋ค.
์ปจํ ์คํธ ์ค์์นญ์ ์งํํ๋ ๋์ ๋ค๋ฅธ ์์ ์ ํ ์ ์๋๋ฐ(์ค๋ฒํค๋), ๋ณดํต ์ด ์๊ฐ๋ณด๋ค I/O ์์ ์ด ๋ ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ปจํ ์คํธ ์ค์์นญ์ ํ๋ ๊ฒ์ด ํจ์จ์ ์ ๋๋ค. ๋ํ ์ปจํ ์คํธ ์ค์์นญ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
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 ๋ฑ์ ์ํ๋ฅผ ์ ์ฅ
- ํ๋ก๊ทธ๋จ ์นด์ดํฐ : ํ๋ก์ธ์ค๊ฐ ๋ค์์ ์คํํ ๋ช ๋ น์ด์ ์ฃผ์
- CPU ๋ ์ง์คํฐ
- CPU ์ค์ผ์ฅด๋ง ์ ๋ณด : ํ๋ก์ธ์ค์ ์ฐ์ ์์, ์ค์ผ์ค ํ์ ๋ํ ํฌ์ธํฐ ๋ฑ
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ณด : ํ์ด์ง ํ ์ด๋ธ ๋๋ ์ธ๊ทธ๋จผํธ ํ ์ด๋ธ ๋ฑ๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ํฌํจ
- ์ ์ถ๋ ฅ ์ํ ์ ๋ณด : ํ๋ก์ธ์ค์ ํ ๋น๋ ์ ์ถ๋ ฅ ์ฅ์น๋ค๊ณผ ์ด๋ฆฐ ํ์ผ ๋ชฉ๋ก
- ์ด์นด์ดํ ์ ๋ณด : ์ฌ์ฉ๋ CPU ์๊ฐ, ์๊ฐ์ ํ, ๊ณ์ ๋ฒํธ ๋ฑ
๐ก ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์์ ํ ํญ์ ์ค๋ฅ๊ฐ ์๊ธฐ๋๋ผ๋, ๋ค๋ฅธ ํญ์ ์ํฅ์ ๋ผ์น์ง ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ฐ๊ฐ์ ํฌ๋กฌ ํญ์ ํ๋ก์ธ์ค์ผ๊น์? ์ฐ๋ ๋์ผ๊น์?
ํฌ๋กฌ ํญ์ด ์ฐ๋ ๋๋ผ๋ฉด, ํ ํฌ๋กฌ ํญ์์ ์ค๋ฅ๊ฐ ์๊ธฐ๋ฉด ๋ค๋ฅธ ํฌ๋กฌ ํญ์๋ ์ํฅ์ด ๊ฐ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํ ํญ์ ์ค๋ฅ๊ฐ ์๊ธฐ๋๋ผ๋ ๋ค๋ฅธ ํญ์ ์ํฅ์ ๋ผ์น์ง ์๋๋ค๋ ํน์ฑ์ ์ํด, ํฌ๋กฌ ํญ์ ๋ณ๊ฐ์ ํ๋ก์ธ์ค์ธ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๐ก ๋ฉํฐ ์ฐ๋ ๋์ ๋ฉํฐ ํ๋ก์ธ์ค๋ฅผ ๋น๊ตํด์ฃผ์ธ์.
1) ๋ฉํฐ ์ฐ๋ ๋
ํ๋์ ํ๋ก์ธ์ค๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์ฐ๋ ๋๋ก ๊ตฌ์ฑํด ์์์ ๊ณต์ ํ๋ฉด์ ์์ ์ ์ํํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋ฉํฐ ํ๋ก์ธ์ค๋ณด๋ค ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ , Context Switching์ด ๋น ๋ฅธ ์ฅ์ ์ด ์์ง๋ง, ์ค๋ฅ๋ก ์ธํด ํ๋์ ์ฐ๋ ๋๊ฐ ์ข ๋ฃ๋๋ฉด ์ ์ฒด ์ฐ๋ ๋๊ฐ ์ข ๋ฃ๋ ์ ์๋ค๋ ์ ๊ณผ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
2) ๋ฉํฐ ํ๋ก์ธ์ค
ํ๋์ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์ค๋ก ๊ตฌ์ฑํด ํ๋ก์ธ์ค๊ฐ ๋ณ๋ ฌ์ ์ผ๋ก ์์ ์ ์ํํ๋ ๊ฒ์ ๋๋ค.
ํ๋์ ํ๋ก์ธ์ค๊ฐ ์ฃฝ๋๋ผ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํฅ์ ๋ผ์น์ง ์์ง๋ง, ๋ฉํฐ ์ฐ๋ ๋๋ณด๋ค ๋ง์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐจ์งํฉ๋๋ค.
3) ์ ๋ฉํฐ ์ฐ๋ ๋๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํ๋๊ฐ?
ํ๋์ ํ๋ก๊ทธ๋จ ์์์ ์ฌ๋ฌ ์์ ์ ํด๊ฒฐํ๋ ๊ฒ์ด ๋์ฑ ํจ์จ์ ์ด๊ณ , Context Switching ์, Stack ์์ญ๋ง ์ด๊ธฐํํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋ ๋น ๋ฆ ๋๋ค. ํ๋ก์ธ์ค ์์ฑ์ ์์ ํ ๋นํ๋ ์ฝ์ด ์ค์ด๋ค์ด ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ์ฅ์ ๋ ์์ต๋๋ค.
4) Python์์์ ๋ฉํฐ ํ๋ก์ธ์ค
ํ์ด์ฌ์ GIL(Global Interpreter Lock) ์ ์ฑ ์ ์ฌ์ฉํฉ๋๋ค. ํ๋์ ํ๋ก์ธ์ค ์์ ๋ชจ๋ ์์์ Lock์ ๊ธ๋ก๋ฒํ๊ฒ ๊ด๋ฆฌํจ์ผ๋ก์จ ํ ๋ฒ์ ํ๋์ ์ฐ๋ ๋๋ง ์์์ ์ปจ๋๋กคํด ๋์ํ๋๋ก ํฉ๋๋ค. GIL ๋๋ถ์ ์์ ๊ด๋ฆฌ๋ฅผ ๋ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ผ๋, CPU ์์ ์ด ๋ง์ ๊ฒฝ์ฐ์๋ ๋ฉํฐ ์ฐ๋ ๋๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์๋ ๊ฐ์ ์ ๋๋ผ์ง ๋ชปํ ์ ์์ต๋๋ค.
I/O ๋์์ด ๋ง์ ํ๋ก๊ทธ๋จ์์๋ ๋ฉํฐ ์ฐ๋ ๋๋ง์ผ๋ก ํฐ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
CPU ๋์์ด ๋ง์ ๊ฒฝ์ฐ, ๋ฉํฐ ํ๋ก์ธ์ค๋ฅผ ์ด์ฉํด์ ๋ณ๋ ฌ์ ์ผ๋ก ์ํ์ด ๊ฐ๋ฅํฉ๋๋ค.
๐ก ์ฐ๋ ๋๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋นํ๋ 2๊ฐ์ง์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์ฐ๋ ๋๋, ๋ ๋ฆฝ์ ์ผ๋ก ์คํ ์์ญ๊ณผ PC Register๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค. ๊ทธ ์ด์ ๋ ์ฐ๋ ๋์ ์ ์์ ์ปจํ ์คํธ ์ค์์นญ์ ์์ต๋๋ค.
1) ๋ ๋ฆฝ์ ์ผ๋ก ์คํ ์์ญ์ ๊ฐ๋ ์ด์ :
์คํ ์์ญ์ ํจ์์ ์คํ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ๋ ๋ฆฝ์ ์ผ๋ก ์คํ์ ๊ฐ๋๋ค๋ ๊ฒ์ ๊ณง ๋ ๋ฆฝ์ ์ผ๋ก ํจ์ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ฆ, ํ๋ก์ธ์ค ๋ด์ ๋ ๋ฆฝ์ ์ธ ์คํ ํ๋ฆ์ ๋ง๋ค๊ธฐ ์ํด ์ฐ๋ ๋๋ง๋ค ์คํ ์์ญ์ ๊ฐ์ต๋๋ค.
2) ๋ ๋ฆฝ์ ์ผ๋ก PC Register๋ฅผ ๊ฐ๋ ์ด์ :
PC Register ๊ฐ์, ์ฐ๋ ๋๊ฐ ๋ช ๋ น์ด๋ฅผ ์ด๋๊น์ง ์ํํ๋ ์ง๋ฅผ ๋ํ๋ ๋๋ค. ์ฐ๋ ๋๋ CPU๋ฅผ ํ ๋น๋ฐ์๋ค๊ฐ, ์ค์ผ์ค๋ฌ์ ์ํด์ ์ ์ ๋นํด ์ปจํ ์คํธ ์ค์์นญ์ด ์ผ์ด๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ค์ ํด๋น ์ฐ๋ ๋๊ฐ ์คํ๋ ๋ ์ด๋๊น์ง ์คํ์ด ๋์๋์ง ์์์ผ ํ๋ฏ๋ก ๋ ๋ฆฝ์ ์ผ๋ก PC Register ๊ฐ์ ๊ฐ๊ฒ ๋ฉ๋๋ค.
๐ก ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์์ ์ฃผ์ํด์ผ ํ ์ ์ ๋ํด ์ค๋ช ํ ์ ์๋์?
๋ฉํฐ ์ฐ๋ ๋๋ ์๋ก ํ ํ๋ก์ธ์ค ๋ด์ ์์์ ๊ณต์ ํ๋ฏ๋ก ๋๊ธฐํ๋ฅผ ํญ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
+ ๋๊ธฐํ๊ฐ ๋ฌด์์ธ์ง Java ์ฑํฐ์์ ์ฐธ๊ณ .
๐ก ๋๊ธฐ์ ๋น๋๊ธฐ์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
๋๊ธฐ๋ ์์ฒญ๊ณผ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๋์์ ์ผ์ด๋๋ค๋ ์ฝ์์ ๋๋ค. ์์ฒญ์ ํ๋ฉด, ์๊ฐ์ด ์ผ๋ง๊ฐ ๊ฑธ๋ฆฌ๋์ง ์์ฒญํ ์๋ฆฌ์์ ๊ฒฐ๊ณผ๊ฐ ์ฃผ์ด์ ธ์ผ ํฉ๋๋ค. ์ค๊ณ๊ฐ ๋งค์ฐ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ด์ง๋ง, ๊ฒฐ๊ณผ๊ฐ ์ฃผ์ด์ง ๋๊น์ง ์๋ฌด๊ฒ๋ ๋ชปํ๊ณ ๋๊ธฐํด์ผ ํฉ๋๋ค.
์ ํํ ์ค๋ช ์ผ๋ก๋, Aํจ์๊ฐ Bํจ์๋ฅผ ํธ์ถํ ๋, Bํจ์์ ๊ฒฐ๊ณผ๋ฅผ A๊ฐ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋๋ค.
๋น๋๊ธฐ๋ ๋ฐ๋๋ก ์์ฒญ๊ณผ ๊ฒฐ๊ณผ๊ฐ ๋์์ ์ผ์ด๋์ง ์์ ๊ฒ์ด๋ผ๋ ์ฝ์์ ๋๋ค. ๋๊ธฐ๋ณด๋ค ๋ณต์กํ ๋ฐฉ์์ด์ง๋ง, ๊ทธ ์๊ฐ๋์ ๋ค๋ฅธ ์์ ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
์ ํํ ์ค๋ช ์ผ๋ก๋, Aํจ์๊ฐ Bํจ์๋ฅผ ํธ์ถํ ๋, Bํจ์์ ๊ฒฐ๊ณผ๋ฅผ B๊ฐ ์ฒ๋ฆฌํ๊ณ A์๊ฒ callback์ผ๋ก ์๋ ค์ฃผ๋ ๊ฒ์ ๋๋ค.
๐ก Blocking๊ณผ Non-Blocking์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Blocking์, Aํจ์๊ฐ Bํจ์๋ฅผ ํธ์ถํ ๋, B ํจ์๊ฐ ์์ ์ ์์ ์ด ์ข ๋ฃ๋๊ธฐ ์ ๊น์ง A ํจ์์๊ฒ ์ ์ด๊ถ์ ๋๋ ค์ฃผ์ง ์๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ฆ, B ํจ์๊ฐ ์ข ๋ฃ๋ ๋๊น์ง A ํจ์๋ ๋ค๋ฅธ ์ผ์ ์ํํ ์ ์์ต๋๋ค.
Non-Blocking์, Aํจ์๊ฐ Bํจ์๋ฅผ ํธ์ถํ ๋, Bํจ์๊ฐ A ํจ์์๊ฒ ๊ณง๋ฐ๋ก ์ ์ด๊ถ์ ๋๋ ค์ฃผ๊ฒ ๋ฉ๋๋ค. A ํจ์๋ ๊ณง๋ฐ๋ก ์ ์ด๊ถ์ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ๋ค๋ฅธ ์ผ์ ์ํํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ Blocking != Sync, Non-blocking != Async ์ ๋๋ค.
๋๊ธฐ/๋น๋๊ธฐ = ํธ์ถ๋นํ ํจ์์ ์ข ๋ฃ๋ฅผ ๋๊ฐ ์ฒ๋ฆฌํ๋๋
blocking/non-blocking = ์ ์ด๊ถ์ด ๋๊ตฌ์๊ฒ ๋์๊ฐ๋๋
๐ก ํ๋ก์ธ์ค์ ์ข ๋ฅ๋ ๋ฌด์์ด ์๋์ง ์ค๋ช ํด์ฃผ์ธ์.
- ์์ ํ๋ก์ธ์ค
- fork๋ก ์์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ ์ํ, ๋ถ๋ชจ์ ๋ฐ์ดํฐ, ํ, ์คํ, PCB ๋ณต์ฌ
- ๋ฐ๋ชฌ ํ๋ก์ธ์ค
- ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋์ํ๋ฉด์ ํน์ ํ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ํ๋ก์ธ์ค
- ๊ณ ์ ํ๋ก์ธ์ค
- ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๋จผ์ ์ข ๋ฃ๋์ด ๊ณ ๋ฆฝ๋ ์์ ํ๋ก์ธ์ค
- ์ข๋น ํ๋ก์ธ์ค
- ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋์์์๋ ๋ถ๊ตฌํ๊ณ ๋ถ๋ชจ ํ๋ก์ธ์ค๋ก๋ถํฐ ์์ ์ข ๋ฃ์ ๋ํ ์น์ธ์ ๋ฐ์ง ๋ชปํ ํ๋ก์ธ์ค
๐ก Race Condition๊ณผ Critical Section์ด ๋ฌด์์ด๊ณ , ๊ฒฝ์์ํ๋ฅผ ๋ง๊ธฐ ์ํด ์ด๋ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋์ง ์ค๋ช ํด์ฃผ์ธ์.
๋ ๊ฐ ์ด์์ ์ฐ๋ ๋๊ฐ ๊ณต์ ์์์ ๋ํด ์ ๊ทผํ๋ ค๊ณ ์๋ก ๊ฒฝ์ํ๋ ๊ฒ์ 'Race Condition(๊ฒฝ์์ํ)'๋ผ๊ณ ํฉ๋๋ค.
์ด ๊ณต์ ์์์ด ์กด์ฌํ๋ ๊ตฌ๊ฐ์ผ๋ก Race Condition์ด ์ผ์ด๋ ์ ์๋ ์์ญ์ 'Critical Section(์๊ณ์์ญ)'์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๋ฌํ ์๊ณ์์ญ์ ๋ํ ๊ฒฝ์์ํ๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด์ ํ ๊ณต์ ์์์ ๋ํด์ ํ ์ฐ๋ ๋์๋ง ์ ๊ทผ์ ํ๋ฝํ๋๋ก ํ๋ '์ํธ๋ฐฐ์ (Mutual Exclusion)'๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๐ก 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์ด ์ผ์ด๋์ง ์์ต๋๋ค.
๐ก Mutex(๋ฎคํ ์ค)์ Semaphore(์ธ๋งํฌ์ด)์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- ๋ฎคํ
์ค
- ์ค์ง 1๊ฐ๋ง์ ์ค๋ ๋(๋๋ ํ๋ก์ธ์ค)๋ง ์ ๊ทผ ํ ์ ์๋ค.
- 1๊ฐ๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ฏ๋ก ๋ฐ๋์ ๋ฝ์ ํ๋ํ ํ๋ก์ธ์ค๊ฐ ๋ฝ์ ํด์ ํด์ผ ํ๋ค.
- ์ธ๋งํฌ์ด
- ์ธ๋งํฌ์ด ๋ณ์๋งํผ์ ์ค๋ ๋(๋๋ ํ๋ก์ธ์ค)๊ฐ ์ ๊ทผ ํ ์ ์๋ค.
- ํ์ฌ ์ํ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ธ๋งํฌ์ด๋ฅผ ํด์ ํ ์ ์๋ค.
- ์ด์ง ์ธ๋งํฌ์ด๋ ๋ฎคํ ์ค์ ๋์ผํ๋ค๊ณ ๋ณผ ์ ์๋ค. ์ด์ง ์ธ๋งํฌ์ด๊ฐ ์๋ ๋๋จธ์ง ์ธ๋งํฌ์ด๋ฅผ ์นด์ดํ ์ธ๋งํฌ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ฎคํ ์ค์ ์ธ๋งํฌ์ด๋ฅผ ์ฌ์ฉํด ์๊ณ์์ญ์์์ ๊ฒฝ์์ํ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
๐ก CPU Scheduling์ด ๋ฌด์์ธ์ง ์ค๋ช ํ๊ณ , CPU ์ค์ผ์ค๋ง์ ์ข ๋ฅ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Ready Queue์ ์๋ ํ๋ก์ธ์ค ์ค, ๋ค์์ CPU๋ฅผ ํ ๋นํ ํ๋ก์ธ์ค๋ฅผ ์ ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ CPU Scheduling์ด๋ผ๊ณ ํฉ๋๋ค.
<๋น์ ์ >
- First Come First Served(FCFS)
- ํ์ ๋์ฐฉํ ์์๋๋ก ์คํ
- ์ต์ ์ ๊ฒฝ์ฐ ์ค๋ ๊ฑธ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋ค์ด์ด
- Shortest Job First (SJF)
- CPU ์ ์ ์๊ฐ์ด ๊ฐ์ฅ ์งง์ ํ๋ก์ธ์ค์ CPU๋ฅผ ๋จผ์ ํ ๋นํ๋ ๋ฐฉ์
- ๊ธฐ์ ๋ฌธ์ ๋ฐ์
- Highest Response Ratio Next
- ์ค๋น ํ์์ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค ์ค ์๋ต๋น์จ์ด ๊ฐ์ฅ ํฐ๊ฒ์ ๋จผ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
- ์๋น์ค ๋ฐ์ ์๊ฐ์ด ๋ถ๋ชจ, ๋๊ธฐ ์๊ฐ์ด ๋ถ์์ ์์ด ๋๊ธฐ ์๊ฐ์ด ํฐ ๊ฒฝ์ฐ ์ฐ์ ์์๊ฐ ๋์์ง๋ค.
<์ ์ >
- Round Robin(RR)
- ์๊ฐ ํ ๋น๋์ ๋งค ํ๋ก์ธ์ค์ ์ฃผ๊ณ ํ ๋น๋ ์๊ฐ ์์ ์๋ฃํ์ง ๋ชปํ ํ๋ก์ธ์ค๋ ๋ ๋ ํ์ ๋งจ ๋ค์ ๋ฐฐ์นํ๋ ๋ฐฉ์
- Shortest Remaining Time First (SRTF)
- CPU ์ ์ ์๊ฐ์ด ๊ฐ์ฅ ์งง์ ํ๋ก์ธ์ค์ CPU๋ฅผ ๋จผ์ ํ ๋นํ๋ ๋น์
- SJF ๋ฐฉ์์์ ์ ์ ๋ฐฉ์๋ง ๋ค๋ฅด๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
- ๊ธฐ์ ๋ฌธ์ ๋ฐ์
- Multilevel Feedback Queue(๋ค์ค ๋ ๋ฒจ ํผ๋๋ฐฑ ํ)
- ๊ฐ ๋จ๊ณ๋ง๋ค ํ๋์ ํ๋ฅผ ๋๊ณ , ํ ์๊ฐ ํ ๋น๋ ๋ด์ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ฉด ๋ค์ ํ๋ก ๋ณด๋ด๋ ๋ฐฉ์
- ๋จ๊ณ๊ฐ ์ปค์ง์๋ก ์๊ฐ ํ ๋น๋์ด ์ปค์ง๋ ํํ
๐ก CPU์ ์ฑ๋ฅ ์ฒ๋์ ๋ฌด์์ด ์๋์ง ์ค๋ช ํด์ฃผ์ธ์.
- CPU Utilization(์ด์ฉ๋ฅ ) : CPU๊ฐ ๋์ง ์๊ณ ์ผํ ์๊ฐ
- Throughput(์ฒ๋ฆฌ๋) : ๋จ์ ์๊ฐ๋น ์ฒ๋ฆฌ๋, CPU๊ฐ ์ผ๋ง๋ ๋ง์ ์ผ์ ํ๋์ง
- Turnaround Time(์์์๊ฐ, ๋ฐํ์๊ฐ) : CPU ์ฌ์ฉ ์๊ฐ + ๊ธฐ๋ค๋ฆฐ ์๊ฐ (์งง์์๋ก ์ข๋ค)
- Waiting Time(๋๊ธฐ์๊ฐ) : ํ๋ก์ธ์ค๊ฐ Ready Queue์์ ๊ธฐ๋ค๋ฆฐ ์ ์ฒด ์๊ฐ์ ํฉ
- Response Time(์๋ต์๊ฐ) : ํ๋ก์ธ์ค๊ฐ Ready Queue์ ๋ค์ด๊ฐ์ ์ต์ด๋ก CPU ์ป๊ธฐ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ
๐ก ์ ์ (preemption)๊ณผ ๋น์ ์ (non-preemption)์ด ๋ฌด์์ธ์ง ์ค๋ช ํด์ฃผ์ธ์.
์ ์ ๋ฐฉ์์, ํน์ ํ๋ก์ธ์ค๊ฐ ์คํ ์ค์ด๋๋ผ๋ CPU ํ ๋น์ ๋บ์ด ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ถ์ฌํ ์ ์๋ ๋ฐฉ์์ ๋๋ค.
System Call, Time Quantum, Interrupt ๋ฑ์ ์ํด ์ ์ ์ด ์ผ์ด๋ฉ๋๋ค.
๋น์ ์ ๋ฐฉ์์, ํน์ ํ๋ก์ธ์ค๊ฐ ์คํ ์ค์ด๋ฉด ๋๋๊ธฐ ์ ๊น์ง๋ ์ ๋๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ CPU๋ฅผ ๋บ๊ธฐ์ง ์๋ ๋ฐฉ์์ ๋๋ค.
๐ก ๋์์ฑ๊ณผ ๋ณ๋ ฌ์ฑ์ด ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์ค๋ช ํด์ฃผ์ธ์.
๋์์ฑ์ ๋ฉํฐ ํ๋ก๊ทธ๋๋ฐ (Multi-Programming)์์ ๋์จ ๊ฐ๋ ์ผ๋ก, ์ฃผ๊ธฐ์ต์ฅ์น์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ์ ์ฌํด์ Context Switching์ ํตํด ๋์์ ์คํ๋๋ ๊ฒ ์ฒ๋ผ ๋ณด์ด๊ฒ ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ค์ ๋ก๋ ๋์์ ์คํ๋๋ ๊ฒ์ด ์๋๋ผ, ๋ฒ๊ฐ์ ์คํํ๋ ๊ฒ์ ๋๋ค. ์ฑ๊ธ ์ฝ์ด์์ ๋ฉํฐ์ค๋ ๋๋ฅผ ๋์์ํค๊ธฐ ์ํ ๋ฐฉ์์ ๋๋ค.
๋ณ๋ ฌ์ฑ์ ๋ฉํฐ ํ๋ก์ธ์ฑ (Multi-Processing)์์ ๋์จ ๊ฐ๋ ์ผ๋ก, ์ค์ ๋ก ๋์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๋ณ๋ ฌ์ ์ผ๋ก ์คํํ๋ ๋ฐฉ์์ ๋๋ค. ๋ณ๋ ฌ์ ์ผ๋ก ์คํํ๊ธฐ ์ํด์๋ CPU๊ฐ ๋ฉํฐ์ฝ์ด์ฌ์ผ ํฉ๋๋ค.
๐ก Interrupt(์ธํฐ๋ฝํธ)์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Interrupt(์ธํฐ๋ฝํธ)๋ ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ ์๋ ๋์ค์ ์ ์ถ๋ ฅ ์์ฒญ ํน์ ์์ธ ์ํฉ์ ์ฒ๋ฆฌํด์ผ ํ๋ฉด ์คํํ๋ ํ๋ก๊ทธ๋จ์ ๋ฉ์ถ๊ณ CPU๊ฐ ํด๋น ์์ ์ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๐ก System Call์ ๋ฌด์์ธ๊ฐ์?
System Call(์์คํ ์ฝ)์ ์ฌ์ฉ์๋ ์์ฉํ๋ก๊ทธ๋จ์ด ์ปค๋์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค์ ๋๋ค.
์ด์์ฒด์ ๋ ์ปค๋์ด ์ ๊ณตํ๋ ์๋น์ค๋ฅผ '์์คํ ์ฝ'์ ์ฌ์ฉํด์ผ๋ง ์ฌ์ฉํ ์ ์๋๋ก ์ ํํจ์ผ๋ก์จ ์ปดํจํฐ ์์์ ๋ณดํธํ๋ฉด์ ์ฌ์ฉ์๋ ์์ฉํ๋ก๊ทธ๋จ์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
๐ก ๋ฉ๋ชจ๋ฆฌ์ ์ข ๋ฅ์ ๋ํด ์ค๋ช ํ๊ณ , ์ข ๋ฅ๊ฐ ์ฌ๋ฌ๊ฐ์ง์ธ ์ด์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
CPU์ ๊ฐ๊น์ด ์์๋๋ก ๋ ์ง์คํฐ, ์บ์, ์ฃผ๊ธฐ์ต์ฅ์น, ๋ณด์กฐ๊ธฐ์ต์ฅ์น๊ฐ ์์ต๋๋ค.
๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ์ ์ข ๋ฅ๊ฐ ๋ง์ ์ด์ ๋, ์ ๊ทผ ์๋์ ๋ฐ๋ฅธ ์ฐจ์ด๋ฅผ ๋๊ธฐ ์ํด์์ ๋๋ค. (๋ ์ง์คํฐ > ์บ์ > ์ฃผ๊ธฐ์ต์ฅ์น > ๋ณด์กฐ๊ธฐ์ต์ฅ์น)
๐ก OS๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํด์ผํ๋ ์ด์ ์ ๋ํด ์ค๋ช ํด์ฃผ์๊ณ , ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด ์ด๋ค ์ ๋ต์ ์ฌ์ฉํ๋์ง ์ค๋ช ํด์ฃผ์ธ์.
์ฐ์ , ๊ฐ๊ฐ์ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ค๋ก์ง '์ด์์ฒด์ '๋ง์ด ์ด์์ฒด์ ๋ฉ๋ชจ๋ฆฌ ์์ญ๊ณผ ์ฌ์ฉ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ๊ทผ์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ OS ๋ง์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ์ ํ ๊ด๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์ฉํ Swapping, ํ์ด์ง ๋ฐ ์ธ๊ทธ๋ฉํ ์ด์ ์ ๋ต, ๊ณ ์ ๊ธธ์ด ํ ๋น / ๊ฐ๋ณ ๊ธธ์ด ํ ๋น, ์์ถ ๋ฑ์ ๋ฐฉ์์ผ๋ก OS๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
๐ก ๋ฉ๋ชจ๋ฆฌ์ fit์ ์ข ๋ฅ 4๊ฐ์ง์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- First fit : ๋ฉ๋ชจ๋ฆฌ์ ์ฒ์๋ถํฐ ๊ฒ์ฌํด์ ํฌ๊ธฐ๊ฐ ์ถฉ๋ถํ ์ฒซ๋ฒ์งธ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น
- Next fit : ๋ง์ง๋ง์ผ๋ก ์ฐธ์กฐํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์๋ถํฐ ํ์์ ์์ํด ๊ณต๊ฐ์ ์ฐพ์
- Best fit : ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฒ์ฌํด์ ๋ด๋ถ ๋จํธํ๋ฅผ ์ต์ํํ๋ ๊ณต๊ฐ์ ํ ๋น
- Worst fit : ๋จ์ ๊ณต๊ฐ ์ค์ ๊ฐ์ฅ ํฐ ๊ณต๊ฐ์ ํ ๋น
๐ก ํ์ด์ง๊ณผ ์ธ๊ทธ๋ฉํ ์ด์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- ํ์ด์ง : ํ๋ก์ธ์ค๋ฅผ ๋์ผํ ํฌ๊ธฐ์ ํ์ด์ง๋ก ๋ถ๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ๋ ํด๋น ํ์ด์ง์ ๋์ผํ ํฌ๊ธฐ์ ํ๋ ์์ผ๋ก ๋ถ๋ฆฌํด์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ์ฐ์์ ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค. ๋ง์ฝ ํ๋ก์ธ์ค๊ฐ 13MB์ด๊ณ ํ์ด์ง๊ฐ 4MB๋ผ๋ฉด, ํ ํ์ด์ง๋ 1MB๊ฐ ๋ฉ๋๋ค. ํ๋ ์์ ๋ฌด์กฐ๊ฑด 4MB๋ก ๋ถ๋ฆฌํ์ผ๋ฏ๋ก 3MB์ '๋ด๋ถ๋จํธํ'๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. (์ฐ์ ํ ๋น ๋ฐฉ์๋ณด๋ค๋ ์ ๊ฒ ๋ฐ์ํฉ๋๋ค.)
- ์ธ๊ทธ๋ฉํ ์ด์ : ํ๋ก์ธ์ค๋ฅผ ๊ฐ๋ณ์ ์ธ ํฌ๊ธฐ์ ์ธ๊ทธ๋จผํธ๋ก ๋ถ๋ฆฌํ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํฉ๋๋ค. ์ฃผ๋ก ๋ ผ๋ฆฌ์ ์ธ ๋ธ๋ก๋จ์ ์ธ๊ทธ๋จผํธ๋ก Code, Data, Stack & Heap์ผ๋ก ๋ถ๋ฆฌํ ์ ์์ต๋๋ค. ์ธ๊ทธ๋ฉํ ์ด์ ์ญ์ '์ธ๋ถ ๋จํธํ'๊ฐ ๋ฐ์ํฉ๋๋ค. ์ธ๊ทธ๋จผํธ ํ ์ด๋ธ์ limit๋ ํ์ด์ง ํ ์ด๋ธ์๋ ์๋๋ฐ, ๊ทธ ์ด์ ๋ ์ธ๊ทธ๋จผํธ ํฌ๊ธฐ๋ ๊ฐ๋ณ์ ์ด๊ธฐ ๋๋ฌธ์ ํฌ๊ธฐ๋ฅผ ๋ช ์ํด์ผ ํด๋น ์ธ๊ทธ๋จผํธ์ ๋ํด์๋ง ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๐ก ๊ทธ๋ ๋ค๋ฉด, ๋ด๋ถ๋จํธํ์ ์ธ๋ถ๋จํธํ๊ฐ ๋ฌด์์ธ์ง ์ค๋ช ํด์ฃผ์ธ์.
๋จํธํ๋, ํ๋ก์ธ์ค๋ค์ด ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ ์ฌ์ฉํ์ง ๋ชปํ ๋งํผ์ ์์ ๊ณต๊ฐ์ ์๋ฏธํฉ๋๋ค.
๋ด๋ถ ๋จํธํ๋ ๊ณ ์ ๊ธธ์ด ํ ๋น / ํ์ด์ง์์ ๋ํ๋๋ ๊ฒ์ผ๋ก, ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ ์ ์ธ ๊ธธ์ด์ ํํธ๋ก ์๋์ ๋, ํด๋น ํํธ์ ๊ธธ์ด๋ณด๋ค ๋ ์์ ํฌ๊ธฐ์ ์กฐ๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ๋์ด ์๊ธฐ๋ ์ฌ๋ฐฑ์ ์๋ฏธํฉ๋๋ค.
์ธ๋ถ ๋จํธํ๋ ๊ฐ๋ณ๊ธธ์ด ํ ๋น / ์ธ๊ทธ๋ฉํ ์ด์ ์์ ๋ํ๋๋ ๊ฒ์ผ๋ก, ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ต๋ํฌ๊ธฐ - ์ฌ์ฉ์ค์ธ ๊ณต๊ฐ์ ํฌ๊ธฐ๊ฐ ์๋ก์ด ํ๋ก์ธ์ค๋ณด๋ค ์์ผ๋ฉด ์ ์ฌํ ์ ์์ผ๋ฏ๋ก, ์ด ์ฐจ(์ฌ๋ฐฑ)์ ์ธ๋ถ ๋จํธํ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
๐ก ๊ฐ์๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฌด์์ธ์ง ์ค๋ช ํด์ฃผ์ธ์.
๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ '๋ฉํฐ ํ๋ก๊ทธ๋๋ฐ' ๊ธฐ๋ฒ์์ ๋์จ ๊ฐ๋ ์ผ๋ก ํ๋ก์ธ์ค ์ ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ์ฌ๋ผ์ค์ง ์๋๋ผ๋ ์คํ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ธฐ๋ฒ์ ๋๋ค. ๊ฐ์๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ค๋ฉด ์คํ๋๋ ์ฝ๋์ ์ ๋ถ๋ฅผ ์ ์ฌํด์ผ ํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฉ๋๋ณด๋ค ํฐ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์์ต๋๋ค.
๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋์์ ๋ง์ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๊ณ , ์๋ต์๊ฐ์ ์ ์งํ๋ฉด์ CPU ์ด์ฉ๋ฅ ๊ณผ ์ฒ๋ฆฌ์จ์ ๋์ผ ์ ์์ต๋๋ค.
๋จ์ ์ผ๋ก๋ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ์ ๊ตฌ๋๋ณด๋ค๋ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
+ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํด ํ๋ก์ธ์ค๋ค์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋๋ก ํ๊ณ , ํ๋ก์ธ์ค๋ค์ ์ด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํด ํต์ ํ ์ ์์ต๋๋ค. ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์ ๋ก ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ๋ผ๊ฐ์๊ณ , ๋ชจ๋ ํ๋ก์ธ์ค์๊ฒ ๊ณต์ ๋๊ฒ ๋ฉ๋๋ค.
๐ก ์๊ตฌ ํ์ด์ง(Demand Paging)์ด ๋ฌด์์ธ์ง ์ค๋ช ํด์ฃผ์ธ์.
์๊ตฌ ํ์ด์ง(Demand Paging)์ ํ๋ก๊ทธ๋จ ์คํ ์์ ์์ ํ๋ก๊ทธ๋จ ์ ์ฒด๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๋ ๋์ , ์ด๊ธฐ์ ํ์ํ ๊ฒ๋ค๋ง ์ ์ฌํ๋ ์ ๋ต์ ์๋ฏธํฉ๋๋ค. ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ํ์ด์ง ๊ฐ๋ ์ ํ์ฉํด ๊ด๋ฆฌ๋ฉ๋๋ค.
๐ก ํ์ด์ง ๊ต์ฒด๊ฐ ์ธ์ ๋ฐ์ํ๋์ง, ์ด๋ค ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ด ์๋์ง ์ค๋ช ํด์ฃผ์ธ์.
์ด๊ธฐ์ ํ์ํ ํ์ด์ง๋ค๋ง ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์ด ์์ต๋๋ค. ํ๋ก์ธ์ค ๋์ ์ค, ํ์ํ ํ์ด์ง๊ฐ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ์ํฉ์ ํ์ด์ง ๋ถ์ฌ(Page Fault)๋ผ๊ณ ํ๋๋ฐ, ํ์ด์ง ๋ถ์ฌ๊ฐ ๋ฐ์ํ๋ฉด ์ํ๋ ํ์ด์ง๋ฅผ ํ๋๋์คํฌ์ Swap Space์์ ๊ฐ์ ธ์ค๊ฒ ๋ฉ๋๋ค.
ํ์ง๋ง ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ชจ๋ ์ฌ์ฉ์ค์ด๋ผ์ ์ํ๋ ํ์ด์ง๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ์ง ๋ชปํ๋ค๋ฉด, ํ์ด์ง ๊ต์ฒด๊ฐ ์ผ์ด๋๊ฒ ๋ฉ๋๋ค.
- FIFO
- ๊ฐ์ฅ ์ค๋๋ ํ์ด์ง๋ฅผ ๊ต์ฒดํ๋ค.
- OPT(Optimal)
- ๊ฐ์ฅ ๋จผ ๋ฏธ๋ ๋์ ์ฌ์ฉ๋์ง ์์ ํ์ด์ง๋ฅผ ๊ต์ฒดํ๋ค.(๋ถ๊ฐ๋ฅ)
- LFU(Least Frequently Use)
- ๊ฐ์ฅ ์ฌ์ฉ ๋น๋๊ฐ ์ ์ ํ์ด์ง๋ฅผ ๊ต์ฒดํ๋ค.
- MFU(Most Frequently used)
- ๊ฐ์ฅ ์ฌ์ฉ ๋น๋๊ฐ ๋ง์ ํ์ด์ง๋ฅผ ๊ต์ฒดํ๋ค.
- LRU(Least Recently Use)
- ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉ๋์ง ์์ ํ์ด์ง๋ฅผ ๊ต์ฒดํ๋ค.
- NUR(Not Used Recently)
- LRU์ ์ ์ฌํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉ๋์ง ์์ ํ์ด์ง๋ฅผ ๊ต์ฒดํ๋ค.
- ์ด๋ฅผ ํ์ธํ๊ธฐ ์ํด์ ์ฐธ์กฐ๋นํธ์ ๋ณํ๋นํธ๋ฅผ ์ฌ์ฉํ๋ค.
- ์ฐธ์กฐ ๋นํธ : ํ์ด์ง๊ฐ ํธ์ถ๋์ง ์์์ ๋๋ 0, ํธ์ถ๋์์ ๋๋ 1
- ๋ณํ ๋นํธ : ํ์ด์ง ๋ด์ฉ์ด ๋ณ๊ฒฝ๋์ง ์์์ ๋๋ 0, ๋ณ๊ฒฝ๋์์ ๋๋ 1
- 00์ธ๊ฒ์ด ๊ฐ์ฅ ๋จผ์ ๊ต์ฒด๋๋ฒ๋ฆฐ๋ค.
- Clock Algorithm
- LRU์ ์ ์ฌํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๊ฐ ํ์ด์ง๊ฐ ์ต๊ทผ์ ์ฐธ์กฐ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ์ฉํ๋ค.
- ํ์ด์ง๋ง๋ค reference bit์ ๊ฐ๊ณ ์๊ณ , ์ด๊ธฐ์๋ ๋ชจ๋ 0, ์ฐธ์กฐ๋๋ฉด 1์ผ๋ก ๋ณ๊ฒฝ๋๋ค.
- page replacement๊ฐ ์งํ๋๋ฉด ํ์ชฝ ๋ฐฉํฅ์ผ๋ก page table์ ์ฐธ์กฐํ๊ธฐ ์์ํ๋ฉด์ 1๋นํธ๋ฅผ ๋ง๋ค๋ฉด 0๋นํธ๋ก ๋ด๋ฆฌ๊ณ 0๋นํธ๋ฅผ ๋ง๋๋ฉด ํด๋น ํ์ด์ง๊ฐ replacement ๋์์ด ๋๋ค.
- ๊ฐ์ฅ ์ค๋ซ๋์ ์ฐธ์กฐ๋์ง ์์ ํ์ด์ง๋ฅผ ์ฐพ์ ์๋ ์์ง๋ง, ๊ฐ์ฅ ์ต๊ทผ์ ์ฐธ์กฐ๋ ํ์ด์ง๋ ํผํ ์ ์๋ค.
๐ก Thrashing(์ฐ๋ ์ฑ)์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
ํ์ด์ง ๋ถ์ฌ์จ์ด ๋์ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค.
ํ์ด์ง ๋ถ์ฌ๊ฐ ๋ฐ์ํ๋ฉด, ํ์ด์ง ๊ต์ฒด ํน์ ํ์ด์ง ๋ก๋๊ฐ ์ผ์ด๋ฉ๋๋ค. ๋ค์ํ ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์ค๋ฉด์ ๋ฉ๋ชจ๋ฆฌ์ ์ ํจ ์ฌ์ฉ ๊ณต๊ฐ์ ์ค์ด๋ค๊ณ , CPU์ ๊ฐ๋ ์๊ฐ์ด ์ฌ๋ผ๊ฐ๋ฉด์ ์์์ ์ต๋ํ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ก์ธ์ค๊ฐ ๋๋ฌด ๋ง์์ง๋ฉด, ํ๋ก์ธ์ค๋น ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ ํ๋ ์์ ๊ฐ์๊ฐ ์ค์ด๋ค๊ณ , ํ์ด์ง๊ฐ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ฒ ์ฌ๋ผ์จ ํ๋ก์ธ์ค๋ ๋ช ๋ น์ด ์งํ๋ ๋ ๋ง๋ค Page Fault๊ฐ ์ผ์ด๋ ํ์ด์ง ๊ต์ฒด๊ฐ ์ผ์ด๋๊ฒ ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ์ CPU ์ฌ์ฉ๋ฅ ์ด ์ค์ด๋ค๊ฒ ๋ฉ๋๋ค.
ํ์ด์ง๋ฅผ ๊ต์ฒดํ๋ ๊ณผ์ ์์๋ CPU๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , ํ์ด์ง ๊ต์ฒด๋ง์ ๊ณ์ํด์ ์คํํ๋ฉด, ์ด์์ฒด์ ๋ CPU๊ฐ ๋๊ณ ์์ผ๋ฏ๋ก ๋ ๋ง์ ํ๋ก์ธ์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ค๊ณ ํ๋ฉฐ ์ ์ํ์ด ์ผ์ด๋๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ํ์์ Thrashing(์ฐ๋ ์ฑ)์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๋ฅผ ํด์ ํ๊ธฐ ์ํด์ Working Set ์๊ณ ๋ฆฌ์ฆ๊ณผ Page Fault Frequency ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค.
- Working Set : ๋๋ถ๋ถ์ ํ๋ก์ธ์ค๊ฐ ํน์ ํ์ด์ง๋ง ์ง์ค์ ์ผ๋ก ์ฐธ์กฐํ๋ ํน์ฑ์ ์ด์ฉ, ์ผ์ ์๊ฐ ๋์ ์ฐธ์กฐ๋๋ ํ์ด์ง ๊ฐ์๋ฅผ ํ์ ํ๊ณ , ๊ทธ ํ์ด์ง ์๋งํผ ์ฌ๋ถ ํ๋ ์์ด ํ๋ณด๋๋ฉด ๊ทธ ๋ ํ์ด์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ์ ๋๋ค.
- Page Fault Frequency : Page Fault ํผ์ผํธ์ ์ํ๊ณผ ํํ์ ๋ก๋๋ค. ์ํ์ ๋์ผ๋ฉด ํ์ด์ง์๊ฒ ์ง๊ธํ๋ ํ๋ ์ ๊ฐ์๋ฅผ ๋๋ฆฌ๊ณ , ํํ์ ๋์ผ๋ฉด ์ง๊ธ ํ๋ ์ ๊ฐ์๋ฅผ ์ค์ ๋๋ค.
๋ CPU ์ฌ์ฉ๋ฅ ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ ์ฌ๋์ ํจ๊ป ์ฒดํฌํด์ผ ์ฐ๋ ์ฑ ์ ๋ฌด๋ฅผ ํ์ธํ ์ ์๊ฒ ๋ฉ๋๋ค.
๐ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณ ๊ฐ๋๋ฉด ์ผ์ด๋๋ ํ์์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณ ๊ฐ๋์์ง๋ง, ํ๋ก์ธ์ค๋ฅผ ์คํํด์ผ ํ๊ธฐ ๋๋ฌธ์ Swap์ด ํ๋ฐํด์ง๋๋ค. ๋ฐ๋ผ์ CPU ์ด์ฉ๋ฅ ์ด ํ๋ฝํ๊ณ , OS๋ CPU ์ด์ฉ๋ฅ ์ด ๋ฎ์ผ๋ฏ๋ก ์คํ๋ ค ํ๋ก์ธ์ค๋ฅผ ์ถ๊ฐํ๊ฒ ๋๋ ์ฐ๋ ์ฑ ํ์์ด ๋ฐ์ํฉ๋๋ค. ์ด๋ฅผ ํด์ํ์ง ๋ชปํ๋ฉด Out Of Memory ์ํ๋ก ํ๋จํด ์ค์๋๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ๋ก ์ข ๋ฃํ๊ฒ ํฉ๋๋ค.
๐ก ์บ์(cache) ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฌ์ฉํ๋์ง, CPU์ ์ ์ค๋ฅ ์ ๋์ด๊ธฐ ์ํด ์ด๋ค ์๋ฆฌ๋ฅผ ์ฌ์ฉํ๋์ง์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
CPU์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ ์๋ ์ฐจ์ด๋ฅผ ์ํํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์ ์ ์ฅํด๋๋ ์์ ์ฅ์๋ก, ์บ์์ ํฌ๊ธฐ๋ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ์๊ธฐ ๋๋ฌธ์ ์์ผ๋ก ์ฌ์ฉ๋ ๊ฒ์ผ๋ก ์์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅํ๋ ๊ฒ์ด ์ค์ํ ํฌ์ธํธ์ ๋๋ค.
๋ฐ๋ผ์ ์ด ์บ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ '์ ์ค'์ด๋ผ๊ณ ํ๊ณ , ์ด๋ฌํ ์ ์ค๋ฅ ์ ๋์ด๊ธฐ ์ํด์ ์ฐธ์กฐ ์ง์ญ์ฑ์ ์๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ต๊ทผ์ ์ฐธ์กฐ๋ ์ฃผ์์ ๋ด์ฉ์ ๊ณง ๋ค์์ ๋ค์ ์ฐธ์กฐ๋๋ ํน์ฑ (ex. ๋ฐ๋ณต๋ฌธ)
- ์ฐธ์กฐ๋ ์ฃผ์์ ์ธ์ ํ ์ฃผ์์ ๋ด์ฉ์ด ๋ค์ ์ฐธ์กฐ๋๋ ํน์ฑ (ex. ๋ฐฐ์ด)
๐ก DMA(Direct Memory Access)์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
๋ฐ์ดํฐ์ ์ด๋์๋ CPU์ ๊ฐ์ ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ค๋์ ๋ฐ์ดํฐ๊ฐ ์ด๋ํ๋ ๊ณผ์ ์์๋ CPU์ ๋ง์ ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ CPU๋ฅผ ๊ฑฐ์น์ง ์๊ณ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐฉ๋ฒ์ธ DMA๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๐ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ค, ์ฐ์(Contiguous) ๋ฐฉ์๊ณผ ๋ถ์ฐ์(Non-Contiguous) ๋ฐฉ์์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์ฐ์ ํ ๋น ๋ฐฉ์์, ํ๋ก์ธ์ค ์ด๋ฏธ์ง๊ฐ ๋ถ๋ฆฌ๋์ง ์์ ์จ์ ํ ํ๋ก์ธ์ค๋ฅผ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๋ ๋ฐฉ์์ ๋๋ค. ์ฐ์ ํ ๋น ๋ฐฉ์์๋ ํฌ๊ฒ 2๊ฐ์ง๊ฐ ์์ผ๋ฉฐ '๊ณ ์ ๊ธธ์ด ํ ๋น'๊ณผ '๊ฐ๋ณ ๊ธธ์ด ํ ๋น'์ด ์์ต๋๋ค.
- ๊ณ ์ ๊ธธ์ด ํ ๋น : ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ ๋ ๊ธธ์ด๋ก ํํธ๋ฅผ ๋ถ๋ฆฌํ๊ณ , ํ๋ก์ธ์ค๋ฅผ ํด๋น ํํธ์ ์ฝ์ ํฉ๋๋ค. ๊ณ ์ ๋ ๊ธธ์ด์ ํํธ ๋ด์ ํ๋ก์ธ์ค๊ฐ ๋ค์ด๊ฐ๋ฏ๋ก, ์ฌ๋ฐฑ์ด ์๊ธธ ์ ์๋๋ฐ ์ด๊ฒ์ '๋ด๋ถ ๋จํธํ'๋ผ๊ณ ํฉ๋๋ค.
- ๊ฐ๋ณ ๊ธธ์ด ํ ๋น : ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ก์ธ์ค์ ๊ธธ์ด์ ์๋ง๊ฒ ํํธ๋ฅผ ๋ถ๋ฆฌํ๊ณ , ํด๋น ํ๋ก์ธ์ค๋ฅผ ์ ์ฌํฉ๋๋ค. ๊ฐ๋ณ๋ ๊ธธ์ด์ด๋ฏ๋ก ๋ด๋ถ ๋จํธํ๋ ๋ฐ์ํ์ง ์์ง๋ง, ๊ฐ๋ณ์ ์ธ ๊ธธ์ด ํ ๋น์ ์ํด ์ผ๋ถ๋ถ์ด ๋จ์ผ๋ฏ๋ก '์ธ๋ถ ๋จํธํ'๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ถ์ฐ์ ํ ๋น ๋ฐฉ์์, ํ๋ก์ธ์ค๊ฐ ์ฐ์๋ ์ด๋ฏธ์ง๊ฐ ์๋ ๋ถ๋ฆฌ๋ ์ด๋ฏธ์ง๋ก ๊ตฌ์ฑ๋์ด ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๋ ๋ฐฉ์์ ๋๋ค. 'ํ์ด์ง'๊ณผ '์ธ๊ทธ๋ฉํ ์ด์ ' ๋ฐฉ์์ด ์์ต๋๋ค.
- ํ์ด์ง : ํ๋ก์ธ์ค๋ฅผ ๋์ผํ ํฌ๊ธฐ์ ํ์ด์ง๋ก ๋ถ๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ๋ ํด๋น ํ์ด์ง์ ๋์ผํ ํฌ๊ธฐ์ ํ๋ ์์ผ๋ก ๋ถ๋ฆฌํด์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ์ฐ์์ ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค. ๋ง์ฝ ํ๋ก์ธ์ค๊ฐ 13MB์ด๊ณ ํ์ด์ง๊ฐ 4MB๋ผ๋ฉด, ํ ํ์ด์ง๋ 1MB๊ฐ ๋ฉ๋๋ค. ํ๋ ์์ ๋ฌด์กฐ๊ฑด 4MB๋ก ๋ถ๋ฆฌํ์ผ๋ฏ๋ก 3MB์ '๋ด๋ถ๋จํธํ'๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. (์ฐ์ ํ ๋น ๋ฐฉ์๋ณด๋ค๋ ์ ๊ฒ ๋ฐ์ํฉ๋๋ค.)
- ์ธ๊ทธ๋ฉํ ์ด์ : ํ๋ก์ธ์ค๋ฅผ ๊ฐ๋ณ์ ์ธ ํฌ๊ธฐ์ ์ธ๊ทธ๋จผํธ๋ก ๋ถ๋ฆฌํ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํฉ๋๋ค. ์ฃผ๋ก ๋ ผ๋ฆฌ์ ์ธ ๋ธ๋ก๋จ์ ์ธ๊ทธ๋จผํธ๋ก Code, Data, Stack & Heap์ผ๋ก ๋ถ๋ฆฌํ ์ ์์ต๋๋ค. ์ธ๊ทธ๋ฉํ ์ด์ ์ญ์ '์ธ๋ถ ๋จํธํ'๊ฐ ๋ฐ์ํฉ๋๋ค.
์ถ๊ฐ์ ์ผ๋ก ํ์ด์ง๊ณผ ์ธ๊ทธ๋ฉํ ์ด์ ๋ฐฉ์์ ์ฐ์์ ์ด์ง ์์ผ๋ฏ๋ก, ๊ฐ ์กฐ๊ฐ์ด ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์์น์ ์๋์ง ์์์ผ ํ๋ฏ๋ก ํ์ด์ง/์ธ๊ทธ๋จผํธ ํ ์ด๋ธ์ด ์กด์ฌํฉ๋๋ค.
+ ์ ์ ๊ฐ๋ฐ์ ์ธํฐ๋ทฐ๋ฅผ ์ค๋นํ๋ ํ์์ด ์์ฑํ ์๋ฃ์ด๊ธฐ ๋๋ฌธ์, ์ณ์ง ์์ ์ ๋ณด๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ๋ต์ ์๊ณ ๊ณ์๋ค๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ ๋ค๋ฉด ๋ฐ๋ก ๋ฐ์ํ๋๋ก ํ๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค :)
๐โ๏ธ ๋ค๋ฅธ ์ง๋ฌธ ๋๋น ์๋ฃ
[๐ ์ ์ ์ธํฐ๋ทฐ ์ค๋น] - [๋ฉด์ ์ด์ ๋ฆฌ] ์ ์ ๊ฐ๋ฐ์ ์ธํฐ๋ทฐ ๋๋น ์ด์ ๋ฆฌ ์๋ฃ - โ ์๋ฃ๊ตฌ์กฐ
[๐ ์ ์ ์ธํฐ๋ทฐ ์ค๋น] - [๋ฉด์ ์ด์ ๋ฆฌ] ์ ์ ๊ฐ๋ฐ์ ์ธํฐ๋ทฐ ๋๋น ์ด์ ๋ฆฌ ์๋ฃ - โก ์๊ณ ๋ฆฌ์ฆ
[๐ ์ ์ ์ธํฐ๋ทฐ ์ค๋น] - [๋ฉด์ ์ด์ ๋ฆฌ] ์ ์ ๊ฐ๋ฐ์ ์ธํฐ๋ทฐ ๋๋น ์ด์ ๋ฆฌ ์๋ฃ - โข ๋ฐ์ดํฐ๋ฒ ์ด์ค
[๐ ์ ์ ์ธํฐ๋ทฐ ์ค๋น] - [๋ฉด์ ์ด์ ๋ฆฌ] ์ ์ ๊ฐ๋ฐ์ ์ธํฐ๋ทฐ ๋๋น ์ด์ ๋ฆฌ ์๋ฃ - โฃ ๋คํธ์ํฌ
[๐ ์ ์ ์ธํฐ๋ทฐ ์ค๋น] - [๋ฉด์ ์ด์ ๋ฆฌ] ์ ์ ๊ฐ๋ฐ์ ์ธํฐ๋ทฐ ๋๋น ์ด์ ๋ฆฌ ์๋ฃ - โค ์ด์์ฒด์
[๐ ์ ์ ์ธํฐ๋ทฐ ์ค๋น] - [๋ฉด์ ์ด์ ๋ฆฌ] ์ ์ ๊ฐ๋ฐ์ ์ธํฐ๋ทฐ ๋๋น ์ด์ ๋ฆฌ ์๋ฃ - โฅ ์๋ฐ(Java)
[๐ ์ ์ ์ธํฐ๋ทฐ ์ค๋น] - [๋ฉด์ ์ด์ ๋ฆฌ] ์ ์ ๊ฐ๋ฐ์ ์ธํฐ๋ทฐ ๋๋น ์ด์ ๋ฆฌ ์๋ฃ - โฆ ๋ฐฑ์๋(Java Spring ๊ธฐ๋ฐ)
[๐ ์ ์ ์ธํฐ๋ทฐ ์ค๋น] - [๋ฉด์ ์ด์ ๋ฆฌ] ์ ์ ๊ฐ๋ฐ์ ์ธํฐ๋ทฐ ๋๋น ์ด์ ๋ฆฌ ์๋ฃ - โง ๊ฐ๋ฐ๊ณตํต / ์ธ์ฑ๋ฉด์
๐ ๋์์ ๋ฐ์ ์ถ์ฒ :
[๋งํฌ] https://github.com/backtony/Backend_Interview_for_Beginner/blob/master/OS.md
[๋งํฌ] https://melonicedlatte.com/2020/10/07/233100.html
[์๋ฃ] ํ๊ต ์ด์์ฒด์ ๊ณผ๋ชฉ PPT ์๋ฃ ๋ฐ ๋ฉด์ ์ ๋ฐ์๋ ์ง๋ฌธ๋ค ํฌํจ.