๐ฉ๐ป ์์ ํ ์ ๋ณตํ๋ ํ๋ก์ธ์ค vs ์ค๋ ๋ ๊ฐ๋
ํ๋์ ์ดํดํ๋ ํ๋ก์ธ์ค & ์ค๋ ๋ ๊ฐ๋
์ ๊ณต ์ง์ ์์ด ์ปดํจํฐ์ ํ๋ก๊ทธ๋จ์ ์ด์ฉํ๋๋ฐ๋ ๋ฌธ์ ์์ด ์์ง๋ง ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๋ ์ฌ๋์ผ๋ก์ ์ปดํจํฐ ์คํ ๋ด๋ถ ์์๋ฅผ ๋ฐ์ ธ๋ณด๊ฒ ๋ ๋, ์๋ง ์ปดํจํฐ ์ด์์ฒด์ ์ ๋ํด ์ ๋ฌธํ๊ฒ ๋๋ฉด ๊ฐ์ฅ ๋จผ์ ๋ฃ๊ณ ๋ฐฐ์ฐ๊ฒ ๋ ๊ฐ๋ ์ด ํ๋ก์ธ์ค์ ์ค๋ ๋ ์ผ ๊ฒ์ด๋ค. ๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด ์ด ๋์ ํ๋ง๋๋ก ์ ์ํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
ํ๋ก์ธ์ค (Process) | ์ค๋ ๋ (Thread) |
์ด์์ฒด์ ๋ก๋ถํฐ ์์์ ํ ๋น๋ฐ์ ์์ ์ ๋จ์ | ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ ์์์ ์ด์ฉํ๋ ์คํ ํ๋ฆ์ ๋จ์ |
์ด์์ฒด์ (OS)์ ๋ํ ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ ์ง์์ด ์๋ค๋ฉด ์์ ์ ์๊ฐ ๋ฌด์จ ์๋ฆฌ์ธ์ง ์ดํด๊ฐ ์ ๋์ง ์์ ๊ฒ์ด๋ค. ๊ทธ๋๋ ์์ ๋ฌธ์ฅ์๋ ๋๋ฆ ์ค๋ช ์ด ํจ์ถ๋์ด ์ ์ ๋ฆฌ ๋์ด ์๋ ์ ์ด๋ค. ์ผ๋จ ํ๋ก์ธ์ค์ ์์ ์ ๋จ์ ๋ผ๋ ๋จ์ด์ ์ค๋ ๋์ ์คํ ํ๋ฆ์ ๋จ์ ๋ผ๋ ๋จ์ด๋ฅผ ๊ธฐ์ตํด ๋๊ณ ๊ธ์ ์ฝ์ด๋ณด์. ๊ธ์ ์ ๋ ํ์๋ ์ ๋จ์ด์ ์๋ฏธ์ ๋ํด ํ์คํ ๊นจ๋ซ๊ฒ ๋ ๊ฒ์ด๋ค.
ํ๋ก๊ทธ๋จ ๊ณผ ํ๋ก์ธ์ค
์ ์ ํ๋ก๊ทธ๋จ (Static Program)
์ปดํจํฐ ์ ๊ณต์ด ์๋๋ผ์ 'ํ๋ก์ธ์ค' ๋ผ๋ ๋ช ์นญ์ ๋ฏ์ค์ ์๋๋ฐ, 'ํ๋ก๊ทธ๋จ' ์ ์น์ํ๋ฆฌ๋ผ ์๊ฐ๋๋ค.
ํ๋ก๊ทธ๋จ์ ์๋์ฐ์ *.exe ํ์ผ์ด๋ Mac์ *.dmg ํ์ผ๊ณผ ๊ฐ์ ์ปดํจํฐ์์ ์คํ ํ ์ ์๋ ํ์ผ์ ํต์นญํ๋ค. ๋จ, ์์ง ํ์ผ์ ์คํํ์ง ์์ ์ํ์ด๊ธฐ ๋๋ฌธ์ ์ ์ ํ๋ก๊ทธ๋จ(Static Program) ์ค์ฌ์ ํ๋ก๊ทธ๋จ(Program)์ด๋ผ๊ณ ๋ถ๋ฅธ ๊ฒ์ด๋ค.
์ด๋ ํ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๊ธฐ ์ํด์ ์๋ฐ๋ C์ธ์ด์ ๊ฐ์ ์ธ์ด๋ฅผ ์ด์ฉํด ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์์ฑ๋๋ค. ์ฆ, ํ๋ก๊ทธ๋จ์ ์ฝ๊ฒ ๋งํด์ ๊ทธ๋ฅ ์ฝ๋ ๋ฉ์ด๋ฆฌ ์ธ ๊ฒ์ด๋ค.
ํ๋ก์ธ์ค (Process)
ํ๋ก๊ทธ๋จ์ด ๊ทธ๋ฅ ์ฝ๋ ๋ฉ์ด๋ฆฌ์ด๋ฉด, ํ๋ก์ธ์ค๋ ํ๋ก๊ทธ๋จ์ ์คํ ์์ผ ์ ์ ์ธ ํ๋ก๊ทธ๋จ์ด ๋์ (ๅ็)์ผ๋ก ๋ณํ์ฌ ํ๋ก๊ทธ๋จ์ด ๋์๊ฐ๊ณ ์๋ ์ํ๋ฅผ ๋งํ๋ค. ์ฆ, ์ปดํจํฐ์์ ์์ ์ค์ธ ํ๋ก๊ทธ๋จ์ ์๋ฏธํ๋ ๊ฒ์ด๋ค.
์ด ๊ฐ๋
์ ์ ๋ ์์ํ ๊ฒ์ด ์๋๋ค. ctrl + alt + del ๋จ์ถํค๋ฅผ ๋๋ฌ ์ฐ๋ฆฌ๊ฐ ํญ์ ๋ณด๋ '์์
' ๊ด๋ฆฌ์๋ฅผ ์ด์ด๋ณด๋ฉด ๊ฐ๋
์ด ๊ณ ๋๋ก ๋ค์ด์๋๊ฑธ ๋ณผ ์ ์์ ๊ฒ์ด๋ค.
๋ชจ๋ ํ๋ก๊ทธ๋จ์ ์ด์์ฒด์ ๊ฐ ์คํ๋๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํด ์ค์ผ ์คํ๋ ์ ์๋ค. ๊ทธ๋์ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ์๊ฐ ํ์ผ์ ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๊ฒ ๋๊ณ , ์ด์์ฒด์ ๋ก๋ถํฐ ์์คํ ์์(CPU)์ ํ ๋น๋ฐ์ ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ์คํ์์ผ ์ฐ๋ฆฌ๊ฐ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ด์จ๋ ๋๊ฐ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํ ํ๋ ์ํ๋ ์ฐจ์ด์ผ ๋ฟ์ด๋ผ์, ์ผ๋ฐ์ ์ผ๋ก ํ๋ก์ธ์ค์ ํ๋ก๊ทธ๋จ์ ๊ฐ์ ๊ฐ๋ ์ผ๋ก ์ด์ผ๊ธฐํ ๋๊ฐ ๋ง์ง๋ง, ์ ์๋ฅผ ๋ณด์๋ฏ์ด ์๋ฐํ ๋ฐ์ง๋ฉด ์ด ๋์ ๋ค๋ฅธ ๊ฐ๋ ์ธ ๊ฒ์ด๋ค.
์ต์ข ์ ์ผ๋ก ์ด ๋์ ๊ฐ๋จ ๋ช ๋ฃํ๊ฒ ์ ๋ฆฌํ๋ฉด ์๋ ํ์ ๊ฐ๋ค.
ํ๋ก๊ทธ๋จ | ํ๋ก์ธ์ค |
์ด๋ค ์์ ์ ํ๊ธฐ ์ํด ์คํํ ์ ์๋ ํ์ผ | ์คํ๋์ด ์์ ์ค์ธ ์ปดํจํฐ ํ๋ก๊ทธ๋จ |
ํ์ผ์ด ์ ์ฅ ์ฅ์น์ ์์ง๋ง ๋ฉ๋ชจ๋ฆฌ์๋ ์ฌ๋ผ๊ฐ ์์ง ์์ ์ ์ ์ธ ์ํ | ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋๊ณ CPU ์์์ ํ ๋น๋ฐ์ ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ณ ์๋ ์ํ |
์ฝ๊ฒ ๋งํด ๊ทธ๋ฅ ์ฝ๋ ๋ฉ์ด๋ฆฌ | ๊ทธ ์ฝ๋ ๋ฉ์ด๋ฆฌ๋ฅผ ์คํํ ๊ฒ |
์ค๋ ๋
ํ๋ก์ธ์ค์ ํ๊ณ
๊ณผ๊ฑฐ์๋ ํ๋ก๊ทธ๋จ์ ์คํํ ๋ ํ๋ก์ธ์ค ํ๋๋ง์ ์ฌ์ฉํด์ ์ด์ฉํ์๋ค. ํ์ง๋ง ๊ธฐ์ ์ด ๋ฐ์ ๋จ์ ๋ฐ๋ผ ํ๋ก๊ทธ๋จ์ด ๋ณต์กํด์ง๊ณ ๋ค์ฑ๋ก์์ง์ผ๋ก์จ ํ๋ก์ธ์ค ์์ ํ๋๋ง์ ์ฌ์ฉํด์ ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ์๋ ํ๊ณ๊ฐ ์์๋ค.
์ค๋๋ ์ปดํจํฐ๋ ํ์ผ์ ๋ค์ด ๋ฐ์ผ๋ฉฐ ๋ค๋ฅธ ์ผ์ ํ๋ ๋ฉํฐ ์์ ์ ๋๋ฌด ๋น์ฐํ ๊ธฐ๋ฅ์ด๋ผ๊ณ ์๊ฐํ ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง, ๊ณผ๊ฑฐ์๋ ํ์ผ์ ๋ค์ด๋ฐ์ผ๋ฉด ์คํ ์์๋ถํฐ ์คํ ๋๊น์ง ํ๋ก์ธ์ค ํ๋๋ง์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ค์ด์ด ์๋ฃ๋ ๋๊น์ง ํ๋ฃจ์ข ์ผ ๊ธฐ๋ค๋ ค์ผ ํ๋ค. ๊ทธ๋ ๋ค๊ณ ๋์ผํ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ก ๋ง๋ค๊ฒ ๋๋ฉด, ๊ทธ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๊ณ CPU์์ ํ ๋น๋ฐ๋ ์์์ด ์ค๋ณต๋๊ฒ ๋ ๊ฒ์ด๋ค. ์ค๋ ๋(Thread)๋ ์ด๋ฌํ ํ๋ก์ธ์ค ํน์ฑ์ ํ๊ณ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ์ ํ์๋ค.
์ค๋ ๋์ ๊ฐ๋
์ค๋ ๋๋, ํ๋์ ํ๋ก์ธ์ค ๋ด์์ ๋์์ ์งํ๋๋ ์์ ๊ฐ๋, ํ๋ฆ์ ๋จ์ ๋ฅผ ๋งํ๋ค.
์ดํดํ๊ธฐ ์ฝ๊ฒ ๋น์ ๋ฅผ ๋ค์๋ฉด, ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ๊ฐ ์คํ ๋๋ฉด ํ๋ก์ธ์ค ํ๋๊ฐ ์์ฑ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ๋ ๋ธ๋ผ์ฐ์ ์์ ํ์ผ์ ๋ค์ด ๋ฐ์ผ๋ฉฐ ์จ๋ผ์ธ ์ผํ์ ํ๋ฉด์ ๊ฒ์์ ํ๊ธฐ๋ ํ๋ค.
์ฆ, ํ๋์ ํ๋ก์ธ์ค ์์์ ์ฌ๋ฌ๊ฐ์ง ์์ ๋ค ํ๋ฆ์ด ๋์์ ์งํ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ๊ฒ์ธ๋ฐ, ์ด๋ฌํ ์ผ๋ จ์ ์์ ํ๋ฆ๋ค์ ์ค๋ ๋๋ผ๊ณ ํ๋ฉฐ ์ฌ๋ฌ๊ฐ๊ฐ ์๋ค๋ฉด ์ด๋ฅผ ๋ฉํฐ(๋ค์ค) ์ค๋ ๋ ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์๋ ๊ทธ๋ฆผ์์ ๋ณด๋ฏ์ด ํ๋์ ํ๋ก์ธ์ค ์์ ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋๋ค์ด ๋ค์ด ์๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ์ค๋ ๋ ์๊ฐ ๋ง์ ์๋ก ๋น์ฐํ ํ๋ก๊ทธ๋จ ์๋๋ ๋์์ ํ๋ ์์ ์ด ๋ง์์ ธ ์ฑ๋ฅ์ด ์ฌ๋ผ๊ฐ๋ค.
์ผ๋ฐ์ ์ผ๋ก ํ๋์ ํ๋ก๊ทธ๋จ์ ํ๋ ์ด์์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ํ๋์ ํ๋ก์ธ์ค๋ ๋ฐ๋์ ํ๋ ์ด์์ ์ค๋ ๋๋ฅผ ๊ฐ๋๋ค. ์ฆ, ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋์ main ์ค๋ ๋๊ฐ ์์ฑ๋๊ฒ ๋๋ค. ์ค๋ ๋ 2๊ฐ, 3๊ฐ.. ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ ๊ฐ๋ฐ์๊ฐ ์ง์ ํ๋ก๊ทธ๋๋ฐํ์ฌ ์์น ์์ผ์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋์ ๋ณ๋๋ก ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ ๊ณผ๋ชฉ์ด ์๋ ์ด์ ์ด๊ธฐ๋ ํ๋ค.
์ง๊ธ๊น์ง ํ๋ก๊ทธ๋จ, ํ๋ก์ธ์ค, ์ค๋ ๋์ ๊ดํ ์์ฃผ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ํ๋ฆ๊ณผ ์ฐจ์ด์ ๋ํด ์์๋ณด์๋ค. ๊ทธ๋ฌ๋ ์ด์ ๋์ ์ด์์ฒด์ ์ง์๋ง์ผ๋ก๋ "ํ๋ก์ธ์ค์ ์ค๋ ๋์ ์ฐจ์ด์ ๋ํด ๋งํ๋ผ๋" ๊ธฐ์ ๋ฉด์ ์์ ํต๊ณผํ๊ธฐ๋ ํ๋ค ๊ฒ์ด๋ค.
์๋ํ๋ฉด ๋จ์ ํ๋ก์ธ์ค์ ์ค๋ ๋์ ์ฐจ์ด์ ๋ฟ๋ง ์๋๋ผ ํ๋ก์ธ์ค์ ์ค๋ ๋์ ๋ด๋ถ ์๋ ๋ฐฉ์์ ์ดํดํ๊ณ ์๋์ง ๊ถ๊ธํดํ๋ ๋ฉด์ ๊ด์ด ๋๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์ฌ์ค ์์์ ํ ์ค๋ช ์ ๋ด๋น๋ผ๋ ์ต๋ํ ์ดํดํ๊ธฐ ์ฝ๊ฒ ํ์ด์ด ๋ด์ฉ์ด๋ผ ์ ๋ถ๋ถ๋ง์ผ๋ก๋ ํ๋ก์ธ์ค์ ์ค๋ ๋๋ฅผ ์ดํดํ๋๋ฐ ์์ด ๋ง์ด ๋ถ์กฑํ๋ค. ์ด์์ฒด์ ๊ฐ ์์คํ ์์์ ์ด๋ค ๋ฐฉ์์ผ๋ก ํ ๋นํ๊ณ ํ๋ก๊ทธ๋จ์ ์์์ ์ด๋ค ๋ฐฉ์์ผ๋ก ํ์ฉํ๋ ๋ด๋ถ ์๋ ๋ฐฉ์์ ์ดํดํ๊ณ ์์ด์ผ, ๊ธฐ์ ๋ฉด์ ๋ ๊ทธ๋ ๊ณ ๋์ค์ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ ํ ๋ ์์ฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ด ํฌ์คํ ์ ๋๊น์ง ์ฝ๋ ๊ฒ์ ๊ถ์ฅํ๋ ๋ฐ๋ค.
ํ๋ก์ธ์ค & ์ค๋ ๋์ ๋ฉ๋ชจ๋ฆฌ
ํ๋ก์ธ์ค์ ์์ ๊ตฌ์กฐ
ํ๋ก๊ทธ๋จ์ด ์คํ๋์ด ํ๋ก์ธ์ค๊ฐ ๋ง๋ค์ด์ง๋ฉด ๋ค์ 4๊ฐ์ง์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ๊ตฌ์ฑ๋์ด ํ ๋น ๋ฐ๊ฒ ๋๋ค.
- ์ฝ๋ ์์ญ(Code / Text) : ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฑํ ํ๋ก๊ทธ๋จ ํจ์๋ค์ ์ฝ๋๊ฐ CPU๊ฐ ํด์ ๊ฐ๋ฅํ ๊ธฐ๊ณ์ด ํํ๋ก ์ ์ฅ๋์ด ์๋ค.
- ๋ฐ์ดํฐ ์์ญ(Data) : ์ฝ๋๊ฐ ์คํ๋๋ฉด์ ์ฌ์ฉํ๋ ์ ์ญ ๋ณ์๋ ๊ฐ์ข
๋ฐ์ดํฐ๋ค์ด ๋ชจ์ฌ์๋ค. ๋ฐ์ดํฐ์์ญ์ .data ,.rodata, .bss ์์ญ์ผ๋ก ์ธ๋ถํ ๋๋ค.
- .data : ์ ์ญ ๋ณ์ ๋๋ static ๋ณ์ ๋ฑ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- .BSS : ์ด๊ธฐ๊ฐ ์๋ ์ ์ญ ๋ณ์, static ๋ณ์๊ฐ ์ ์ฅ
- .rodata : const๊ฐ์ ์์ ํค์๋ ์ ์ธ ๋ ๋ณ์๋ ๋ฌธ์์ด ์์๊ฐ ์ ์ฅ
- ์คํ ์์ญ(Stack) : ์ง์ญ ๋ณ์์ ๊ฐ์ ํธ์ถํ ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ๋๋์์ฌ ์์์ ์ธ ์๋ฃ๋ฅผ ์ ์ฅํ๋ ๋ ๋ฆฝ์ ์ธ ๊ณต๊ฐ์ด๋ค. Stack์ ํจ์์ ํธ์ถ๊ณผ ํจ๊ป ํ ๋น๋๋ฉฐ, ํจ์์ ํธ์ถ์ด ์๋ฃ๋๋ฉด ์๋ฉธํ๋ค. ๋ง์ผ stack ์์ญ์ ์ด๊ณผํ๋ฉด stack overflow ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- ํ ์์ญ(Heap) : ์์ฑ์, ์ธ์คํด์ค์ ๊ฐ์ ๋์ ์ผ๋ก ํ ๋น๋๋ ๋ฐ์ดํฐ๋ค์ ์ํด ์กด์ฌํ๋ ๊ณต๊ฐ์ด๋ค. ์ฌ์ฉ์์ ์ํด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋์ ์ผ๋ก ํ ๋น๋๊ณ ํด์ ๋๋ค.
์์ ๊ทธ๋ฆผ์์ Stack๊ณผ Heap ์์ญ์ด ์์๋๋ก ํ์ดํ๊ฐ ์ณ ์๋ ๊ฒ์ ๋ณผ ์ ์๋๋ฐ, ์ด๋ ์ฝ๋ ์์ญ๊ณผ ๋ฐ์ดํฐ ์์ญ์ ์ ์ธํ ๋ ๊ทธ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ ์ ์ ์์ญ์ด์ง๋ง, ์คํ ์์ญ๊ณผ ํ ์์ญ์ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ ๋์ ํฌ๊ธฐ๊ฐ ๋์ด๋ฌ๋ค ์ค์ด๋ค๊ธฐ๋ ํ๋ ๋์ ์์ญ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ํํํ ๊ฒ์ด๋ค.
์๋ ๊ทธ๋ฆผ์ ๋ณด๋ฉด์ ๊ฐ๋ตํ ์ ๋ฆฌํ์๋ฉด, ํ๋ก๊ทธ๋จ์ด ์ฌ๋ฌ๊ฐ ์คํ๋๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ํ๋ก์ธ์ค๋ค์ด ๋ด๊ธธ ์ฃผ์ ๊ณต๊ฐ์ด ์์ฑ๋๊ฒ ๋๊ณ ๊ทธ ์์ Code, Data, Stack, Heap ๊ณต๊ฐ์ด ๋ง๋ค์ด์ง๊ฒ ๋๋ค.
์ค๋ ๋์ ์์ ๊ณต์
์ค๋ ๋๋ ํ๋ก์ธ์ค๊ฐ ํ ๋น ๋ฐ์ ์์์ ์ด์ฉํ๋ ์คํ์ ๋จ์๋ก์, ์ค๋ ๋๊ฐ ์ฌ๋ฌ๊ฐ ์์ผ๋ฉด ์ฐ๋ฆฌ๊ฐ ํ์ผ์ ๋ค์ด ๋ฐ์ผ๋ฉฐ ๋์์ ์น ์ํ์ ํ ์ ์๊ฒ ํด์ค๋ค. ์ค๋ ๋๋ผ๋ฆฌ ํ๋ก์ธ์ค์ ์์์ ๊ณต์ ํ๋ฉด์ ํ๋ก์ธ์ค ์คํ ํ๋ฆ์ ์ผ๋ถ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋์ ์์ ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค. ๊ทธ๋์ ์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ํ๋์ ํ๋ก์ธ์ค ๋ด์ ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋๊ฐ ๋ค์ด์๋ ์ํ์ธ ๊ฒ์ด๋ค.
์ด๋ ํ๋ก์ธ์ค์ 4๊ฐ์ง ๋ฉ๋ชจ๋ฆฌ ์์ญ(Code, Data, Heap, Stack) ์ค ์ค๋ ๋๋ Stack๋ง ํ ๋น๋ฐ์ ๋ณต์ฌํ๊ณ Code, Data, Heap์ ํ๋ก์ธ์ค๋ด์ ๋ค๋ฅธ ์ค๋ ๋๋ค๊ณผ ๊ณต์ ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๊ฐ์ ์ค๋ ๋๋ ๋ณ๋์ stack์ ๊ฐ์ง๊ณ ์์ง๋ง heap ๋ฉ๋ชจ๋ฆฌ๋ ๊ณ ์ ํ๊ธฐ ๋๋ฌธ์ ์๋ก ๋ค๋ฅธ ์ค๋ ๋์์ ๊ฐ์ ธ์ ์ฝ๊ณ ์ธ ์ ์๊ฒ ๋๋ค.
stack์ ํจ์ ํธ์ถ ์ ์ ๋ฌ๋๋ ์ธ์, ๋๋์๊ฐ ์ฃผ์๊ฐ, ํจ์ ๋ด์์ ์ ์ธํ๋ ๋ณ์ ๋ฑ์ ์ ์ฅํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๊ธฐ ๋๋ฌธ์, ๋ ๋ฆฝ์ ์ธ ์คํ์ ๊ฐ์ก๋ค๋ ๊ฒ์ ๋ ๋ฆฝ์ ์ธ ํจ์ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค ๋ผ๋ ์๋ฏธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋ฆฝ์ ์ธ ํจ์ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋ ๋ฆฝ์ ์ธ ์คํ ํ๋ฆ์ด ์ถ๊ฐ๋๋ค๋ ๋ง์ด๋ค.
์ฆ, stack์ ๊ฐ์ง์ผ๋ก์จ ์ค๋ ๋๋ ๋ ๋ฆฝ์ ์ธ ์คํ ํ๋ฆ์ ๊ฐ์ง ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
๋ฐ๋ฉด์ ํ๋ก์ธ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ก์ธ์ค ๋ผ๋ฆฌ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ๊ทผํ ์๋ ์๋ค.
์ด๋ ๊ฒ ๊ตฌ์ฑํ ์ด์ ๋ ํ๋์ ํ๋ก์ธ์ค๋ฅผ ๋ค์์ ์คํ ๋จ์์ธ ์ค๋ ๋๋ก ๊ตฌ๋ถํ์ฌ ์์์ ๊ณต์ ํ๊ณ , ์์์ ์์ฑ๊ณผ ๊ด๋ฆฌ์ ์ค๋ณต์ฑ์ ์ต์ํํ์ฌ ์ํ ๋ฅ๋ ฅ์ ์ฌ๋ฆฌ๊ธฐ ์ํด์๋ค.
ํ๋ก์ธ์ค์ ์์ ๊ณต์
๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ ํ๋ก์ธ์ค๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ณ๋์ ์ฃผ์ ๊ณต๊ฐ์์ ์คํ๋๊ธฐ ๋๋ฌธ์, ํ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ณ์๋ ์๋ฃ๊ตฌ์กฐ์ ์ ๊ทผํ ์๋ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ํ๋ก์ธ์ค๋ ์์ํ ๋ค๋ฅธ ํ๋ก์ธ์ค ์ ๋ณด์ ์ ๊ทผํ ์ ์์๊น?
ํ์ฌ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ๋ณด๋ฉด ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ์๋ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ๋ ์ฌ์ฌ์น ์๊ฒ ๋ณผ ์ ์์ ๊ฒ์ด๋ค. ์ด์ฒ๋ผ ํน๋ณํ ๋ฐฉ๋ฒ์ ํตํด ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ ๋ณด์ ์ ๊ทผํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ํ๋ก์ธ์ค ๊ฐ ์ ๋ณด๋ฅผ ๊ณต์ ํ๋ ๋ฐฉ๋ฒ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ๋ค์ด ์๋ค.
- IPC(Inter-Process Communication) ์ฌ์ฉ
- LPC(Local inter-Process Communication) ์ฌ์ฉ
- ๋ณ๋๋ก ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ก ์ค์
๊ทธ๋ฌ๋ ํ๋ก์ธ์ค ์์ ๊ณต์ ๋ ๋จ์ํ CPU ๋ ์ง์คํฐ ๊ต์ฒด๋ฟ๋ง์ด ์๋๋ผ RAM๊ณผ CPU ์ฌ์ด์ ์บ์ ๋ฉ๋ชจ๋ฆฌ๊น์ง ์ด๊ธฐํ๋๊ธฐ ๋๋ฌธ์ ์์ ๋ถ๋ด์ด ํฌ๋ค๋ ๋จ์ ์ด ์๋ค. ๊ทธ๋์ ๋ค์ค ์์ ์ด ํ์ํ๊ฒฝ์ฐ ์ค๋ ๋๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ํจ์ฌ ํจ์จ์ ์ด๋ผ, ํ๋ ์ปดํจํฐ์ ์ด์์ฒด์ ์์ ๋ค์ค ํ๋ก์ธ์ฑ์ ์ง์ํ๊ณ ์์ง๋ง ๋ค์ค ์ค๋ ๋ฉ์ ๊ธฐ๋ณธ์ผ๋ก ํ๊ณ ์๋ค.
ํ๋ก์ธ์ค & ์ค๋ ๋์ ๋์ ์คํ ์๋ฆฌ
์ฐ๋ฆฌ๊ฐ ์์ ์ ๋ค์ผ๋ฉด์, ์น์ํ์ ํ๊ณ , ๋ฉ์ ์ ์ ๋ฉ์์ง๋ฅผ ํ์ธํ ์ ์๋ ์ด์ ๋ ์ปดํจํฐ ๋ด๋ถ์ ์ผ๋ก ํ๋ก์ธ์ค์ ์ค๋ ๋๋ฅผ ๋์์ ์ฒ๋ฆฌํ๋ ๋ฉํฐ ํ์คํน(multi tasking) ๊ธฐ์ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ์ฌ๊ธฐ์ ๋์์ ์ฒ๋ฆฌํ๋ค๋ ๊ฒ์ด ์ฌํํ๊ฒ CPU ํ๋ก์ธ์๊ฐ ํ๋ก๊ทธ๋จ๋ค์ ํ๊บผ๋ฒ์ ๋์์ ๋๋ฆฌ๋ ๊ฒ์ผ๋ก ์๊ฐํ๊ฒ ์ง๋ง, ๋ด๋ถ์ ์ผ๋ก ๋ณต์กํ ์๋ฆฌ์ ์ํด ์ฒ๋ฆฌ๊ฐ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์๋ฆฌ๊ฐ ์ด์์ฒด์ ์ด๋ก ์ ํต์ฌ ์๋ฆฌ์ด๊ธฐ๋ ํ๋ค. ์ง๊ธ๋ถํฐ ๊ทธ ์๋ฆฌ์ ๋ํด ํํค์ณ ๋ณด๋๋ก ํ์.
๋ฉํฐ ์ฝ์ด์ ์ค๋ ๋
ํ๋ฒ ์ปดํจํฐ ๊ฒฌ์ ์ ๋ง์ถฐ๋ณธ ๊ฒฝํ์ด ์๋ ๋ ์๋ถ๋ค์ 4์ฝ์ด 8์ฐ๋ ๋ CPU์ ๋ํ ๋จ์ด๋ฅผ ๋ณธ ์ ์ด ์์ ๊ฒ์ด๋ค.
CPU ํ ๊ฐ๋ ์ฌ๋ฌ๊ฐ์ ์ฝ์ด๋ฅผ ๊ฐ์ง์ ์๋ค. ์ฝ์ด๋ ๋ง๊ทธ๋๋ก CPU ์ฝ์ด ์ ๋์ด๋ค. ์ฆ, ๋ช ๋ น์ด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ๋ฝ์ ํด์ํ๊ณ ์คํํ๋ ๋ฐ๋์ฒด ์ ๋์ด 4๊ฐ๊ฐ ์๋ ๊ฒ์ด๋ค. 4์ฝ์ด๊ฐ ๋ฌผ๋ฆฌ์ ์ฝ์ด ๊ฐฏ์๋ฉด, 8์ฐ๋ ๋๋ ๋ ผ๋ฆฌ์ ์ฝ์ด ๊ฐฏ์๋ฅผ ๋งํ๋ค. ์ด ๊ฒฝ์ฐ ๋ฌผ๋ฆฌ์ ์ฝ์ด ํ๋๊ฐ ์ค๋ ๋ ๋ ๊ฐ ์ด์์ ๋์์ ์คํ ๊ฐ๋ฅํ๋ค๋ ์๋ฏธ๊ฐ ๋๋ค. ์ฆ, ์ด์์ฒด์ ๊ฐ 8๊ฐ์ ์์ ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ค๋ ๋ป์ด๋ค. ์ด๋ฅผ ํ์ดํผ์ค๋ ๋ฉ(Hyper-Threading) ๊ธฐ์ ์ด๋ผ ๋งํ๋ค.
๋จ, ์ฌ๊ธฐ์ CPU์ ์ฐ๋ ๋๋ ์ฐ๋ฆฌ๊ฐ ๋ฐฐ์ด ํ๋ก์ธ์ค์ ์ฐ๋ ๋์๋ ์กฐ๊ธ ๋ค๋ฅธ ๊ฐ๋ ์ด๋ค. ์๋ฐํ ๋งํ์๋ฉด CPU์ ์ค๋ ๋๋ ํ๋์จ์ด์ ์ค๋ ๋์ด๊ณ ํ๋ก๊ทธ๋จ์ ์ค๋ ๋๋ ์ํํธ์จ์ด์ ์ค๋ ๋๋ก ๊ตฌ๋ถํ๋ค.
๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ๋ ์ปดํจํฐ๋ฅผ ์ด์ฉํ ๋ ํ๋ก๊ทธ๋จ์ ์์ญ, ์๋ฐฑ๊ฐ๋ฅผ ์ผ ๋๊ณ ์ด์ฉํ๋ค. ๊ทธ๋ผ ๊ทธ ์์ญ์๋ฐฑ๊ฐ์ ํ๋ก์ธ์ค๋ค์ ๊ณ ์ 8๊ฐ์ ๋ ผ๋ฆฌ์ ์ธ ์ค๋ ๋๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ผ๊น?
์ด ์๋ฆฌ๋ฅผ ์๊ธฐ์ํด์ ๋ณ๋ ฌ์ฑ(Parallelism) ๊ณผ ๋์์ฑ(Concurrency)์ด๋ผ๋ ๊ฐ๋ ์ ์๊ณ ์์ด์ผ ํ๋ค. ์ด ๊ฐ๋ ์ ์ด์์ฒด์ ์ ํ๋ก์ธ์ค, ์ค๋ ๋๋ฅผ ์ดํดํ๋๋ฐ ์์ด ๊ฐ์ฅ ํต์ฌ ๊ณจ์๊ฐ ๋๋ ๋ ์๋ค์ด๋ค.
CPU์ ์์ ์ฒ๋ฆฌ ๋ฐฉ์
๋ณ๋ ฌ์ฑ (Parallelism)
๋ณ๋ ฌ์ฑ์ ์ง๊ด์ ์ผ๋ก ๋ช ๋ น์ด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ๋ฝ์ ํด์ํ๊ณ ์คํํ๋ ๋ฐ๋์ฒด ์ ๋์ธ ์ฌ๋ฌ๊ฐ์ ์ฝ์ด์ ๋ง์ถฐ ์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์ค, ์ค๋ ๋๋ฅผ ๋๋ ค ๋ณ๋ ฌ๋ก ์์ ๋ค์ ๋์ ์ํํ๋ ๊ฒ์ ๋งํ๋ค.
๋์ผ์ฝ์ด, ์ฟผ๋์ฝ์ด, ์ฅํ์ฝ์ด ๋ฑ๋ฑ ์ด๋ฐ ๋ช ์นญ์ด ๋ถ๋ ๋ฉํฐ์ฝ์ด ํ๋ก์ธ์๊ฐ ๋ฌ๋ฆฐ ์ปดํจํฐ์์ ํ ์ ์๋ ๋ฐฉ์์ด๋ค.
๋์์ฑ (Concurrency)
๋์์ฑ์ ๋ ์ด์์ ์์ ์ด ๋์์ ์คํ๋๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด '๋์' ๋ผ๋ ์๋ฏธ์์ ๋ณ๋ ฌ์ฑ๊ณผ ๋์์ฑ์ ํ๊ธ ์๋ฏธ๊ฐ ํท๊ฐ๋ฆด์ ์๋ค. Parallelism๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ๋ง๋ก ๋์์ ์คํํ๋ ๊ฒ์ด๋ผ๊ณ ํ๋ฉด, Concurrency๋ ๋์์ ์คํํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํ๋ ๊ฒ์ผ๋ก ์ดํดํ๋ฉด ๋๋ค.
์ฆ, 1๊ฐ์ ์ฝ์ด๊ฐ ์๊ณ 4๊ฐ์ ์์ ์ด ์๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด, ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ๋ก์ธ์ค๋ค์ โ๊ณ์ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ์กฐ๊ธ์ฉ ์ฒ๋ฆฌํจ์ผ๋ก์จ ๋ง์น ํ๋ก๊ทธ๋จ์ด ๋์์ ์คํ๋๋ ๊ฒ ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ์ด๋ค. ์ด๋ ํ๋ก์ธ์ค๋ค์ โ๋ฒ๊ฐ์๊ฐ๋ฉด์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ปดํจํฐ๋ฅผ ๋ชจ๋ฅด๋ ์ฌ๋๋ค์ด ๋ณด๋ฉด ๋ง์น ๋์์ ๋์๊ฐ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ๋๋ค.
๋จ, ์ด๋ ์์ ๋ค์ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ์คํํ ๋ ์์ ๋ค์ ์์ฃผ ์๊ฒ ๋๋์ด ์์ฃผ ์กฐ๊ธ์ฉ๋ง ์์ ์ ์ํํ๊ณ ๋ค์ ์์ ์ผ๋ก ๋์ด๊ฐ๋ ์์ผ๋ก ๋์๋๋ค. ์ด๋ ๊ฒ ํ๋ ์ด์ ๋ ์ฌ๋ฌ ์์ ์ ๋์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ๋ง๋ค์ด, ์ฌ์ฉ์์๊ฒ ๋ ๋น ๋ฅธ ๋ฐ์์ฑ์ ์ ๊ณตํ๊ธฐ ์ํด์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ์งํ ์ค์ธ ์์ ๋ค์ A → B → C → D ๋ก ๋ฒ๊ฐ์ ๋ฐ๊พธ๋ ๊ฒ์ Context Switching ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋์์ฑ์ด ํ์ํ ์ด์
๊ทธ๋ฐ๋ฐ ์์์ ์ผ๋ก ์๊ฐํด๋ณด๋ฉด ๋์์ฑ(Concurrency)์ '๋์์ ๋์๊ฐ๋ ๊ฒ ์ฒ๋ผ' ๋ณด์ด๋ ๊ฑฐ์ง, ์ ๋ง ์ค์ ๋ก ๋์์ ๋์๊ฐ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ต์ข ์์ ์ด ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ฑฐ์ ์ฐจ์ด๊ฐ ์์ ๊ฒ์ด๋ค. ๋ณ๋ ฌ์ฑ์ ์ ๋ง๋ก ๊ฐ ์ฝ์ด์ ํ๋ก์ธ์ค๋ฅผ ๋๋ ์คํํ๋ ๊ฑฐ๋๊น ๋์ผ ์ฝ์ด๋ฉด ๋ฐ ์ด์ ์ค์ด๋คํ ๋ฐ ๋ง์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ์ด๋ ๊ฒ ๋ฒ๊ฑฐ๋กญ๊ฒ ์์ ๋ค์ ์ค์์นญ ํ๋ฉฐ ์ฒ๋ฆฌํ๋ ๊ฒ์ผ๊น?
์ฒซ๋ฒ์งธ๋ ํ๋์จ์ด์ ํ๊ณ ๋๋ฌธ์ด๋ผ๊ณ ํ ์์๋ค. CPU ๋ฐ์ด ๋๋ฌธ์ ๊นก ํด๋ญ์ผ๋ก ์ฑ๋ฅ์ ์ฌ๋ฆฌ๊ธฐ์๋ ํ๊ณ์ ๋ด์ฐฉ๋ฌ๊ธฐ ๋๋ฌธ์ ์ฝ์ด์ ์ฑ๋ฅ์ ์ฌ๋ฆฌ๋ ๋์ ์ฝ์ด๋ฅผ ์ฌ๋ฌ๊ฐ ํ์ฌํ์ฌ ์ฟผ๋ ์ฝ์ด, ์ฅํ ์ฝ์ด CPU๋ค์ ์ถ์ํ๊ณ ์๋ค. ํ์ง๋ง ์๋ฌด๋ฆฌ ์ฝ์ด๋ฅผ ๋ง์ด ๋ฃ์ด๋ ์์ญ๊ฐ์ ์ฝ์ด๋ฅผ ๋ฃ์์ ์์ผ๋ ๊ฒฐ๊ตญ ํ๋์จ์ด์ ์ ํ์ด ๊ฑธ๋ฆฌ๊ฒ ๋๊ณ ์์ญ์๋ฐฑ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ๋๋ฆฌ๊ธฐ ์ํด์ ๊ฒฐ๊ตญ ๋์์ฑ์ด ํ์ํ ๊ฒ์ด๋ค.
๋๋ฒ์งธ๋ ๋ณด๋ค ๋ ผ๋ฆฌ์ ์ธ ํจ์จ์ ์ธ ์ด์ ์์์ด๋ค. 4์ฝ์ด 8์ค๋ ๋์ CPU ํ๊ฒฝ์์ ํ์ฌ ์ด 16๊ฐ์ ์์ ์ด ์๋ค๊ณ ๊ฐ์ ์ ํด๋ณด์. ๊ทธ์ค 8๊ฐ๋ ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ด๊ณ , ๋๋จธ์ง 8๊ฐ๋ ์งง์ ์๊ฐ์ ํ์๋ก ํ๋ ์์ ์ด๋ผ๊ณ ํ๋ค. ๋ ผ๋ฆฌ์ ์ธ 8๊ฐ์ ์ฝ์ด์ด๋ ์ต๋ 8๊ฐ๊น์ง ๋์์ ์คํํ ์ ์์ํ ๋ฐ, ๋ง์ผ ์ต์ ์ ๊ฒฝ์ฐ 8๊ฐ์ ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ด ๋จผ์ ๋์์ ์ฒ๋ฆฌ๋๊ธฐ ์์ํ๋ค๊ณ ํ์. ์ด ๊ฒฝ์ฐ ๋๋จธ์ง ๊ฐ๋ฒผ์ด 8๊ฐ์ ์์ ์ ์ฒ๋ฆฌํ๋๋ฐ ์งง์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๋ฐ์๋ ๋ถ๊ตฌํ๊ณ ํ์ฌ ์ฒ๋ฆฌ์ค์ธ 8๊ฐ์ ์์ ์ด ๋ค ๋๋ ๋ ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ๋นํจ์จ์ ์ธ ๋ฉด์ ๊ทน๋ณตํ๊ธฐ ์ํด ์์ ์ ์์ฃผ ์๊ฒ ๋๋ ๋ฒ๊ฐ์ ๊ฐ๋ฉด์ ์ฒ๋ฆฌํ๋ ๋์์ฑ ๊ฐ๋ ์ ์ฑํํ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ์ต๋ 8๊ฐ์ ์์ ์ ๋ํด์ 8๊ฐ์ ๋ ผ๋ฆฌ์ ์ธ ์ค๋ ๋๊ฐ ๋ณ๋ ฌ์ ์ผ๋ก ์์ฃผ ๋น ๋ฅด๊ฒ ๋์์ ์ผ๋ก ์์ ์ ํ๋ฉด์, ๊ทธ๋ณด๋ค ๋ง์ ์์ญ๊ฐ์ ์ํํธ์จ์ด์ ์ค๋ ๋๊ฐ ์๋ค๋ฉด ์ ์ ํ ๋ณ๋ ฌ์ฑ๊ณผ ๋์์ฑ์ ์์ด ๋์์ ๋๋ฆฌ๊ฒ ๋๊ฒ ๋๋ค.
ํ๋ก์ธ์ค & ์ค๋ ๋์ ์๋ช ์ฃผ๊ธฐ
ํ๋ก์ธ์ค์ ์ค๋ ๋๋ ๊ฐ๊ฐ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด์์ฒด์ ๋ ์ด๋ฌํ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , ํ๋ก์ธ์ค์ ์ค๋ ๋๋ฅผ ์กฐ์ ํ์ฌ ์์คํ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
ํ๋ก์ธ์ค ์ค์ผ์ฅด๋ง
ํ๋ก์ธ์ค ์ค์ผ์ค๋ง(Process Scheduling)์ ์ด์์ฒด์ ์์ CPU๋ฅผ ์ฌ์ฉํ ์ ์๋ ํ๋ก์ธ์ค๋ฅผ ์ ํํ๊ณ , CPU๋ฅผ ํ ๋นํ๋ ์์ ์ ๋งํ๋ค. ํ๋ก์ธ์ค ์ค์ผ์ค๋ง์ ํ๋ก์ธ์ค์ ์ฐ์ ์์, ์์ ๋ ๋ฑ์ ๊ณ ๋ คํ์ฌ ํจ์จ์ ์ผ๋ก ๋ฐฐ์นํ์ฌ, ์ด๋ฅผ ํตํด ์ด์์ฒด์ ๋ CPU๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ฉฐ ์์คํ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค. ๊ทธ๋์ ์ค์ผ์ค๋ง์ ๋ฉํฐ ํ์คํน ์์ ์ ๋ง๋ค์ด๋ด๋ ๋ฐ์ ์์ด์ ํต์ฌ์ ์ธ ๋ถ๋ถ์ด๋ค.
์ค์ผ์ฅด๋ง์ ์ด์์ฒด์ ์ ํน์ง๊ณผ ์์คํ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ์์ผ๋ก ๋์๋๋ค. ์๊ณ ๋ฆฌ์ฆ ์ข ๋ฅ๋ก๋ ๋ํ์ ์ผ๋ก FCFS(First-Come, First-Served), SJF(Shortest-Job-First), Priority, RR(Round-Robin), Multilevel Queue ๋ฑ์ด ์๋ค.
ํ๋ก์ธ์ค ์ํ
ํ๋ก์ธ์ค์ ์ํ๋ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ ๋์ ๋ณ๊ฒฝ๋๋ ๊ณ ์ ์ํ๋ฅผ ์๋ฏธํ๋ค. ํ๋ก์ธ์ค๊ฐ ์์ฑ๋์ด ์คํํ๊ธฐ ๊น์ง ํ๋ก์ธ์ค๋ ์ฌ๋ฌ๊ฐ์ง์ ์ํ๋ฅผ ๊ฐ๊ฒ ๋๊ณ , ์ํ์ ๋ณํ์ ๋ฐ๋ผ ํ๋ก์ธ์ค๊ฐ ๋์๋๋ ๊ฒ์ด๋ค. ํ๋ก์ธ์ค๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ 5๊ฐ์ง ์ํ๋ฅผ ๊ฐ์ง๋ค.
ํ๋ก์ธ์ค ์ํ | ์ค๋ช |
์์ฑ (new) | ํ๋ก์ธ์ค๊ฐ ์์ฑ๋๊ณ ์์ง ์ค๋น๊ฐ ๋์ง ์์ ์ํ |
์ค๋น (ready) | ํ๋ก์ธ์ค๊ฐ ์คํ์ ์ํด ๊ธฐ๋ค๋ฆฌ๋ ์ํ CPU๋ฅผ ํ ๋น๋ฐ์ ์ ์๋ ์ํ์ด๋ฉฐ, ์ธ์ ๋ ์ง ์คํ๋ ์ค๋น๊ฐ ๋์ด์๋ค. |
์คํ (running) | ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ํ ๋น๋ฐ์ ์คํ๋๋ ์ํ |
๋๊ธฐ (waiting) | ํ๋ก์ธ์ค๊ฐ ํน์ ์ด๋ฒคํธ(์
์ถ๋ ฅ ์์ฒญ ๋ฑ)๊ฐ ๋ฐ์ํ์ฌ ๋๊ธฐํ๋ ์ํ CPU๋ฅผ ํ ๋น๋ฐ์ง ๋ชปํ๋ฉฐ, ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ฌ ๋ค์ READY ์ํ๋ก ์ ํ๋ ๋๊น์ง ๋๊ธฐํ๋ค. |
์ข ๋ฃ (terminated) | ํ๋ก์ธ์ค๊ฐ ์คํ์ ์๋ฃํ๊ณ ์ข
๋ฃ๋ ์ํ ๋ ์ด์ ์คํ๋ ์ ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ๋๊ฒ ๋๋ค. |
ํ๋ก์ธ์ค ์ํ ์ ์ด
ํ๋ก์ธ์ค ์ํ ์ ์ด๋ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ ๋์ ์ํ๊ฐ OS์ ์ํด ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋งํ๋ค. ์ด์์ฒด์ ๋ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๊ฐ์ํ๊ณ , ํ๋ก์ธ์ค ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ก์ธ์ค ์ค์ผ์ฅด๋ง์ ํตํดํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ์ดํ๋ค. ์๋ฅผ ๋ค์ด, READY ์ํ์ ์๋ ์ฌ๋ฌ ํ๋ก์ธ์ค ์ค์์ ์ด๋ค ํ๋ก์ธ์ค๋ฅผ RUNNING ์ํ๋ก ๋ฐ๊ฟ์ง, TERMINATED ์ํ์ ์๋ ํ๋ก์ธ์ค๋ฅผ ์ ๊ฑฐํ๊ณ READY ์ํ์ ์๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์ ํํ ์ง ์ค์ผ์ฅด๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ํด ๋์๋๋ค.
- Admitted (new → ready) : ํ๋ก์ธ์ค ์์ฑ์ ์น์ธ ๋ฐ์
- Dispatch (ready→ running) : ์ค๋น ์ํ์ ์๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ค ์ค ํ๋๊ฐ ์ค์ผ์ค๋ฌ์ ์ํด ์คํ๋จ
- Interrupt (running → ready) : Timeout, ์๊ธฐ์น ์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ฌ ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ์ค๋น ์ํ๋ก ์ ํํ๊ณ , ํด๋น ์์ ์ ๋จผ์ ์ฒ๋ฆฌ
- I/O or event wait (running → wainting) : ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์ ์ถ๋ ฅ์ด๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ, ์ ์ถ๋ ฅ์ด๋ ์ด๋ฒคํธ๊ฐ ๋๋ ๋๊น์ง ๋๊ธฐ ์ํ๋ก ์ ํ
- I/O or event completion (waiting → ready) : ์ ์ถ๋ ฅ์ด๋ ์ด๋ฒคํธ๊ฐ ๋ชจ๋ ๋๋ ํ๋ก์ธ์ค๋ฅผ ๋ค์ ์ค๋น ์ํ๋ก ๋ง๋ค์ด ์ค์ผ์ค๋ฌ์ ์ํด ์ ํ๋ ์ ์๋ ์ํ๋ก ์ ํ
ํ๋ก์ธ์ค ์ปจํ ์คํธ ์ค์์นญ
์ปจํ ์คํธ ์ค์์นญ(Context Switching)์ CPU๊ฐ ํ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ ํํ ๋ ๋ฐ์ํ๋ ์ผ๋ จ์ ๊ณผ์ ์ ๋งํ๋ค. ์์ ๋์์ฑ (Concurrency) ํํธ์์ ๋ค๋ค๋ฏ์ด CPU๋ ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ง ์คํํ ์ ์์ผ๋ฏ๋ก, ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์คํํ์ฌ CPU ํ์ฉ๋ฅ ์ ๋์ด๊ธฐ ์ํด ์ปจํ ์คํธ ์ค์์นญ์ด ํ์ํ ๊ฒ์ด๋ค.
์ปจํ ์คํธ ์ค์์นญ์ ์ข๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋งํ์๋ฉด, ๋์ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ๋ฅผ ํ๋ฉด์ ํด๋น ํ๋ก์ธ์ค์ ์ํ(Context)๋ฅผ ๋ณด๊ดํ๊ณ , ๋๊ธฐํ๊ณ ์๋ ๋ค์ ์์์ ํ๋ก์ธ์ค๊ฐ ๋์ํ๋ฉด์ ์ด์ ์ ๋ณด๊ดํ๋ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ณต๊ตฌํ๋ ์์ ์ ๋งํ๋ค. ์ด๋ฌํ ์ปจํ ์คํธ ์ค์์นญ์ด ์ผ์ด๋ ๋ ๋ค์๋ฒ ํ๋ก์ธ์ค๋ ์ค์ผ์ค๋ฌ๊ฐ ๊ฒฐ์ ํ๊ฒ ๋๋ค. ์ฆ, ์ปจํ ์คํธ ์ค์์นญ์ ํ๋ ์ฃผ์ฒด๋ ์ค์ผ์ค๋ฌ์ด๋ค.
PCB (Process Control Block)
PCB(ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก)๋ ์ด์์ฒด์ ์์ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ํด๋น ํ๋ก์ธ์ค์ ์ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋งํ๋ค.
ํ๋ก์ธ์ค๋ฅผ ์ปจํ ์คํธ ์ค์์นญ ํ ๋ ๊ธฐ์กด ํ๋ก์ธ์ค์ ์ํ๋ฅผ ์ด๋๊ฐ์ ์ ์ฅํด ๋ฌ์ผ ๋ค์์ ๋๊ฐ์ ์์ ์ ์ด์ด์ ํ ์ ์์ ๊ฒ์ด๊ณ , ์๋ก ํด์ผ ํ ์์ ์ ์ํ ๋ํ ์์์ผ ์ด๋์๋ถํฐ ๋ค์ ์์ ์ ์์ํ ์ง ๊ฒฐ์ ํ ์ ์์ ๊ฒ์ด๋ค. ์ฆ, PCB๋ ํ๋ก์ธ์ค ์ค์ผ์ค๋ง์ ์ํด ํ๋ก์ธ์ค์ ๊ดํ ๋ชจ๋ ์ ๋ณด ์ ์ฅํ๋ ์์ ์ ์ฅ์์ธ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ์ด์์ฒด์ ๋ PCB์ ๋ด๊ธด ํ๋ก์ธ์ค ๊ณ ์ ์ ๋ณด๋ฅผ ํตํด ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ํ๋ก์ธ์ค์ ์คํ ์ํ๋ฅผ ํ์ ํ๊ณ , ์ฐ์ ์์๋ฅผ ์กฐ์ ํ๋ฉฐ, ์ค์ผ์ค๋ง์ ์ํํ๊ณ , ๋ค๋ฅธ ํ๋ก์ธ์ค์์ ๋๊ธฐํ๋ฅผ ์ ์ดํ๋ค.
์ด์์ฒด์ ์ ๋ฐ๋ผ PCB์ ํฌํจ๋๋ ํญ๋ชฉ์ด ๋ค๋ฅผ ์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก PCB๋ด ์๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์๋ค.
- ํฌ์ธํฐ (Pointer) : ํ๋ก์ธ์ค์ ํ์ฌ ์์น๋ฅผ ์ ์ฅํ๋ ํฌ์ธํฐ ์ ๋ณด
- ํ๋ก์ธ์ค ์ํ (Process state) : ํ๋ก์ธ์ค์ ๊ฐ ์ํ - ์์ฑ(New), ์ค๋น(Ready), ์คํ(Running), ๋๊ธฐ(Waiting), ์ข ๋ฃ(Terminated) ๋ฅผ ์ ์ฅ
- ํ๋ก์ธ์ค ์์ด๋ (Process ID, PID) : ํ๋ก์ธ์ค ์๋ณ์๋ฅผ ์ง์ ํ๋ ๊ณ ์ ํ ID
- ํ๋ก๊ทธ๋จ ์นด์ดํฐ (Program counter) : ํ๋ก์ธ์ค๋ฅผ ์ํด ์คํ๋ ๋ค์ ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ํฌํจํ๋ ์นด์ดํฐ๋ฅผ ์ ์ฅ
- ๋ ์ง์คํฐ (Register) : ๋์ฐ๊ธฐ, ๋ฒ ์ด์ค, ๋ ์ง์คํฐ ๋ฐ ๋ฒ์ฉ ๋ ์ง์คํฐ๋ฅผ ํฌํจํ๋ CPU ๋ ์ง์คํฐ์ ์๋ ์ ๋ณด
- ๋ฉ๋ชจ๋ฆฌ ์ ํ (Memory Limits) : ์ด์ ์ฒด์ ์์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์คํ ์ ๋ํ ์ ๋ณด
- ์ด๋ฆฐ ํ์ผ ๋ชฉ๋ก (List of open file) : ํ๋ก์ธ์ค๋ฅผ ์ํด ์ด๋ฆฐ ํ์ผ ๋ชฉ๋ก
Context Switching ๊ณผ์
๋ ๊ฐ์ ํ๋ก์ธ์ค ๊ฐ์ ์ปจํ ์คํธ ์ค์์นญ ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ํํํ ๊ฒ์ด๋ค.
- CPU๋ Process P1์ ์คํํ๋ค (Executing)
- ์ผ์ ์๊ฐ์ด ์ง๋ Interrupt ๋๋ system call์ด ๋ฐ์ํ๋ค. (CPU๋ idle ์ํ)
- ํ์ฌ ์คํ ์ค์ธ Process P1์ ์ํ๋ฅผ PCB1์ ์ ์ฅํ๋ค. (Save state into PCB1)
- ๋ค์์ผ๋ก ์คํํ Process P2๋ฅผ ์ ํํ๋ค. (CPU ์ค์ผ์ค๋ง)
- Process P2์ ์ํ๋ฅผ PCB2์์ ๋ถ๋ฌ์จ๋ค. (Reload state from PCB2)
- CPU๋ Process P2๋ฅผ ์คํํ๋ค. (Executing)
- ์ผ์ ์๊ฐ์ด ์ง๋ Interrupt ๋๋ system call์ด ๋ฐ์ํ๋ค. (CPU๋ idle ์ํ)
- ํ์ฌ ์คํ ์ค์ธ Process P2์ ์ํ๋ฅผ PCB2์ ์ ์ฅํ๋ค. (Save state into PCB2)
- ๋ค์ Process P1์ ์คํํ ์ฐจ๋ก๊ฐ ๋๋ค. (CPU ์ค์ผ์ค๋ง)
- Process P1์ ์ํ๋ฅผ PCB1์์ ๋ถ๋ฌ์จ๋ค. (Reload state from PCB1)
- CPU๋ Process P1์ ์ค๊ฐ ์์ ๋ถํฐ ์คํํ๋ค. (Executing)
idle(๋๊ธฐ) ๊ณผ executing(์คํ) ์ CPU์ ๋์ ์ํ๋ฅผ ๋ํ๋ธ ๊ฒ์ด๋ค
Context Switching Overhead
์ด๋ฌํ ์ปจํ ์คํธ ์ค์์นญ ๊ณผ์ ์ ์ฌ์ฉ์๋ก๊ธ ๋น ๋ฅธ ๋ฐ์์ฑ๊ณผ ๋์์ฑ์ ์ ๊ณตํ์ง๋ง, ์คํ๋๋ ํ๋ก์ธ์ค์ ๋ณ๊ฒฝ ๊ณผ์ ์์ ํ๋ก์ธ์ค์ ์ํ, ๋ ์ง์คํฐ ๊ฐ ๋ฑ์ด ์ ์ฅ๋๊ณ ๋ถ๋ฌ์ค๋ ๋ฑ์ ์์ ์ด ์ํํ๊ธฐ ๋๋ฌธ์ ์์คํ ์ ๋ง์ ๋ถ๋ด์ ์ฃผ๊ฒ๋๋ค.
์์ ์ปจํ ์คํธ ์ค์์นญ ๊ณผ์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด P1์ด Execute์์ idle์ด ๋ ๋ P2๊ฐ ๋ฐ๋ก Execute๊ฐ ๋์ง ์๊ณ idle์ ์ํ์ ์กฐ๊ธ ์๋ค๊ฐ Execute๊ฐ ๋๋๊ฑธ ๋ณผ ์ ์๋ค. ์ด ๊ฐ๊ทน์ด ๋ฐ๋ก ์ปจํ ์คํธ ์ค์์นญ ์ค๋ฒํค๋(overhead) ์ธ ๊ฒ์ด๋ค.
์ปจํ ์คํธ ์ค์์นญ ์ค๋ฒํค๋๋ ๋ํ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ํ์์ ์ํด์ ๋ฐ์๋๋ค.
- PCB ์ ์ฅ ๋ฐ ๋ณต์ ๋น์ฉ
- CPU ์บ์ ๋ฉ๋ชจ๋ฆฌ ๋ฌดํจํ์ ๋ฐ๋ฅธ ๋น์ฉ
- ํ๋ก์ธ์ค ์ค์ผ์ค๋ง ๋น์ฉ
์ปจํ ์คํธ ์ค์์นญ ๊ณผ์ ์์ PCB๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ํ๋๋ฐ ๋น์ฉ์ด ๋ฐ์ํ๋ฉฐ, ํ๋ก์ธ์ค ์์ฒด๊ฐ ๊ต์ฒด๋๋ ๊ฒ์ด๋ CPU์ ์บ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ๋ฌดํจํ๊ฐ ๋๋ค. ์ด ๊ณผ์ ์์๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์๊ฐ์ด ๋์ด๋๊ณ , ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ํ CPU ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ ํ๋ก์ธ์ค๋ฅผ ์ ํํ๋ ๋น์ฉ๋ ๋ง๋ง์น ์๋ค.
๋ฐ๋ก ๋ค์์ ๋ค๋ฃจ๊ฒ ์ง๋ง, ์ปจํ ์คํธ ์ค์์นญ์ ๊ผญ ํ๋ก์ธ์ค ๋ฟ๋ง ์๋๋ผ ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋๋ค ๋ผ๋ฆฌ๋ ์ค์์นญ์ด ์ผ์ด๋๋ค. ๋ณดํต ๋ฉํฐ ์ค๋ ๋๋ผ๊ณ ํ๋ฉด ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋๊ฐ ๋์์ ๋์๊ฐ๋ ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ด ๋ฌด์กฐ๊ฑด ์์นํ ๊ฑฐ๋ผ ์์ํ์ง๋ง, ์ด๋ ์ ํํ์ง ์๋ค. ์ปจํ ์คํธ ์ค์์นญ ์ค๋ฒํค๋๋ผ๋ ๋ณ์ ๋๋ฌธ์ ์ค๋ ๋ ๊ต์ฒด ๊ณผ์ ์์ ๊ณผํ๊ฒ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ฉด ์คํ๋ ค ๋ฉํฐ ์ค๋ ๋๊ฐ ์ฑ๊ธ ์ค๋ ๋๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ํ์์ด ๋ํ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ค๋ ๋ ์ค์ผ์ฅด๋ง
ํ๋ก์ธ์ค ์ค์ผ์ฅด๋ง๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ค๋ ๋ ์ค์ผ์ค๋ง(Thread Scheduling)์ ์ด์์ฒด์ ์์ ๋ค์ค ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, CPU๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ค๋ ๋๋ฅผ ์ ํํ๊ณ , CPU๋ฅผ ํ ๋นํ๋ ์์ ์ ๋งํ๋ค.
์ค๋ ๋์ ์ฐ์ ์์, ์คํ ์๊ฐ, ์
์ถ๋ ฅ ์์ฒญ ๋ฑ์ ์ ๋ณด๋ฅผ ๊ณ ๋ คํ์ฌ CPU๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ค๋ ๋๋ฅผ ์ ํํ๋, ์ค๋ ๋ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ํ๋ก์ธ์ค ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ ์ฌํ๊ฒ ๋์ํ๋ค. ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ด ์์ผ๋ฉฐ, ๋ํ์ ์ผ๋ก๋ Round Robin, Priority-based scheduling, Multi-level Queue scheduling ๋ฑ์ด ์๋ค.
๋ค๋ง ์ค๋ ๋ ์ค์ผ์ค๋ง์ ํ๋ก์ธ์ค ์ค์ผ์ค๋ง๊ณผ ๋ค๋ฅด๊ฒ, ํ๋์ ํ๋ก์ธ์ค ๋ด์์ ๋ค์์ ์ค๋ ๋๊ฐ ๋์ํ๋ ํํ์ด๊ธฐ ๋๋ฌธ์, ์ค๋ ๋ ๊ฐ์ ์ํธ์์ฉ๊ณผ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค๋ ์ฐจ์ด์ ์ด ์กด์ฌํ๋ค.
์ค๋ ๋ ์ํ
ํ๋ก์ธ์ค ์ํ์ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ค๋ ๋์๋ ์ํ๊ฐ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ 4๊ฐ์ง ์ํ๋ฅผ ๊ฐ์ง๋ค.
์ค๋ ๋ ์ํ | ์ค๋ช |
NEW | ์ค๋ ๋๊ฐ ์์ฑ๋๊ณ ์์ง ํธ์ถ๋์ง ์์ ์ํ |
RUNNABLE | ์ค๋ ๋๊ฐ ์คํ๋๊ธฐ ์ํด ๊ธฐ๋ค๋ฆฌ๋ ์ํ CPU๋ฅผ ํ ๋น๋ฐ์ ์ ์๋ ์ํ์ด๋ฉฐ, ์ธ์ ๋ ์ง ์คํ๋ ์ค๋น๊ฐ ๋์ด์๋ค. |
BLOCKED | ์ค๋ ๋๊ฐ ํน์ ์ด๋ฒคํธ(์
์ถ๋ ฅ ์์ฒญ ๋ฑ)๊ฐ ๋ฐ์ํ์ฌ ๋๊ธฐํ๋ ์ํ CPU๋ฅผ ํ ๋น๋ฐ์ง ๋ชปํ๋ฉฐ, ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ฌ ๋ค์ RUNNABLE ์ํ๋ก ์ ํ๋ ๋๊น์ง ๋๊ธฐํ๋ค. |
TERMINATED | ์ค๋ ๋๊ฐ ์คํ์ ์๋ฃํ๊ณ ์ข
๋ฃ๋ ์ํ ๋ ์ด์ ์คํ๋ ์ ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ๋๋ค. |
์ค๋ ๋ ์ํ ์ ์ด
์ค๋ ๋ ์ํ ์ ์ด์ ๋ํ ์ ์ด๋ ์๋ฐ์ ๊ฐ์ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์์ ์์ธํ ๋ค๋ฃจ๊ฒ ๋ ๊ฒ์ด๋ค.
์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ
์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ(thread context switching)์ ๋ฉํฐ ์ค๋ ๋ฉ ํ๊ฒฝ์์ ์ค๋ ๋ ๊ฐ์ ์คํ์ ์ ํํ๋ ๊ธฐ์ ์ด๋ค. ํ๋ก์ธ์ค ์ปจํ ์คํธ ์ค์์นญ๊ณผ ๋ค๋ฅธ์ ์ ์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ์ ํ๋์ ํ๋ก๋ด์ค ๋ด์ ์ค๋ ๋๋ค์ ๊ตํํ๋ค๋ ์ ์ด๋ค.
TCB (Thread Control Block)
PCB ์ฒ๋ผ, TCB(์ค๋ ๋ ์ ์ด ๋ธ๋ก)๋ ๊ฐ ์ค๋ ๋๋ง๋ค ์ด์ ์ฒด์ ์์ ์ ์งํ๋ ์ค๋ ๋์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๊ทธ๋ฆผ์์ ๋ณผ ์ ์๋ฏ์ด TCB๋ PCB ์์ ๋ค์ด์๋ค. ์ค๋ ๋๊ฐ ํ๋ก์ธ์ค ๋ด์ ์์นํ ๊ฒ ์ฒ๋ผ ๋ง์ด๋ค.
์ญ์ ์ค๋ ๋์ ์ํ ์ ๋ณด, ์ค๋ ๋ ID, ์ค๋ ๋ ์ฐ์ ์์, ์ค์ผ์ค๋ง ์ ๋ณด ๋ฑ ๋ค์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค. TCB๋ ์ค๋ ๋๊ฐ ์์ฑ๋ ๋ ์ด์ ์ฒด์ ์ ์ํด ์์ฑ๋๋ฉฐ, ์ค๋ ๋๊ฐ ์คํ์ ๋ง์น๊ณ ์๋ฉธ๋ ๋ ํจ๊ป ์๋ฉธ๋๋ค.
๋ํ ์ค๋ ๋ ๊ฐ์ ์์ ๊ณต์ ์ ๋๊ธฐํ๋ TCB๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฎคํ ์ค(mutual exclusion)๋ ์ธ๋งํฌ์ด(semaphore)์ ๊ฐ์ ๋๊ธฐํ ๊ธฐ๋ฒ์ ์ฌ์ฉํ ๋, TCB์์ ํด๋น ์ค๋ ๋์ ๋ฎคํ ์ค๋ ์ธ๋งํฌ์ด ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๊ณ , ์ค๋ ๋๊ฐ ํด๋น ์์์ ๋ํ ์ ๊ทผ ๊ถํ์ ํ๋ํ๊ฑฐ๋ ๋ฐ๋ฉํ ๋ TCB์ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํ๊ฒ ๋๋ค.
๋ฎคํ ์ค(mutex)
์๊ณ ๊ตฌ์ญ์ 1๊ฐ์ ์ค๋ ๋๋ง ๋ค์ด๊ฐ ์ ์๋ ๋๊ธฐํ ๊ธฐ๋ฒ.
์ธ๋งํฌ์ด(semaphore)
์๊ณ ๊ตฌ์ญ์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋ค์ด๊ฐ ์ ์๊ณ , counter๋ฅผ ๋์ด์ ํ์ฉ ๊ฐ๋ฅํ ์ค๋ ๋๋ฅผ ์ ํํ๋ ๊ธฐ๋ฒ
ํ๋ก์ธ์ค ์ปจํ ์คํธ ์ค์์นญ vs ์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ
ํ๋ก์ธ์ค ์ปจํ ์คํธ ์ค์์นญ๊ณผ ์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ์ ๋ชจ๋ ๋ฉํฐํ์คํน ํ๊ฒฝ์์ ์ฌ๋ฌ ํ๋ก์ธ์ค ๋๋ ์ค๋ ๋๋ฅผ ๋์์ ์คํํ๊ธฐ ์ํ ๊ธฐ์ ์ด๋ค. ๊ทธ๋ฌ๋ ๋ ๊ธฐ์ ์ ๋ช ๊ฐ์ง ์ฐจ์ด์ ์ด ์๋ค.
1. TCB๊ฐ PCB๋ณด๋ค ๊ฐ๋ณ๋ค
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด, ์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ์ด ํ๋ก์ธ์ค ์ปจํ ์คํธ ์ค์์นญ๋ณด๋ค ๋ ๋น ๋ฅด๋ค.
์์์ ํ๋ก์ธ์ค์ ์ค๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ์น์ ์์ ๋ค๋ค๋ฏ์ด, ํ๋ก์ธ์ค ๋ด์ ์ค๋ ๋๋ค์ text, data, heap ์์ญ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ TCB์๋ stack ๋ฐ ๊ฐ๋จํ register ํฌ์ธํฐ ์ ๋ณด๋ง์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ PCB๋ณด๋ค TCB๊ฐ ๊ฐ๋ฒผ์ ๋ ๋นจ๋ฆฌ ์ฝ๊ณ ์ธ์ ์๋ค.
2. ์บ์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ธฐํ ์ฌ๋ถ
CPU ์บ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ CPU์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ ์์นํ๋ฉฐ CPU์์ ํ๋ฒ ์ด์ ์ฝ์ด๋ค์ธ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ค๊ฐ, CPU๊ฐ ๋ค์ ๊ทธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌํ ๋, ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํ์ง ์๊ณ ๊ณง๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด ์ฃผ๋ ์ฉ๋์ด๋ค.
๊ทธ๋ฐ๋ฐ ํ๋ก์ธ์ค ์ปจํ ์คํธ ์ค์์นญ์ด ์ผ์ด๋ ๊ฒฝ์ฐ, ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์คํ์ผ๋ก ์ธํด CPU๊ฐ ์๋ก์ด ๋ช ๋ น์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํด์ผ ํ๊ธฐ ๋๋ฌธ์ CPU ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ธฐํ ํ์ฌ์ผ ํ๋ค. ์ด๊ฒ์ด ํ๋ก์ธ์ค ์ปจํ ์คํธ ์ค์์นญ์ ๋ถ๋ด์ด ๋๋ ์์์ด๋ค.
์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ์ผ ๊ฒฝ์ฐ, ํ๋ก์ธ์ค ๋ด ์ค๋ ๋ ๊ฐ์ ์คํ๊ณผ ๋ ์ง์คํฐ ๊ฐ ๋ฑ ์ผ๋ถ ์ปจํ ์คํธ ์ ๋ณด๋ง ๋ณ๊ฒฝ๋๋ฏ๋ก CPU ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ ์ด๊ธฐํ๋์ง ์๋๋ค. ๋ค๋ง ์ค๋ ๋๊ฐ ๋ค๋ฅธ CPU ์ฝ์ด์์ ์คํ๋ ๋๋ ํด๋น ์ฝ์ด์ ์บ์ ๋ฉ๋ชจ๋ฆฌ์ ์ค๋ ๋ ์ปจํ ์คํธ ์ ๋ณด๊ฐ ๋ก๋๋์ด์ผ ํ๋ฏ๋ก ์ด๊ธฐํ๋ ์ ์๋ค.
3. ์์ ๋๊ธฐํ ๋ฌธ์
์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ์ด ๋ฐ์ํด ๋ค๋ฅธ ์ค๋ ๋๊ฐ heap ์์ญ์ ๊ณต์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋, ์ด์ ์ค๋ ๋๊ฐ ์ด๋ฏธ ๊ณต์ ์์์ ์ฌ์ฉํ๊ณ ์๋ ๊ฒฝ์ฐ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ ๊ฐ์ ์ค๋ ๋๊ฐ ๋์์ ํ๋์ ๋ณ์๋ฅผ ์์ ํ๋ ค๊ณ ํ ๋, ์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ์ด ๋ฐ์ํ๋ฉด ๋ณ์์ ๊ฐ์ ์๋ชป๋ ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ ํ ์ ์๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ ์ค๋ ๋ ๊ฐ์ ๊ฒฝ์ ์กฐ๊ฑด (race condition)์ด๋ผ๊ณ ํ๋ค.
ํ๋ก์ธ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๋ฆฝ๋ ๊ณต๊ฐ์ด์ง๋ง, IPC์ ๊ฐ์ ๊ณต์ ์์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ๋๊ฐ์ด ๊ฒฝ์ ์กฐ๊ฑด์ด ๋ฐ์ ํ ์๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด, ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋์์ ํ์ผ ์์คํ ์ ์ ๊ทผํ์ฌ ํ์ผ์ ์์ ํ๋ ค๊ณ ํ ๋, ์ปจํ ์คํธ ์ค์์นญ์ด ๋ฐ์ํ ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๊ทธ ํ์ผ์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ ํ์ผ ๋ด์ฉ์ด ์์๋ ์ ์๋ค.
๋ฐ๋ผ์ ์ด๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด์ ๊ฐ ์ํฉ์ ์ ์ ํ ๊ณต์ ์์์ ๋ํ ๋๊ธฐํ ๋ฉ์ปค๋์ฆ์ด ํ์ํด์ง๋ค.
Multi Process ์ Multi Thread
๋ฉํฐ ํ๋ก์ธ์ค์ ๋ฉํฐ ์ค๋ ๋๋ ํ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ฒ๋ฆฌ๋ฐฉ์ ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ์ด๋ฆ์ผ๋ก ์ ์ถํ ์ ์๋ฏ์ด ๋ฉํฐ ํ๋ก์ธ์ค์ ๋ฉํฐ ์ค๋ ๋๋ ์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์ค, ์ค๋ ๋๊ฐ ๋์ํ๋ ๊ฒ์ ์ผ ์ปซ๋๋ค.
์์ํ ์ ์๋ฏ์ด, ํ๋ก์ธ์ค์ ์ค๋ ๋๊ฐ ๋จ์ผ์ด ์๋ ๋ค์ค์ผ๋ก ๋์๊ฐ์ผ๋ก์จ ์ฑ๋ฅ ํฅ์ ๋ฑ ์ฌ๋ฌ๊ฐ์ง ํจ๊ณผ๋ฅผ ์ป์ ์ ์๊ฒ ๋๋ค. ํ์ง๋ง ๋ํ ์ด๋ก ์ธํด ๋ฐ์๋๋ ๋ถ๊ฐ์ ์ธ ๋ฌธ์ ์ ๋ ๋ฐ์ํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๊ฐ์ ์ฅ๋จ์ ์ ํ์ ํ์ฌ ์ ์ฌ์ ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๊ตฌ๋๋ค. ๋ฉํฐ ํ๋ก์ธ์ค์ ๋ฉํฐ ์ค๋ ๋ ๊ตฌ์ฑ์ ์์ธํ ์ฅ๋จ์ ์ ๋ํ ๋น๊ต๋ ์๋ ํฌ์คํ ์ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
# ์ฐธ๊ณ ์๋ฃ
https://youtu.be/1grtWKqTn50
https://youtu.be/QmtYKZC0lMU
https://www.youtube.com/watch?v=iks_Xb9DtTM
https://zangzangs.tistory.com/109
https://wookkingkim.tistory.com/m/4
https://badcandy.github.io/2019/01/14/concurrency-01/
https://fastcampus.co.kr/media_branding_cs
https://lotuus.tistory.com/92
https://www.crocus.co.kr/1364
https://velog.io/@ssh1997/CS-Process-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4
https://velog.io/@curiosity806/Context-Switching%EC%9C%BC%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-process%EC%99%80-thread
https://blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jhc9639&logNo=221707378026