๐Ÿ’ป Development/๊ธฐ๋ก

[์ปดํ“จํ„ฐ ๊ณตํ•™] ์šด์˜์ฒด์ œ(OS)

ahyeon7 2023. 3. 1. 16:34

๐ŸŒž 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(๋ณ‘๋ ฌ์„ฑ): ๋ฉ€ํ‹ฐ ์ฝ”์–ด ํ™˜๊ฒฝ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹ค์ œ๋กœ ๋™์‹œ์— ์ˆ˜ํ–‰๋จ