[์ปดํจํฐ ๊ณตํ] ์ด์์ฒด์ (OS)
๐ Intro
ํฐ ๋ ธ์ด๋ง์ด ์ ์ํ ์ปดํจํฐ ๋ชจ๋ธ์ ๋ฐ๋ฅด๋ฉด ์ปดํจํฐ ์์คํ ์ ํฌ๊ฒ CPU, ๋ฉ๋ชจ๋ฆฌ, ๋์คํฌ๋ก ๊ตฌ์ฑ๋์ด ์๋ค๊ณ ๋ณผ ์ ์๋ค. ์ด ๊ฐ๊ฐ์ ํ๋์จ์ด๋ฅผ ์ฐ๊ฒฐํ๋ค๊ณ ํด์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํ๋ก๊ทธ๋จ์ ์ํํ ์ ์๋ ๊ฒ์ ์๋๋ค. ํ๋์จ์ด๋ ๋จ์ง ๊ทธ ํ๋์จ์ด์ ํน์ ๊ธฐ๋ฅ์ ์ํ ํ ๋ฟ์ธ๋ฐ, ์ด ์ปดํจํฐ๋ผ๋ ํ๋์จ์ด ์์ ํ๋ก๊ทธ๋จ๋ค์ด ๋์๋๋ ค๋ฉด ์ด ํ๋์จ์ด๋ค๊ณผ ์ ์ ํ๊ฒ ๋ฐ์ดํฐํ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ๋ ผ๋ฆฌ์ ์ธ ์ผ๋ค์ ํด์ผ๋ง ํ๋ค.
๊ทธ ํ๋์จ์ด์๊ฒ ์ผ์ ์ํค๋ ์ฃผ์ฒด๊ฐ ๋ฐ๋ก ์ด์์ฒด์ ์ด๋ค.
๐ ์ด์์ฒด์
โจ ์ด์์ฒด์ ์ ๋ชฉ์ ๊ณผ ๊ธฐ๋ฅ
์ด์์ฒด์ ์ ๋ชฉ์ ์ ์ฒ๋ฆฌ๋ฅ๋ ฅ ํฅ์, ์ฌ์ฉ ๊ฐ๋ฅ๋ ํฅ์, ์ ๋ขฐ๋ ํฅ์, ๋ฐํ ์๊ฐ ๋จ์ถ ๋ฑ์ ์์ผ๋ฉฐ, ์ด๋ฐ ์ด์์ฒด์ ์ ๊ธฐ๋ฅ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๋ค.
- ํ๋ก์ธ์, ๊ธฐ์ต์ฅ์น, ์ ์ถ๋ ฅ์ฅ์น, ํ์ผ ๋ฐ ์ ๋ณด ๋ฑ์ ์์์ ๊ด๋ฆฌ
- ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ์์์ ์ค์ผ์ค๋ง ๊ธฐ๋ฅ์ ์ ๊ณต (์ค์ผ์ค๋ง์ด๋ ์ด๋ค ์์์ ๋๊ฐ, ์ธ์ , ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ง๋ฅผ ๊ฒฐ์ ํด์ฃผ๋ ๊ฒ)
- ์ฌ์ฉ์์ ์์คํ ๊ฐ์ ํธ๋ฆฌํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณต
- ์์คํ ์ ๊ฐ์ข ํ๋์จ์ด์ ๋คํธ์ํฌ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ์ด
โจ ์ด์ ์ฒด์ ์ ์์คํ ์์ ๊ด๋ฆฌ
์ด์์ฒด์ ๊ฐ ์๋ค๋ฉด, ์์ฉ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ์ ์๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ ์ปดํจํฐ๋ฅผ ์ด์ฉํด ๋ค์ํ ์์ ์ ํ๋ ๊ฒ์ด ๋ชฉ์ ์ด๊ณ , ์ด์์ฒด์ ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ํ๋์จ์ด์๊ฒ ์ผ์ ์ํฌ ์ ์๋๋ก ๋์์ค๋ค. ํ๋์จ์ด๋ฅผ ๊ตฌ์ฑํ๋ ์ผ์ ํ๋ CPU, ์๋ฃ๋ฅผ ์ ์ฅํ๋ RAM, ๋์คํฌ ๋ฑ์ ์์คํ ์์์ ๊ด๋ฆฌํ๋ ์ฃผ์ฒด๊ฐ ๋ฐ๋ก ์ด์์ฒด์ ์ด๋ค.
- ํ๋ก์ธ์ค ๊ด๋ฆฌ(CPU)
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
- I/O(์ ์ถ๋ ฅ) ๊ด๋ฆฌ (๋์คํฌ, ๋คํธ์ํฌ ๋ฑ)
[๊ทธ๋ฆผ] ์ด์์ฒด์ ์ ๊ตฌ์กฐ ๋ชจ์๋
โจ ์์ฉ ํ๋ก๊ทธ๋จ ๊ด๋ฆฌ
๋ชจ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์คํ ์ ์์์ ๋ง์๋๋ก ์ฌ์ฉํ๋ค๋ฉด, ํด์ปค์ ์ํ ๊ณต๊ฒฉ์ ๋ฌด๋ฐฉ๋นํ ์ํ๊ฐ ๋๋ค. ์ ์์ ์ธ ๋ชฉ์ ์ ๊ฐ์ง ํ๋ก๊ทธ๋จ์ด ๋์คํฌ์ ๋ชจ๋ ๋ฏผ๊ฐํ ์ ๋ณด์ ์ ๊ทผํ๊ฑฐ๋, ๋ด ์ค๋งํธํฐ์ ํน์ ์ฑ์ด ์นด๋ฉ๋ผ๋ฅผ ์๋ฌด ๋๋ ์คํํด์ ์ดฌ์ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋์ฐํ๋ค. ๋ฐ๋ผ์, ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ถํ์ ๋ํ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค. ๋ํ ์ฌ๋ฌ ์ฌ๋์ด ํ๋์ ๊ธฐ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ์๋ฅผ ๊ด๋ฆฌํ๋ ์ผ๋ ๋งค์ฐ ์ค์ํ๋ค.
- ์์ฉ ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ณ , ์์คํ ์์์ ์ฌ์ฉํ ์ ์๋๋ก ๊ถํ๊ณผ ์ฌ์ฉ์๋ฅผ ๊ด๋ฆฌ
โจ ์์ฉ ํ๋ก๊ทธ๋จ: ์ด์์ฒด์ ๋ฅผ ํตํด ์ปดํจํฐ์๊ฒ ์ผ์ ์ํค๋ ๊ฒ
์์ฉ ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ๋ฅผ ํตํด ์ปดํจํฐ์๊ฒ ์ผ์ ์ํค๋ ค๋ฉด, ์ปดํจํฐ๋ฅผ ์กฐ์ํ ์ ์๋ ๊ถํ์ ์ด์์ฒด์ ๋ก๋ถํฐ ๋ถ์ฌ๋ฐ์์ผ ํ๋ค. ๊ถํ์ ๋ถ์ฌ๋ฐ๊ณ ๋ ํ์๋, ์ด์์ฒด์ ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ์ ์ํตํ๊ธฐ ์ํด์๋, ์ด์์ฒด์ ๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ํด ์ธํฐํ์ด์ค(API)๋ฅผ ์ ๊ณตํด์ผ ํ๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์คํ ์์์ ์ฌ์ฉํ ์ ์๋๋ก, ์ด์์ฒด์ ์ฐจ์์์ ๋ค์ํ ํจ์๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์์คํ ์ฝ(System call)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ค๋งํธํฐ์์ ์ฌ์ฉ์์๊ฒ ์ด๋ค ๋๋ฐ์ด์ค(์นด๋ฉ๋ผ ๋ฑ)์ ์ฌ์ฉ์ ํ๋ฝ๋ฐ๋ ํ๋ฉด์ ๋ณธ ์ ์ด ์์ ๊ฒ์ด๋ค. ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก, ์์ฉ ํ๋ก๊ทธ๋จ ์ญ์ ์ด์์ฒด์ ๊ฐ ํ๋ฆฐํฐ ์ฌ์ฉ์ ํ๊ฐํด ์ฃผ์ง ์๋๋ค๋ฉด ์ฌ์ฉํ ์ ์๋ค. ์๋ํ๋ก์ธ์ ํ๋ก๊ทธ๋จ์ด ํ๋ฆฐํฐ๋ฅผ ์ฌ์ฉํด์ ์ธ์ํ๊ธฐ ์ํด์๋, ์๋ํ๋ก์ธ์ ํ๋ก๊ทธ๋จ์ ์ด์์ฒด์ ๋ก๋ถํฐ ํ๋ฆฐํฐ ์ฌ์ฉ์ ๋ํ ๊ถํ์ ๋ถ์ฌ๋ฐ์์ผ ํ๋ค.
์์ฉ ํ๋ก๊ทธ๋จ์ด ํ๋ฆฐํฐ ์ฌ์ฉ์ ๋ํ ๊ถํ์ ํ๋ํ ํ์๋, ํ๋ฆฐํฐ๋ฅผ ์ฌ์ฉํ ๋ ํ์ํ API๋ฅผ ํธ์ถํด์ผ ํ๋ค. ์ด API๋ ์์คํ ์ฝ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
๐ ํ๋ก์ธ์ค
ํ๋ก์ธ์ค๋ ํ๋ก๊ทธ๋จ์ด ์คํ ์ค์ธ ์ํ๋ก ํน์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ก๊ทธ๋จ์ ์ฝ๋๊ฐ ์ ์ฌ๋๊ณ CPU ๊ฐ ํด๋น ๋ช
๋ น์ด๋ฅผ ํ๋์ฉ ์ํํ๊ณ ์๋ ์ํ๋ฅผ ์๋ฏธํ๋ค. ์ด์ ์ฒด์ ์์๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ์ํํ๊ฒ ๋๋๋ฐ ์คํ ์ค์ธ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์
์ ํ๋ก์ธ์ค๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ฉด, ์ด์์ฒด์ ๋ก๋ถํฐ ์คํ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๋๋ฅผ ์คํํ๋ค.
์ด๋ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ ํ๋ก์ธ์ค๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์๋ฅผ ๋ค์ด Chrome ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ ๊ฐ ์คํํ๋ฉด, ๋ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์์ฑ๋๋ค. ์ด๋ ๊ฒ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฌ ํ๋ก์ธ์ค(๋ค์ค ํ๋ก์ธ์ค)๋ฅผ ๋ง๋ค๊ธฐ๋ ํ๋ค.
[๊ทธ๋ฆผ] ์ฌ์ง์์ ํ์ธํ ์ ์๋ ํญ๋ชฉ ํ๋ํ๋๊ฐ ์ ๋ถ ํ๋ก์ธ์ค์ด๋ค.
โจ ํ๋ก์ธ์ค ๊ตฌ์ฑ ์์
ํ๋ก์ธ์ค์ ๊ตฌ์กฐ์ฒด์๋ ํ๋ก์ธ์ค๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํด์ผ ํ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ๋ ๊ฐ์ข ๊ฐ์ฒด๋ค์ ํฌ์ธํฐ๋ฅผ ๊ด๋ฆฌํ๋ ํธ๋ค ํ ์ด๋ธ์ ๊ฐ์ง๊ณ ์๋ค.
- ์ ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ ๊ด๋ฆฌ(Virtual Address Descriptors)
ํ๋ก์ธ์ค ๋ณ๋ก ๋ ๋ฆฝ๋ ์์ญ์ ๊ฐ์ง๊ฒ ๋๋ ๊ณณ์ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ค. ์ปค๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฒฝ์ฐ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ํ์ฌ ์ฌ์ฉํ๊ณ ์๋ค. ํ๋ก์ธ์ค ๋ณ๋ก ๋ ๋ฆฝ์ ์ธ ์ ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ด๋ฆฌํ๊ธฐ ์ํด์ VAD(Virtual Address Descriptors)๋ผ๋ ๊ด๋ฆฌ ํ ์ด๋ธ์ด ์กด์ฌํ๋ค.
- ํธ๋ค ํ ์ด๋ธ(Handle Table)
ํธ๋ค ํ ์ด๋ธ์ ํ๋ก์ธ์ค์์ ์ฌ์ฉํ๋ ๋ชจ๋ ํธ๋ค์ ๋ํ ์ปค๋ ๊ฐ์ฒด ํฌ์ธํฐ ์ ๋ณด๋ฅผ ๋ฐฐ์ด ํํ๋ก ๊ฐ์ง๊ณ ์๋ ๊ณต๊ฐ์ด๋ค. ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃํ๊ฒ ๋ ๋ ์ด ํ ์ด๋ธ์ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ด ํ๋ก์ธ์์์ ์ฌ์ฉํ๊ณ ์๋ ๋ชจ๋ ์ปค๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ๋ฐํํ๋ค.
- ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
ํ๋ก์ธ์ค ๋จ์๋ก ๊ด๋ฆฌ๋๋ ์์ ์ค ๊ฐ์ฅ ์ค์ํ ๊ตฌ๋ณ์ ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ด๋ค. ์๋์ฐ์ ๊ฒฝ์ฐ, ํ์ด์ง ๊ธฐ๋ฒ์ ์ด์ฉํ์ฌ ํ๋ก์ธ์ค๋ง๋ค ๋ณ๋์ ๊ณ ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๊ณ ์๋ค.
โจ ํ๋ก์ธ์ค ํน์ง
ํ๋ก์ธ์ค์ ํน์ง์ผ๋ก๋ ์์ ์์ ์ ๋จ์์ ๋์คํจ์นญ์ ๋จ์๊ฐ ์๋ค.
- ์์ ์์ ์ ๋จ์
๊ฐ๊ฐ์ ํ๋ก์ธ์ค๋ ์์ ์ ์คํ ์ด๋ฏธ์ง ๋ก๋์ ์คํ์ ํ์ํ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค. ์ด๊ฒ์ ๊ฐ ํ๋ก์ธ์ค๋ง๋ค ๊ตฌ๋ณ๋์ด์ผ ํ๋ฉฐ ํด๋น ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ๊ณ ์ ํ๋ ํ์ผ, I/O ์ฅ์น๋ค์ ๋ํด์ ๋ํ ํ๋ก์ธ์ ๋จ์๋ก ํ ๋น ๋ฐ์ ๊ด๋ฆฌ๋์ด์ผ ํ๋ค.
- ๋์คํจ์นญ์ ๋จ์
ํ๋ก์ธ์ค๋ ํ๋์ ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ๋ก๋ถํฐ CPU ์ ์์์ ์ผ์ ๊ธฐ๊ฐ ๋์ ํ ๋น ๋ฐ์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ๊ฒ์ด๋ฉฐ, ์ด์์ฒด์ ๋ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋ณ๋ ฌ์ ์ผ๋ก ์คํ๋๊ฒ ํ๊ธฐ ์ํด์ CPU ์ ์ฌ์ฉ ์๊ฐ์ ๊ฐ๊ฐ์ ํ๋ก์ธ์ค์ ๊ณจ๊ณ ๋ฃจ ๋๋์ด ์ฃผ์ด์ผ ํ๋ค. ํ๋์ ํ๋ก์ธ์ค์์ ์ฌ๋ฌ ๊ฐ์ ๋์คํจ์นญ ๋จ์๊ฐ ์คํ๋ ์ ์๋๋ก ํ๊ณ ์์ผ๋ฉฐ, ์ด๋ฌํ ๋์คํจ์นญ ๋จ์๋ฅผ ์ค๋ ๋๋ผ ๋ถ๋ฅธ๋ค.
โจ ํ๋ก์ธ์ค ์ํ
- ์คํ(Run) : ํ๋ก์ธ์ค๊ฐ ํ๋ก์ธ์๋ฅผ ์ฐจ์งํ์ฌ ์๋น์ค๋ฅผ ๋ฐ๊ณ ์๋ ์ํ
- ์ค๋น(Ready) : ์คํ๋ ์ ์๋๋ก ์ค๋น๋๋ ์ํ
- ๋๊ธฐ(Waiting) : CPU ์ ์ฌ์ฉ์ด ์๋๋ผ ์ ์ถ๋ ฅ์ ์ฌ๊ฑด์ ๊ธฐ๋ค๋ฆฌ๋ ์ํ
๐ ํ๋ก์ธ์ VS ํ๋ก์ธ์ค
ํ๋ก์ธ์์ ํ๋ก์ธ์ค๋ ์๋ฐํ ๋ค๋ฅธ ์กด์ฌ์ด๋ค.
โจ ํ๋ก์ธ์(Processor)
ํ๋ก์ธ์๋ ํ๋์จ์ด์ ์ธ ์ธก๋ฉด๊ณผ ์ํํธ์จ์ด์ ์ธ ์ธก๋ฉด์ผ๋ก ๋๋์ด ๋ณผ ์ ์๋ค.
- ํ๋์จ์ด์ ์ธ ์ธก๋ฉด
์ปดํจํฐ ๋ด์์ ํ๋ก๊ทธ๋จ์ ์ํํ๋ ํ๋์จ์ด ์ ๋์ผ๋ก, ์ค์์ฒ๋ฆฌ์ฅ์น(CPU)๋ฅผ ์๋ฏธํ๋ฉฐ ์ ์ด๋ ํ๋ ์ด์์ ALU์ ๋ ์ง์คํฐ๋ฅผ ๋ด์ฅํ๊ณ ์๋ค. - ์ํํธ์จ์ด์ ์ธ ์ธก๋ฉด
๋ฐ์ดํฐ ํฌ๋งท์ ๋ณํํ๋ ์ญํ ์ ์ํํ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์คํ ์ ์๋ฏธํ๋ค. ์๋ํ๋ก์ธ์๋ ์ปดํ์ผ๋ฌ ๋ฑ์ด ์ฌ๊ธฐ์ ์ํ๋ค.
โจ ํ๋ก์ธ์ค(Process)
ํ๋ก์ธ์ค๋ ํน์ ๋ชฉ์ ์ ์ํํ๊ธฐ ์ํด ๋์ด๋ ์์ ์ ๋ชฉ๋ก์ ์๋ฏธํ๋ค. ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ ๋์ด ํ๋ก์ธ์์ ์ํด ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ํ๋ก์ธ์ค๋ผ๊ณ ๋ณผ ์ ์๋ค.
๐ ์ค๋ ๋
- ์ค๋ ๋๋ ๋ช
๋ น์ด๊ฐ CPU ๋ฅผ ํตํด์ ์ํ๋๋ ๊ฐ์ฒด์ ๋จ์
ํ๋์ ํ๋ก์ธ์ค ๋ด์๋ ๋ฐ๋์ 1๊ฐ ์ด์์ ์ค๋ ๋๊ฐ ์กด์ฌํ๋ฉฐ, ์ด๋ฌํ ์ค๋ ๋๋ ๊ฐ์ ํ๋ก์ธ์ค์ ์๋ ์์๊ณผ ์ํ๋ฅผ ๊ณต์ ํ๋ค.
[๊ทธ๋ฆผ] ํ๋ก์ธ์ค ๋ด์ ์ค๋ ๋๊ฐ ์กด์ฌํ๋ฏ๋ก ์๋ก ์์๊ณผ ์ํ๋ฅผ ๊ณต์ ํ ์ ์๋ค.
๊ฐ์ ํ๋ก์ธ์ค ๋ด์ ์๋ ์ค๋ ๋๋ ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์ ์กด์ฌํ๊ฒ ๋๋ฉฐ ๋์ผํ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค. ๋ํ ํ๋์ ์ค๋ ๋๊ฐ ์์ ํ ๋ฉ๋ชจ๋ฆฌ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๋ ์ค๋ ๋์ ์ํฅ์ ๋ฏธ์น๊ฒ ๋๋ค. ์๋ฅผ ๋ค์ด ํ๋์ ์ค๋ ๋์์ ์คํํ ํ์ผ์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์ฌ์ฉํ ์ ์๋ค. ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ฉด ๊ทธ ํ๋ก์ธ์ค์ ์ํด์๋ ์ค๋ ๋๋ ํจ๊ป ์ข ๋ฃ๋๋ค.
โจ ์ค๋ ๋๋ ์ ํ์ํ๊ฐ?
ํ๋์ ํ๋ก์ธ์ค ์์์ ์ฌ๋ฌ ๊ฐ์ ๋ฃจํด์ ๋์์ ์ํํ์ฌ์ ์ํ ๋ฅ๋ ฅ์ ํฅ์ํ๋ ค๊ณ ํ ๋ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋๋ฐ, ๋ ๋ฆฝ์ ์ผ๋ก ์ํํ์ฌ ์ฒ๋ฆฌํ๋ ค๊ณ ํ ๋ ์ฌ์ฉํ๊ฒ ๋๋ค. ์ฆ, ์ฌ๋ฌ ๊ฐ์ ์์ ๋จ์๋ก ๊ตฌ์ฑ๋ ํ๋ก๊ทธ๋จ์์ ์์ฒญ์ ๋์์ ์ฒ๋ฆฌํ๊ธฐ ์ํด์์ด๋ค.
์๋ฅผ ๋ค์ด, ์๋ ํ๋ก์ธ์์์ ์ฌ์ฉ์๋ก๋ถํฐ ํค๋ณด๋ ์ ๋ ฅ ๋ฐ๊ฑฐ๋, ๊ทธ๋ํฝ์ด๋ UI๋ฅผ, ๊ทธ๋ฆฌ๊ณ ๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ์ฒดํฌํ๋ ๋ฑ ์๋ ํ๋ก์ธ์ ๋ด์์ ์ฌ๋ฌ ์์ฒญ๋ค์ ๋์์ ์ฒ๋ฆฌํด์ผ ํ๋๋ฐ, ์ด๋ ์ค๋ ๋๊ฐ ํ์ํ๊ฒ ๋๋ค.
โจ ์ค๋ ๋์ ๊ตฌ์ฑ์์
- ๊ฐ์ CPU : ์ธํฐํ๋ฆฌํฐ, ์ปดํ์ผ๋ฌ์ ์ํด ๋ด๋ถ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ ๊ฐ์ ์ฝ๋
- ์ํ ์ฝ๋ : Thread Class์ ๊ตฌํ๋์ด ์๋ run() Method ์ฝ๋
- ์ฒ๋ฆฌ ๋ฐ์ดํฐ : Thread์์ ์ฒ๋ฆฌํ๋ ๋ฐ์ดํฐ
โจ ์ค๋ ๋์ ํน์ง
- ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ํ๋ฆ์ ๋จ์์ด๋ค. ํ๋์ ์ค๋ ๋๋ ์์ํด์ ์ข ๋ฃํ ๋๊น์ง ํ๋ฒ์ ํ๋์ฉ ๋ช ๋ น๋ค์ ์ํํ๋ค.
- ๊ฐ ์ค๋ ๋๋ง๋ค call stack์ด ์กด์ฌ(call stack: ์คํ ์ค์ธ ์๋ธ๋ฃจํด์ ์ ์ฅํ๋ ์๋ฃ ๊ตฌ์กฐ)ํ๋ฉฐ, ๋๋จธ์ง Code, Data, Heap ์์ญ์ ์ค๋ ๋ ๋ผ๋ฆฌ ๊ณต์ ํ๋ค. ๋ฐ๋ฉด์ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ๊ทผํ ์ ์๋ค.
- ์ค๋ ๋๋ ๋ค๋ฅธ ์ค๋ ๋์ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๋ค. ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ ์ด์์ ์ค๋ ๋๊ฐ ๋์๋๋ ๊ฒฝ์ฐ, ๋ ๊ฐ ์ด์์ ์ค๋ ๋์ ์คํ ๋ฐ ์ข ๋ฃ์์๋ ์์ธกํ ์ ์๋ค.
[๊ทธ๋ฆผ] ํ๋ก์ธ์ค์ ์ฑ๊ธ ์ค๋ ๋, ๋ฉํฐ ์ค๋ ๋ ์์
๐ ์ฑ๊ธ ์ค๋ ๋(Single-Thread)
- ํ๋ก์ธ์ค๊ฐ ๋จ์ผ ์ค๋ ๋๋ก ๋์ํ๋ ๋ฐฉ์์ผ๋ก ์ผ๋ จ์ ์ฒ๋ฆฌ๋ฅผ ๋จ์ผ ์ค๋ ๋๋ง์ผ๋ก ์ง๋ ฌ ์ฒ๋ฆฌํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ
- ํ๋์ ๋ ์ง์คํฐ, ์คํ์ผ๋ก ํํ (์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๊ฐ์ฅ ๋ํ์ ์ธ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด)
โจ ์ฑ๊ธ ์ค๋ ๋์ ์ฅ์
- ์์ ์ ๊ทผ์ ๋ํ ๋๊ธฐํ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ค. ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๊ฐ ํ๋ก์ธ์ค์ ์์์ ๊ณต์ ํ ๊ฒฝ์ฐ, ๊ฐ ์ค๋ ๋๊ฐ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ฒ ํ๋ ค๋ฉด ๊ณต์ฉ ์์์ ๋ํ ์ ๊ทผ์ ์ ์ดํด์ผ ํ๋ค. ์ฝ๊ฒ ๋งํด์, ๋ชจ๋ ์ค๋ ๋๊ฐ ์ผ์ ์์์ ๋์์ ์ ๊ทผํ๊ฑฐ๋, ๋๊ฐ์ ์์ ์ ์คํํ๋ ค๋ ๊ฒฝ์ฐ, ์๋ฌ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์ํ๋ ๊ฐ์ด ๋์ค์ง ์๋๋ค. ๊ทธ๋์, ์ค๋ ๋๋ค์ด ๋์์ ๊ฐ์ ์์์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์ ์ดํด์ค์ผ๋ง ํ๋ค.
- ์์ ์ ๊ทผ์ ๋ํ ๋๊ธฐํ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ฏ๋ก ๋ฌธ๋งฅ ๊ตํ(context switch) ์์ ๋ํ ์๊ตฌํ์ง ์๋๋ค. ๋ฌธ๋งฅ ๊ตํ์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ํ๋์ ํ๋ก์ธ์๋ฅผ ๊ณต์ ํ ๋ ๋ฐ์ํ๋ ์์ ์ผ๋ก ๋ง์ ๋น์ฉ์ ํ์๋ก ํ๋ค.
- ํ๋ก๊ทธ๋๋ฐ ๋์ด๋๊ฐ ์ฝ๊ณ , CPU ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒ ์ฌ์ฉํ๋ค.
โจ ์ฑ๊ธ ์ค๋ ๋์ ๋จ์
- ์ฌ๋ฌ ๊ฐ์ CPU๋ฅผ ํ์ฉํ์ง ๋ชปํ๋ค. ์ฑ๊ธ ์ค๋ ๋๋ ํ๋์ ๋ฌผ๋ฆฌ์ ์ฝ์ด๋ฐ์ ์ฌ์ฉํ์ง ๋ชปํด ๋ฉํฐ ์ฝ์ด ๋จธ์ ์์ CPU ์ฌ์ฉ์ ์ต์ ํํ ์ ์๋ค. ์ต์ ํ๋ฅผ ์ํด์ Cluster ๋ชจ๋์ ์ด์ฉํ์ฌ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง ์์ ํ๋ก์ธ์ค๋ผ๋ฆฌ์ ์์ ๊ณต์ ๋ ์ด๋ ต๊ธฐ ๋๋ฌธ์ Redis์ ๊ฐ์ ๋ถ๊ฐ ์ธํ๋ผ๊ฐ ํ์ํ๋ค.
- ์ฐ์ฐ๋์ด ๋ง์ ์์ ์ ํ๋ ๊ฒฝ์ฐ, ๊ทธ ์์ ์ด ์๋ฃ๋์ด์ผ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋ค.
- ์ฑ๊ธ ์ค๋ ๋ ๋ชจ๋ธ์ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ๋ชปํ๋ ๊ฒฝ์ฐ ๋ฉ์ถฐ๋ฒ๋ฆฌ๊ฒ ๋๋ค. ๋ฉํฐ ์ค๋ ๋ ๋ชจ๋ธ์ ์๋ฌ ๋ฐ์ ์ ์๋ก์ด ์ค๋ ๋๋ฅผ ์์ฑํ์ฌ ๊ทน๋ณตํ ์ ์๋ค.
๐ ๋ฉํฐ ์ค๋ ๋ (Multi-Thread)
- ํ๋์ ํ๋ก์ธ์ค ๋ด์์ ๋ ์ด์์ ์ค๋ ๋๊ฐ ๋์์ ์์ ์ ์ํํ๋ ๊ฒ
- ๋ฉํฐ ํ๋ก์ธ์ค(multi process)๋ ์ฌ๋ฌ ๊ฐ์ CPU๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๋์์ ์ํํ๋ ๊ฒ์ ์๋ฏธ
- ์์คํ ์์์ ํ์ฉ ๊ทน๋ํ ๋ฐ ์ฒ๋ฆฌ๋ ์ฆ๋ํ ์ ์์ด ๋จ์ผ ํ๋ก์ธ์ค ์์คํ ์ ํจ์จ์ฑ์ ๋์ผ ์ ์๋ค.
โจ ๋ฉํฐ ์ค๋ ๋ฉ์ ์ฅ์
- ์ฑ๊ธ ์ค๋ ๋์ธ ๊ฒฝ์ฐ, ์์ ์ด ๋๋๊ธฐ ์ ๊น์ง ์ฌ์ฉ์์๊ฒ ์๋ตํ์ง ์์ง๋ง ๋ฐ๋ฉด ๋ฉํฐ์ค๋ ๋์ธ ๊ฒฝ์ฐ ์์ ์ ๋ถ๋ฆฌํด์ ์ํํ๋ฏ๋ก ์ค์๊ฐ์ผ๋ก ์ฌ์ฉ์์๊ฒ ์๋ตํ ์ ์๋ค.
- ์ฑ๊ธ ์ค๋ ๋์ธ ๊ฒฝ์ฐ ํ ํ๋ก์ธ์ค๋ ์ค์ง ํ ํ๋ก์ธ์์์๋ง ์ํ ๊ฐ๋ฅํ์ง๋ง ๋ฐ๋ฉด ๋ฉํฐ ์ค๋ ๋์ธ ๊ฒฝ์ฐ ํ ํ๋ก์ธ์ค๋ฅผ ์ฌ๋ฌ ํ๋ก์ธ์์์ ์ํํ ์ ์์ผ๋ฏ๋ก ํจ์ฌ ํจ์จ์ ์ด๋ค.
โจ ๋ฉํฐ ์ค๋ ๋ฉ์ ๋ฌธ์ ์
- ์ฃผ์ ๊น์ ์ค๊ณ๊ฐ ํ์ํ๋ฉฐ, ๋๋ฒ๊น ์ด ๊น๋ค๋กญ๋ค.
- ๋จ์ผ ํ๋ก์ธ์ค ์์คํ ์ ๊ฒฝ์ฐ ํจ๊ณผ๋ฅผ ๊ธฐ๋ํ๊ธฐ ์ด๋ ค์ฐ๋ฉฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์์ ์ค๋ ๋๋ฅผ ์ ์ดํ ์ ์๋ค. (์ฆ, ํ๋ก์ธ์ค ๋ฐ์์ ์ค๋ ๋ ๊ฐ๊ฐ์ ์ ์ดํ ์ ์๋ค.)
- ๋ฉํฐ ์ค๋ ๋์ ๊ฒฝ์ฐ ์์ ๊ณต์ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ํ๋์ ์ค๋ ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ ์ฒด ํ๋ก์ธ์ค๊ฐ ์ํฅ์ ๋ฐ๊ฒ ๋๋ค.
- ๋ฌธ๋งฅ ๊ตํ ์์ ์ ์๊ตฌํ๋ค. CPU์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๋์๊ฐ๋ฉด์ ์์ ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ด ๊ณผ์ ์ ๋ฌธ๋งฅ ๊ตํ(Context Switching)์ด๋ผ ํ๋ค. ๋ฌธ๋งฅ ๊ตํ์ด๋ ๋ค๋ฅธ ํ์คํฌ(ํ๋ก์ธ์ค, ์ค๋ ๋)๊ฐ ์์ํ ์ ์๋๋ก ์ด๋ฏธ ์คํ ์ค์ธ ํ์คํฌ(ํ๋ก์ธ์ค, ์ค๋ ๋)๋ฅผ ๋ฉ์ถ๋ ๊ฒ์ ๋งํ๋ค.
๊ด๋ จ ํค์๋
- ๋ฐ๋๋ฝ(Deadlock, ๊ต์ฐฉ ์ํ) => ๋ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ ์ ํ๊ณ ์๋ ์์์ ์๋ก ๊ธฐ๋ค๋ฆด ๋ ๋ฌดํ ๋๊ธฐ์ ๋น ์ง๋ ์ํฉ
- ๋ฎคํ ์ค(Mutex), ์ธ๋งํฌ์ด(Semaphore) => https://worthpreading.tistory.com/90
๐ ๋์์ฑ๊ณผ ๋ณ๋ ฌ์ฑ์ ์ฐจ์ด
์ฑ๊ธ ์ฝ์ด์ ๋ฉํฐ ์ฝ์ด ์์
[๊ทธ๋ฆผ] ์ฑ๊ธ ์ฝ์ด์ ๋ฉํฐ ์ฝ์ด ์์
๋์์ ๋๋ฆด ์ ์๋ ์ค๋ ๋ ์๋ ์ปดํจํฐ์ ์๋ ์ฝ์ด ๊ฐ์๋ก ์ ํ๋๋ค. ์ด์์ฒด์ (๋๋ ๊ฐ์ ๋จธ์ )๋ ๊ฐ ์ค๋ ๋๋ฅผ ์๊ฐ์ ๋ฐ๋ผ ๋ถํ ํ์ฌ, ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์ผ์ ์๊ฐ๋ง๋ค ๋์๊ฐ๋ฉด์ ์คํ๋๋๋ก ํ๋ค. ์ด๋ฐ ๋ฐฉ์์ ์๋ถํ ์ด๋ผ๊ณ ํ๋ค.
- Concurrency(๋์์ฑ, ๋ณํ์ฑ): ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๊ฐ ์๋ถํ ๋ฐฉ์์ผ๋ก ๋์์ ์ํ๋๋ ๊ฒ์ฒ๋ผ ์ฐฉ๊ฐ์ ๋ถ๋ฌ์ผ์ผํด
- Parallelism(๋ณ๋ ฌ์ฑ): ๋ฉํฐ ์ฝ์ด ํ๊ฒฝ์์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๊ฐ ์ค์ ๋ก ๋์์ ์ํ๋จ