[CS] Process(ํ๋ก์ธ์ค) ์ Thread(์ฐ๋ ๋)
๐ ํด๋น ํฌ์คํ ์ YouTube ์ฑ๋ ๋๋ํ ๊ฐ๋ฐ์๋์ด ์ ๊ณตํ์๋ ๋ฌด๋ฃ ๊ฐ์ ์์์ธ ์ด์์ฒด์ ์ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์์์ ๋ณด๊ณ ๊ฐ์ธ์ ์ธ ์ ๋ฆฌ ๋ชฉ์ ํ์ ์์ฑ๋์์ต๋๋ค. ํ๋จ์ ์ฌ์ฉ๋ ์๋ฃ๋ ํ์๊ฐ ์ง์ ์ฌ๊ตฌ์ฑํ ์๋ฃ์์ ์๋ฆฝ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ CS๋ฅผ ๊ณต๋ถํ๋ฉด์ ๊ฐ์ฅ ํท๊ฐ๋ฆฌ๋(?) ๊ฐ๋ ๋ค์ธ ํ๋ก์ธ์ค์ ์ฐ๋ ๋์ ๋ํด ์์๋ณด๋๋ก ํ์.
1. ํ๋ก์ธ์ค, ๋๋ ๋๊ตฌ๋?
ํ๋ฅญํ ๋๋ฌด์ํค์ ๋ฐ๋ฅด๋ฉด ํ๋ก์ธ์ค๋, ์ปดํจํฐ์์ ์คํ์ค์ธ ํ๋ก๊ทธ๋จ์ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค์ด๋ณด์. ์ฐ๋ฆฌ๋ MS Word ๋ผ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์ฉํ๋ ค๊ณ ํ๋ค. ๊ฐ์ฅ ์ฒ์์ ํ ๊ฒ์ ์ปดํจํฐ์ MS Word ๋ผ๋ ํ๋ก๊ทธ๋จ์ ์ค์นํด์ผ ํ๋ค. Microsoft365 ์ฌ์ดํธ์๊ฐ์ ์ด๋ฌ์ฟต ์ ๋ฌ์ฟต ๋ก๊ทธ์ธ์ ํ ํ MS Word ํ๋ก๊ทธ๋จ์ ์ปดํจํฐ์ ์ ์ค์นํ๋ค. ์ง๊ธ ์ด ์๊ฐ! ์ค์นํ MS Word๋ ํ๋ก์ธ์ค๊ฐ ์๋ ํ๋ก๊ทธ๋จ์ด๋ค.
์ด์ ์ฐ๋ฆฌ์ ๋ชฉํ๋ MS Word๋ฅผ ์ด์ฉํด์ ๋ฌธ์๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค. ํ์ฌ MS Word๋ฅผ ์ปดํจํฐ๋ฅผ ์ค์นํ ๊ฒ ๋ฟ์ด์ง, MS Word๋ฅผ ์ด์ฉํ๊ณ ์์ง๋ ์๋ค. ์ด์ฉํ๊ธฐ ์ํด์ MS Word ์์ด์ฝ์ "๋ฐ๋ธ(?) ํด๋ฆญ"์ ํ๋ค. ๊ทธ๋ฌ๋ฉด ์ดค๋ผ๋ฝ MS Word์ ๋ฉ์ง ์์ด์ฝ์ด ๋ฑ์ฅํ๋ฉด์ MS Word ๋ฌธ์ GUI ํ๋ฉด์ด ๋ชจ๋ํฐ์ ๋ฑ์ฅํ๋ค. ์ง๊ธ ์ด ์๊ฐ! ์คํ ์ค์ธ MS Word๋ฅผ ๋ฐ๋ก ํ๋ก์ธ์ค๋ผ๊ณ ํ๋ค.
์ง๊ธ๊น์ง ์ง๊ด์ ์ผ๋ก ํ๋ก์ธ์ค๋ผ๋ ๊ฐ๋ ์ ์ดํดํด๋ณด์์ผ๋, ์ปดํจํฐ ๋ถ์ผ์์ ์ผํ๋ ์ฐ๋ฆฌ๋ค์ธ ๋งํผ ์ด์ ์ข ๋ ์ ๋ฌธ์ ์ธ ์์ญ์์ ์ ์๋ฅผ ํด๋ณด์.
ํ๋ก์ธ์ค๋ ์ฐ์์ ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ ํ๋์ ์ฐ์ฐ ํ๋ฆ(flow)์ด๋ผ๊ณ ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ Python ์ฝ๋๊ฐ ์๋ค๊ณ ํด๋ณด์.
total = 0
for i in range(100):
total += i
print(total)
์ ์ฝ๋๋ ๋จ์ํ 0๋ถํฐ 99๊ฐ์ง์ ์ซ์๋ฅผ ๋ชจ๋ ๋ํ ๊ฐ์ ๊ณ์ฐํ๋ ์ฝ๋๋ค. ํต์ฌ์ ์์ ๊ฐ์ ์ฝ๋๋ ํ๋์ ์ฐ์ฐ ํ๋ฆ์ด ์๋ค๋ ๊ฒ์ด๋ค. ๊ฐ์ฅ ์ฒ์์๋ 0์ 1์ ๋ํ๊ณ , 1์ 2๋ฅผ ๋ํ๊ณ , 3์ 3์ ๋ํ๊ณ , .... ์ด๋ ๊ฒ ๊ณ์ ์ฐ์์ ์ธ ์ฐ์ฐ์ ํ๋ฆ์ด ์๊ธด๋ค. ์ด๋ฅผ ํ๋์ ํ๋ก์ธ์ค๋ผ๊ณ ํ ์ ์๋ค. ๋ ๋ค๋ฅธ ๋ง๋ก ์ด 'ํ๋ฆ'์ Task ๋๋ Context ๋ผ๊ณ ๋ ํ๋ค.(๊ทธ๋์ ์ถํ์ ๋ฐฐ์ธ ํ๋ก์ธ์ค ๋ด Context Switching ์ด๋ผ๋ ๋ง์ด ๋ฑ์ฅํ๋ ๊ธฐ์์ด๊ธฐ๋ ํ๋ฉฐ ๋ฉํฐ ํ์คํน์ด๋ผ๋ ๊ฒ์ด ๊ณง ๋ฉํฐ ํ๋ก์ธ์ฑ๊ณผ ๋น์ทํ ์๋ฏธ๋ฅผ ๊ฐ๋ ์ด์ ๋ค)
์ด์ ํ๋ก์ธ์ค์ ๋ํ ์์ฒด์ ์ธ ์ ์๋ ๋์ด ๋ฌ๋ค. ์ด๋ฒ์ ์ด์์ฒด์ (์ดํ OS)์ ์ฐ๊ด์ง์ด์ ํ๋ก์ธ์ค๋ฅผ ์ ์ํ ์ ์๋ค. ํ๋ก์ธ์ค๋ OS๊ฐ ๊ด๋ฆฌํ๋ ๋จ์์ด๋ค. ๋ค์ ๋งํด์, OS๋ ํ์ผ, ์ฐ์ฐ์์(CPU, RAM ๋ฑ..)์ ๋ํ ์ ๊ทผ ์ ์ด๋ฅผ ํ๋ก์ธ์ค ๋จ์๋ก ํ์ฌ ์ํ์ ํ๋ค. ์ฝ๊ฒ ๋งํด์ OS๊ฐ "์ผ, 1๋ฒ ํ๋ก์ธ์ค. ๋๋ CPU์ Core ๋ช ๊ฐ๋ง ์ฌ์ฉํ๊ณ , RAM์ ์ด๋ค ๋ถ๋ถ๋ง ์ฌ์ฉํด ์๋ง!" ํ๋ ๊ฒ์ด๋ค.
2. ํ๋ก์ธ์ค์ ์์ฑ ๊ณผ์ ๊ณผ ์ํ
์์์ ํ๋ก์ธ์ค์ ๋ํ ์ ์์ ๋ํด ์์๋ณด์์ผ๋ ๋ค์์ ํ๋ก์ธ์ค๊ฐ ์์ฑ๋๋ ๊ณผ์ ๊ณผ ์ํ์ ๋ํด ์์๋ณด๋๋ก ํ์. ์์ผ๋ก ์ฐ๋ ๋๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ๋๋ฐ, ์ฐ๋ ๋๋ ํ๋ก์ธ์ค ๋ด์ ์กด์ฌํ๋ ์ค์ง์ ์ธ ์ฐ์ฐ ์คํ ๋จ์์ด๋ค. ๋น์ ํ์๋ฉด ํ๋ก์ธ์ค๋ ๊ฐ์กฑ, ์ฐ๋ ๋๋ ๊ฐ์กฑ์ ๊ตฌ์ฑํ๋ ๊ฐ์ธ์ด๋ผ๊ณ ํ ์ ์๋ค.
ํ๋์ ๊ฐ์กฑ์ 1๊ฐ์ ํ๋ก์ธ์ค๋ผ๊ณ ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ 1๊ฐ์ ๊ฐ์กฑ์ 1๊ฐ์ ์ง์์ ๊ณต๋ ๊ฑฐ์ฃผ๋ฅผ ํ๋ค. ์ด๋ 1๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์์ฑ๋๋ฉด 1๊ฐ์ VMS(Virtual Memory Space)๊ฐ ์๋ก ํ ๋น๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ง์ ๊ตฌ์ฑํ๋ 3๊ฐ์ ๋ฐฉ์ ๊ณง VMS ๋ด์์ ๊ฐ ์ฐ๋ ๋๋ง๋ค ํ ๋น๋๋ ์ฐ๋ ๋ ์ ์ฉ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ฏธํ๋ค.(์ด๋ฅผ TLS๋ผ๋ Thread Local Storage ์ Stack ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค) ๊ฐ ์ฐ๋ ๋๋ง๋ค ํ ๋น๋๋ ๊ณต๊ฐ์ ๊ฐ ์ฐ๋ ๋๋ง๋ค ๋ ๋ฆฝ์ ์ด๋ค. ํ์ง๋ง ์ง์์ ๊ตฌ์ฑ์๋ค์ด ๊ณต์ฉ์ผ๋ก ์ฌ์ฉํ๋ ๊ฑฐ์ค, ํ์ฅ์ค, ๋ถ์๊ฐ์ ์์ญ์ด ์๋๋ฐ, ์ด๋ VMS ๊ณต๊ฐ ๋ด์์ Heap ๋ฉ๋ชจ๋ฆฌ์ ์คํ์ฝ๋ ์์ญ์ด ํด๋น๋๋ค. ์ด ์์ญ์ ํด๋น ํ๋ก์ธ์ค ๋ด์ ์๋ ๋ชจ๋ ์ฐ๋ ๋๋ค์ด ๊ณต์ ํ ์ ์๋ ์์๋ค์ด๋ค. ์ข ๋ ์ฒจ์ธํ์๋ฉด ์ด ๊ณต์ ํ ์ ์๋ ์์๋ค์ ๋๊ณ ์ฌ๋ฌ ์ฐ๋ ๋๋ค์ด ์๋ก ์ด์ฉํ๋ ค๊ณ ๊ฒฝ์ํ๋ ค๋ ๊ฒ์ ๊ฒฝ์ ์ํ ์ฆ, Race Condition ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ค์์ผ๋ก๋ ํ๋ก์ธ์ค์ ์ํ์ ๋ํด ์์๋ณด์. ํ๋ก์ธ์ค์๋ '์ํ'๋ผ๋ ๊ฒ์ด ์กด์ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ํ๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ ์ด(transition)๋๊ธฐ๋ ํ๋ค. ๊ทธ๋ผ ์ธ์ ์ ์ด๋ ๊น? ๋ฐ๋ก ํ๋ก์ธ์ค๊ฐ [์์ฑ → ์คํ → ์๋ฃ] ๋๋ ๊ณผ์ ์์ ์ผ๋ จ์ ์ธ์ดํด์ด ์กด์ฌํ๋ค. ์๋ ๊ทธ๋ฆผ์ ๋ณด์.
๊ฐ์ฅ ๋จผ์ ํ๋ก์ธ์ค๊ฐ ์์ฑ์ด ๋๋ฉด ์ค๋น ์ํ๋ก ์ ์ด ๋๋ฉด์ PCB ๋ผ๋ ๊ฒ์ด ๋ง๋ค์ด์ง๋ค. ์ ๊ทธ๋ฆผ์์๋ ์จ๋์์ง๋ง PCB๋ OS๊ฐ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ๋ก์ธ์ค์ ์ ๋ณด๋ฅผ ๋ด๋ ๊ณต๊ฐ์ด๋ค. ์๋ฅผ ๋ค์ด, ํน์ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ค๊ฐ ์ ์ ์ค๋จ์์ผฐ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ค์ ๋ค์ ํด๋น ํ๋ก์ธ์ค๋ฅผ ์ฌ๊ฐํ ๊ฒ์ธ๋ฐ, ๊ทธ๋ฌ๋ ค๋ฉด ์ค๋จ ์ํจ ํ๋ก์ธ์ค์ ๋ํ ์ ๋ณด๊ฐ ํ์ํ๋ค. ๊ทธ๋์ผ OS๊ฐ "์๊น ๋ด๊ฐ ์ค๋จ์์ผฐ๋ ํ๋ก์ธ์ค๋ฅผ ์ง๊ธ ๋ค์ ์ฌ๊ฐํด์ผ๊ฒ ์ด. ๊ทผ๋ฐ ์๊น ์ค๋จ์ํจ ํ๋ก์ธ์ค๊ฐ ๋ญ์๋๋ผ?" ํ๋ฉด์ PCB์ ์๋ ์ ๋ณด๋ฅผ ์ฐธ์กฐํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ๊ฒ ์ค๋น์ํ๊ฐ ๋ ํ๋ก์ธ์ค๋ ์คํ ์ํ๋ก ์ ์ดํ๊ธฐ ์ํด์ ๋์คํจ์น๋ผ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค. ๋์คํจ์น์ ๋ํ ์ค๋ช ์ ์ ๊ทธ๋ฆผ์ ์จ๋์์ผ๋ ์ฝ์ด๋ณด๋๋ก ํ์. ๊ทธ๋ฆฌ๊ณ ์๋ฃ ์ํ๋ก ๋ฐ๋ก ๊ฐ๊ฑฐ๋ ํ๋ก์ธ์ค๊ฐ ์คํํ๋ ค๋ ์ฝ๋์ I/O ํ๋ ๊ณผ์ ์ด ์๋ค๋ฉด I/O ์์ฒญ์ ํ ํ, ํ๋ก์ธ์ค์ ์ํ๊ฐ ๋๊ธฐ ์ํ๋ก ์ ์ด๋๋ค. ๊ฐ๊ด์ ์ธ ์ธ์ดํด์ ์ด์ ๊ฐ๊ณ ๋๋จธ์ง ๋ณด๋ฅ ์ํ๋ก ์ ์ด๋๋ ๊ณผ์ ์ ์ ๊ทธ๋ฆผ ์ ์ค๋ช ์ ์ฝ์ด๋ณด๋๋ก ํ์.
๊ทธ๋ฐ๋ฐ, ์ ๊ทธ๋ฆผ์์ ํ ๊ฐ์ง ์ฃผ๋ชฉํ ๋ถ๋ถ์ด ์๋ค. ๋ฐ๋ก ์๋์ ์ด๋ก์ ์ ์ ์ผ๋ก ํ์๋ ๋ค๋ชจ์นธ์ด ๋ํ๋ด๋ ์์ญ์ธ ํ๋ก์ธ์ค๊ฐ ๋ณด๋ฅ๋์๋ค๊ฐ ์ฌ๊ฐํ๋ ๋ถ๋ถ์ด๋ค.
๋ฐ๋ก ์ด๋ฌํ ์ํฉ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ, Context Switching ์ด๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ๊ฒ ๋๋ค. Context Switching์ด ์ผ์ด๋๋ ๊ณผ์ ์ ์ข ๋ ์ฝ๊ฒ ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.
3. ํ๋ก์ธ์ค์ ์์ฑ๊ณผ ๋ณต์ฌ
๋ค์์ ํ๋ก์ธ์ค์ ์์ฑ๊ณผ ๋ณต์ฌ์ ๋ํด ์์๋ณด์. ์ง์ ์์๋ ๋จ์ง 1๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์์ฑ๋๊ณ ๊ทธ ํ๋ก์ธ์ค๊ฐ ์ด๋ป๊ฒ ์ํ๊ฐ ์ ์ด๋๋์ง ๊ณผ์ ์ ์ดํด๋ณด์๋ค. ์ด๋ฒ์ ์ดํด๋ณผ ๋ถ๋ถ์ ํ๋ก์ธ์ค(a.k.a ๋ถ๋ชจ ํ๋ก์ธ์ค)๊ฐ ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค(a.k.a ์์ ํ๋ก์ธ์ค)๋ฅผ ์์ฑํ ๋์ ์ํฉ์ด๋ค.
1๋ฒ ๋ชฉ์ฐจ์์ ์ดํด๋ณธ ๊ฒ์ฒ๋ผ ํ๋ก์ธ์ค๊ฐ ์๋กญ๊ฒ ์์ฑ๋๋ฉด ๊ทธ ์์ฑ๋ ํ๋ก์ธ์ค์ ์๋ก์ด VMS์ PCB๊ฐ ํ ๋น๋๋ค. ์ด ์ํ์์ ์๋ก์ด ํ๋ก์ธ์ค ์ฆ, ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑ์ํค๋ ๋ช ๋ น์ด๊ฐ Unix ๊ณ์ด์ OS(MacOS, Linux)์์๋ 2๊ฐ์ง๊ฐ ์กด์ฌํ๋๋ฐ, ๋ฐ๋ก fork() ์ exec() ์ด๋ค. ์ด 2๊ฐ์ง๋ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑ์ํค๋ ์ ์์๋ ๋์ผํ์ง๋ง ์ธ๋ถ์ ์ธ ๋์ ๊ณผ์ ์ ์ฐจ์ด๊ฐ ์กด์ฌํ๋ค. ๊ทธ ์ฐจ์ด์ ์ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ๋ ๊ฐ์ด ์์ฑ๋๋ ๊ตฌ์ฑ์์๋ค(VMS, PCB ๋ฑ)์ ์ด๋ป๊ฒ ํ๋์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
๋จผ์ fork() ๋ถํฐ ์์๋ณด์. fork()๋ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ๋๋ ํ๋ก์ธ์ค ์์ฑ ์ ๊ฐ์ด ์์ฑ๋๋ ๊ตฌ์ฑ์์๋ค์ ์๋กญ๊ฒ ์์ฑํ๋ค. ์ฆ, VMS, PCB ์ ๊ฐ์ ๊ตฌ์ฑ์์๋ค์ ์๋กญ๊ฒ ํ ๋นํ๋ค.
๋ฐ๋ฉด์ exec()๋ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ๋ VMS, PCB์ ๊ฐ์ ๊ตฌ์ฑ์์๋ค์ ๋ถ๋ชจ ํ๋ก์ธ์ค ๊ฒ์ ๊ทธ๋๋ก ์ด์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ํ๋ก์ธ์ค๊ฐ ์คํํ๋ ์คํ ์ฝ๋ ์์ญ์ด ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์คํ ์ฝ๋ ์์ญ์ overwriteํ๋ค.
์ฆ, exec() ๋ช ๋ น์ด๋ VMS์ PCB ๊ฐ์ ๊ตฌ์ฑ์์๋ค์ ์๋กญ๊ฒ ํ ๋นํ์ง ์๊ณ ๊ทธ๋๋ก ๋ถ๋ชจ ํ๋ก์ธ์ค๋ฅผ ๋ฎ์ด์ฐ๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐ๋ก ์์ฑํ๊ฑฐ๋ ํ๋ ๊ณผ์ ์ด ์๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ด๋ค. ๋ค๋ง, ๋ถ๋ชจ ํ๋ก์ธ์ค๋ฅผ ๋ฎ์ด๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์คํ ์ค์ด๋ ๊ฒ๋ค์ ๋ชจ๋ ๋ ๋ผ๊ฐ ๋ฒ๋ฆฐ๋ค. ๋ฐ๋ผ์ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์คํ ์ฝ๋๊ฐ ๋ฎ์ด์ฐ์ฌ์ ธ๋ ์ข๋ค๋ฉด fork() ๋ณด๋ค๋ exec() ๋ช ๋ น์ด๋ก ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด ํจ์ฌ ๋ ํจ์จ์ ์ผ ๊ฒ์ด๋ค.
๋ค์์ ๋์ฌ ๋ด์ฉ๋ค์ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์ ์ค์ํ๋ค๊ณ ๊ฐ์กฐํ๋ ๋ถ๋ถ์ ๋ณ๋๋ก ํ๊ธฐํ์ฌ ์ ๋ฆฌํ ๋ด์ฉ์ด๋ค.
๊ธฐํ1. ๋ฉํฐ ์ฐ๋ ๋์ ๋๊ธฐํ๋ ์ ๊ด๋ จ์ด ์์๊น?
ํ๋์ ํ๋ก์ธ์ค๋ ์ต์ ํ๋์ ์ฐ๋ ๋๋ฅผ ๊ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋์ ํ๋ก์ธ์ค๋ ์ฌ๋ฌ ๊ฐ์ ์ฐ๋ ๋๋ฅผ ๊ฐ์ง ์ ์๋ค. ์ด ๋๋ฅผ ๋ฉํฐ ์ฐ๋ ๋๋ผ๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ฉํฐ ์ฐ๋ ๋๋ผ๋ ๊ฐ๋ ์ด ๋์ค๋ฉด ๊ฐ์ด ๋ฑ์ฅํ๋ ๊ฐ๋ ์ด ๋ฐ๋ก ๋๊ธฐํ(Synchronization)์ด๋ค. ์ ๋๊ธฐํ๊ฐ ๋ฑ์ฅํ๋ ๊ฒ์ผ๊น?
๋๊ธฐํ๋ฅผ ์์๋ณด๊ธฐ ์ ์ ๋ฉํฐ ์ฐ๋ ๋๊ฐ ์ด๋ค ๊ฒ์ ์ถ๊ตฌํ๋์ง๋ฅผ ๋จผ์ ์ดํด๋ณด์์ผ ํ๋ค. ๋ฉํฐ ์ฐ๋ ๋๋ ํด๋น ํ๋ก์ธ์ค๊ฐ ์คํํด์ผ ํ๋ ์ฐ์ฐ์ ํ๋ฆ ์ฆ, ํ์คํฌ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์ฐ๋ ๋๊ฐ ๋์์ ์ํ์ ํ๋ค. ๊ฒฐ๊ตญ, ๋์์ฑ์ ๊ตฌํํ๋ค๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด ๋์์ฑ์ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์ ๊ฒ ๊ฐ์ด ์ด์์ ์ผ ๊ฒ ๊ฐ์ง๋ง, ์์นซํ๋ค๊ฐ ์ด๋ฌ์ง๋ ์ ๋ฌ์ง๋ ๋ชปํ๋ ๊ต์ฐฉ ์ํ(Dead Lock)์ ๋น ์ง ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ๊ต์ฐฉ ์ํ๋ฅผ ํผํ๊ณ ์๋ฐฉํ๊ธฐ ์ํด์๋ ๋ฐ๋์ ๋๊ธฐํ๊ฐ ๋ณด์ฅ๋์ด์ผ ํ๋ค.
๊ธฐํ2. TCB๋ ๋ฌด์์ผ๊น?
์์์ OS๊ฐ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ๋ก์ธ์ค์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๋ PCB๊ฐ ์๋ค๋ผ๊ณ ๋ฐฐ์ ๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฌํ ๋น์ทํ ์ญํ ์ ํ๋ ๋ธ๋ก์ด ์ฐ๋ ๋ ๋ด์์๋ ์กด์ฌํ๋ค. ๋ฐ๋ก TCB(Thread Control Block)์ด๋ค. TCB์ ๋ํด์ ์ข ๋ ์์ธํ ์์๋ณด์.
์ฐ๋ ๋๋ ํ๋์ ํ๋ก์ธ์ค๊ฐ ์ ๊ณตํ๊ณ ์๋ ๊ณต๊ฐ ๋ด์์ ๊ฐ ์ฐ๋ ๋๋ง์ ๊ณ ์ ํ ๊ณต๊ฐ๊ณผ ์ฐ๋ ๋๋ค ๊ฐ์ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉํ๋ ๊ณต๊ฐ์ ์ฌ์ฉํ๋ค๊ณ ํ๋ค. ์ด๋ฅผ ์๋์ฒ๋ผ ๋์ํํด๋ณผ ์ ์๋ค.
์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ํ๋์ ํ๋ก์ธ์ค ๋ด์ 3๊ฐ์ ์ฐ๋ ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํ ๊ฒ์ด๋ค. 3๊ฐ์ ์ฐ๋ ๋๋ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์ ์ ์์ญ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ฒ๋ค์ด ์๊ณ , ๊ทธ๊ณณ์๋ ์คํํ ์ฝ๋์ ์ ์ญ ๋ฐ์ดํฐ, ํ์ผ ๋ฑ์ด ์กด์ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ํ ๋ถ๋ถ์ ๊ฐ ์ฐ๋ ๋๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ๋ค ์ค ๋ ์ง์คํฐ์ Stack ๋ถ๋ถ์ด๋ค. ๋จผ์ Stack๋ ๋งค์ฐ ์ ์ฉ๋ ์์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ผ๋ก ๋ณดํต ์ง์ญ ๋ณ์, ์๋ ๋ณ์ ๋ฑ์ด ์ ์ฅ๋์ด ์๋ค.
์ฐ๋ฆฌ๊ฐ ์ฃผ๋ชฉํ ๋ถ๋ถ์ ๋ฐ๋ก ๋ ์ง์คํฐ ๋ถ๋ถ์ด๋ค. ์ฐ๋ ๋๋ ๋ ์ง์คํฐ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ฅ? ๊ฐ์๊ธฐ CPU๋ ์๋๊ณ ๋ ์ง์คํฐ๊ฐ ์ ๋ฑ์ฅํ ๊น? ์ฌ๊ธฐ์ ์์๋์ด์ผ ํ ์ ์ ์ฐ๋ ๋๋ ์ฐ์ฐ ์คํ์ ๋จ์์ด๋ค. ์ฆ, CPU Core ์ฐ์ฐ์ด ์ค์ง์ ์ผ๋ก ์ํํ๋ ๊ณณ์ด ๋ฐ๋ก ์ฐ๋ ๋์์ ์๋ฏธํ๋ค.
CPU๋ ์ฐ์ฐ์ ์ํํ ๋ CPU ๋ด๋ถ์ ์๋ ๋ ์ง์คํฐ๋ฅผ ํ์ฉํด ์ฐ์ฐ์ ์งํํ๋ค. ์ฆ, ๋ ์ง์คํฐ์์ ๊ณ์ ์ํ ๋ณํ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ์ฐ๋ ๋๋ ์ด๋ฌํ ๋ ์ง์คํฐ์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๊ธฐ๋กํ๊ธฐ ์ํด์ TCB๋ผ๋ ๊ณต๊ฐ์ ํด๋น ์ ๋ณด๋ฅผ ๋ด์๋๋๋ค. ์ด๋ ๊ฒ TCB์ ๋ด์๋์ ์ ๋ณด๋ค์ ์ด์ฉํด ์ฐ๋ ๋๋ค์ ๋ ์ง์คํฐ์ ์ํ๋ฅผ ๋ฐฑ์ ํ๋ค๊ฐ ๋ค์ ๊ฐ์ ธ์๋ค๊ฐ ํ๋ ์์ ์ ํ๋๋ฐ, ์ด๋ฅผ Context Switching ์ด๋ผ๊ณ ํ๋ค(ํ๋ก์ธ์ค ๋ด์์์ Context Switching ์ด๋์ ๋ ๋ค๋ฅด๋ค!). ์ด๋ ๊ฒ ์ปจํ ์คํธ ์ค์์นญ์ ์ฐ๋ ๋๋ ํ๊ฒ ๋จ์ ๋ฐ๋ผ ํ๋ก์ธ์ค์์ ์ํ๋ฅผ ๊ฐ๋ ๊ฒ์ฒ๋ผ ์ฐ๋ ๋๋ ๋๊ฐ์ด ์ํ(์ค๋น, ์คํ, ๋ณด๋ฅ ๋ฑ)๋ฅผ ๊ฐ๋๋ค.