๊ฐœ๋ฐœ ์ง€์‹/CS ์ง€์‹

๐Ÿ‘ฉ‍๐Ÿ’ป ‍์™„์ „ํžˆ ์ •๋ณตํ•˜๋Š” ํ”„๋กœ์„ธ์Šค vs ์Šค๋ ˆ๋“œ ๊ฐœ๋…

์ธํŒŒ_ 2023. 4. 3. 22:24

ํ”„๋กœ์„ธ์Šค-์“ฐ๋ ˆ๋“œ

ํ•œ๋ˆˆ์— ์ดํ•ดํ•˜๋Š” ํ”„๋กœ์„ธ์Šค & ์Šค๋ ˆ๋“œ ๊ฐœ๋…

์ „๊ณต ์ง€์‹ ์—†์ด ์ปดํ“จํ„ฐ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ด์šฉํ•˜๋Š”๋ฐ๋Š” ๋ฌธ์ œ ์—†์–ด ์™”์ง€๋งŒ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์‚ฌ๋žŒ์œผ๋กœ์„œ ์ปดํ“จํ„ฐ ์‹คํ–‰ ๋‚ด๋ถ€ ์š”์†Œ๋ฅผ ๋”ฐ์ ธ๋ณด๊ฒŒ ๋ ๋•Œ, ์•„๋งˆ ์ปดํ“จํ„ฐ ์šด์˜์ฒด์ œ์— ๋Œ€ํ•ด ์ž…๋ฌธํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ€์žฅ ๋จผ์ € ๋“ฃ๊ณ  ๋ฐฐ์šฐ๊ฒŒ ๋  ๊ฐœ๋…์ด ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ ์ผ ๊ฒƒ์ด๋‹ค. ๊ฒฐ๋ก  ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด ์ด ๋‘˜์„ ํ•œ๋งˆ๋””๋กœ ์ •์˜ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

ํ”„๋กœ์„ธ์Šค (Process) ์Šค๋ ˆ๋“œ (Thread)
์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์ž์›์„ ํ• ๋‹น๋ฐ›์€ ์ž‘์—…์˜ ๋‹จ์œ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ์ž์›์„ ์ด์šฉํ•˜๋Š” ์‹คํ–‰ ํ๋ฆ„์˜ ๋‹จ์œ„

์šด์˜์ฒด์ œ(OS)์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ ์ง€์‹์ด ์—†๋‹ค๋ฉด ์œ„์˜ ์ •์˜๊ฐ€ ๋ฌด์Šจ ์†Œ๋ฆฌ์ธ์ง€ ์ดํ•ด๊ฐ€ ์ž˜ ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜๋„ ์œ„์˜ ๋ฌธ์žฅ์—๋Š” ๋‚˜๋ฆ„ ์„ค๋ช…์ด ํ•จ์ถ•๋˜์–ด ์ž˜ ์ •๋ฆฌ ๋˜์–ด ์žˆ๋Š” ์…ˆ์ด๋‹ค. ์ผ๋‹จ ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…์˜ ๋‹จ์œ„ ๋ผ๋Š” ๋‹จ์–ด์™€ ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰ ํ๋ฆ„์˜ ๋‹จ์œ„ ๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๊ธฐ์–ตํ•ด ๋‘๊ณ  ๊ธ€์„ ์ฝ์–ด๋ณด์ž. ๊ธ€์„ ์ •๋…ํ–ˆ์„๋•Œ ์ € ๋‹จ์–ด์˜ ์˜๋ฏธ์— ๋Œ€ํ•ด ํ™•์‹คํžˆ ๊นจ๋‹ซ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.


ํ”„๋กœ๊ทธ๋žจ ๊ณผ ํ”„๋กœ์„ธ์Šค

 

์ •์  ํ”„๋กœ๊ทธ๋žจ (Static Program)

์ปดํ“จํ„ฐ ์ „๊ณต์ด ์•„๋‹ˆ๋ผ์„œ 'ํ”„๋กœ์„ธ์Šค' ๋ผ๋Š” ๋ช…์นญ์€ ๋‚ฏ์„ค์ˆ˜ ์žˆ๋Š”๋ฐ, 'ํ”„๋กœ๊ทธ๋žจ' ์€ ์นœ์ˆ™ํ•˜๋ฆฌ๋ผ ์ƒ๊ฐ๋œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์€ ์œˆ๋„์šฐ์˜ *.exe ํŒŒ์ผ์ด๋‚˜ Mac์˜ *.dmg ํŒŒ์ผ๊ณผ ๊ฐ™์€ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์„ ํ†ต์นญํ•œ๋‹ค. ๋‹จ, ์•„์ง ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ •์  ํ”„๋กœ๊ทธ๋žจ(Static Program) ์ค„์—ฌ์„œ ํ”„๋กœ๊ทธ๋žจ(Program)์ด๋ผ๊ณ  ๋ถ€๋ฅธ ๊ฒƒ์ด๋‹ค.

Static Program

์–ด๋– ํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด์„  ์ž๋ฐ”๋‚˜ C์–ธ์–ด์™€ ๊ฐ™์€ ์–ธ์–ด๋ฅผ ์ด์šฉํ•ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์™„์„ฑ๋œ๋‹ค. ์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์€ ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๊ทธ๋ƒฅ ์ฝ”๋“œ ๋ฉ์–ด๋ฆฌ ์ธ ๊ฒƒ์ด๋‹ค.

Static Program

 

ํ”„๋กœ์„ธ์Šค (Process)

ํ”„๋กœ๊ทธ๋žจ์ด ๊ทธ๋ƒฅ ์ฝ”๋“œ ๋ฉ์–ด๋ฆฌ์ด๋ฉด, ํ”„๋กœ์„ธ์Šค๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ ์‹œ์ผœ ์ •์ ์ธ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ (ๅ‹•็š„)์œผ๋กœ ๋ณ€ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์ด ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค. ์ฆ‰, ์ปดํ“จํ„ฐ์—์„œ ์ž‘์—… ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด ๊ฐœ๋…์€ ์ ˆ๋Œ€ ์ƒ์†Œํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ctrl + alt + del ๋‹จ์ถ•ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ์šฐ๋ฆฌ๊ฐ€ ํ•ญ์ƒ ๋ณด๋˜ '์ž‘์—…' ๊ด€๋ฆฌ์ž๋ฅผ ์—ด์–ด๋ณด๋ฉด ๊ฐœ๋…์ด ๊ณ ๋Œ€๋กœ ๋“ค์–ด์žˆ๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

Process
์ž‘์—… ๋๋‚ด๊ธฐ๋Š” ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋๋‚ด๋Š” ๊ฒƒ์ด๋‹ค

๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์€ ์šด์˜์ฒด์ œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ด ์ค˜์•ผ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ์ˆœ๊ฐ„ ํŒŒ์ผ์€ ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋˜๊ณ , ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์‹œ์Šคํ…œ ์ž์›(CPU)์„ ํ• ๋‹น๋ฐ›์•„ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ ์šฐ๋ฆฌ๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

Process
ํ”„๋กœ๊ทธ๋žจ → ํ”„๋กœ์„ธ์Šค

์–ด์จ‹๋“  ๋˜‘๊ฐ™์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ ํ•˜๋ƒ ์•ˆํ•˜๋ƒ ์ฐจ์ด์ผ ๋ฟ์ด๋ผ์„œ, ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค์™€ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ™์€ ๊ฐœ๋…์œผ๋กœ ์ด์•ผ๊ธฐํ•  ๋•Œ๊ฐ€ ๋งŽ์ง€๋งŒ, ์ •์˜๋ฅผ ๋ณด์•˜๋“ฏ์ด ์—„๋ฐ€ํžˆ ๋”ฐ์ง€๋ฉด ์ด ๋‘˜์€ ๋‹ค๋ฅธ ๊ฐœ๋…์ธ ๊ฒƒ์ด๋‹ค.

์ตœ์ข…์ ์œผ๋กœ ์ด ๋‘˜์„ ๊ฐ„๋‹จ ๋ช…๋ฃŒํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋ฉด ์•„๋ž˜ ํ‘œ์™€ ๊ฐ™๋‹ค.

ํ”„๋กœ๊ทธ๋žจ ํ”„๋กœ์„ธ์Šค
์–ด๋–ค ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ์‹คํ–‰๋˜์–ด ์ž‘์—…์ค‘์ธ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ
ํŒŒ์ผ์ด ์ €์žฅ ์žฅ์น˜์— ์žˆ์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ์˜ฌ๋ผ๊ฐ€ ์žˆ์ง€ ์•Š์€ ์ •์ ์ธ ์ƒํƒœ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜๊ณ  CPU ์ž์›์„ ํ• ๋‹น๋ฐ›์•„ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ
์‰ฝ๊ฒŒ ๋งํ•ด ๊ทธ๋ƒฅ ์ฝ”๋“œ ๋ฉ์–ด๋ฆฌ ๊ทธ ์ฝ”๋“œ ๋ฉ์–ด๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ ๊ฒƒ

์Šค๋ ˆ๋“œ

 

ํ”„๋กœ์„ธ์Šค์˜ ํ•œ๊ณ„

๊ณผ๊ฑฐ์—๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋งŒ์„ ์‚ฌ์šฉํ•ด์„œ ์ด์šฉํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ธฐ์ˆ ์ด ๋ฐœ์ „๋จ์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋žจ์ด ๋ณต์žกํ•ด์ง€๊ณ  ๋‹ค์ฑ„๋กœ์›Œ์ง์œผ๋กœ์จ ํ”„๋กœ์„ธ์Šค ์ž‘์—… ํ•˜๋‚˜๋งŒ์„ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ๋‹ค.

์˜ค๋Š˜๋‚  ์ปดํ“จํ„ฐ๋Š” ํŒŒ์ผ์„ ๋‹ค์šด ๋ฐ›์œผ๋ฉฐ ๋‹ค๋ฅธ ์ผ์„ ํ•˜๋Š” ๋ฉ€ํ‹ฐ ์ž‘์—…์€ ๋„ˆ๋ฌด ๋‹น์—ฐํ•œ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ๊ณผ๊ฑฐ์—๋Š” ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›์œผ๋ฉด ์‹คํ–‰ ์‹œ์ž‘๋ถ€ํ„ฐ ์‹คํ–‰ ๋๊นŒ์ง€ ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋งŒ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์šด์ด ์™„๋ฃŒ๋ ๋•Œ๊นŒ์ง€ ํ•˜๋ฃจ์ข…์ผ ๊ธฐ๋‹ค๋ ค์•ผ ํ–ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ๋™์ผํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด, ๊ทธ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  CPU์—์„œ ํ• ๋‹น๋ฐ›๋Š” ์ž์›์ด ์ค‘๋ณต๋˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ์Šค๋ ˆ๋“œ(Thread)๋Š” ์ด๋Ÿฌํ•œ ํ”„๋กœ์„ธ์Šค ํŠน์„ฑ์˜ ํ•œ๊ณ„๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒ ํ•˜์˜€๋‹ค.

 

์Šค๋ ˆ๋“œ์˜ ๊ฐœ๋…

์Šค๋ ˆ๋“œ๋ž€, ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋™์‹œ์— ์ง„ํ–‰๋˜๋Š” ์ž‘์—… ๊ฐˆ๋ž˜, ํ๋ฆ„์˜ ๋‹จ์œ„ ๋ฅผ ๋งํ•œ๋‹ค.

์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋น„์œ ๋ฅผ ๋“ค์ž๋ฉด, ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹คํ–‰ ๋˜๋ฉด ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๊ฐ€ ์ƒ์„ฑ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์šฐ๋ฆฌ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ํŒŒ์ผ์„ ๋‹ค์šด ๋ฐ›์œผ๋ฉฐ ์˜จ๋ผ์ธ ์‡ผํ•‘์„ ํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

thread

์ฆ‰, ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ž‘์—…๋“ค ํ๋ฆ„์ด ๋™์‹œ์— ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ธ๋ฐ, ์ด๋Ÿฌํ•œ ์ผ๋ จ์˜ ์ž‘์—… ํ๋ฆ„๋“ค์„ ์Šค๋ ˆ๋“œ๋ผ๊ณ  ํ•˜๋ฉฐ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด๋ฅผ ๋ฉ€ํ‹ฐ(๋‹ค์ค‘) ์Šค๋ ˆ๋“œ ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ๋ณด๋“ฏ์ด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋“ค์ด ๋“ค์–ด ์žˆ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ์Šค๋ ˆ๋“œ ์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ๋‹น์—ฐํžˆ ํ”„๋กœ๊ทธ๋žจ ์†๋„๋„ ๋™์‹œ์— ํ•˜๋Š” ์ž‘์—…์ด ๋งŽ์•„์ ธ ์„ฑ๋Šฅ์ด ์˜ฌ๋ผ๊ฐ„๋‹ค.

 

thread
์Šค๋ ˆ๋“œ๋ฅผ ์ง€๋ ์ด ๊ฐ™์ด ํ‘œํ˜„ํ•œ ์ด์œ ๋Š” ๋ฒˆ์—ญํ•˜๋ฉด ์‹คํƒ€๋ž˜ ์ด๋ฉฐ, ์‹คํ–‰ ํ๋ฆ„์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค

์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ–๋Š”๋‹ค. ์ฆ‰, ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜์˜ main ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ฒŒ ๋œ๋‹ค. ์Šค๋ ˆ๋“œ 2๊ฐœ, 3๊ฐœ.. ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜์—ฌ ์œ„์น˜ ์‹œ์ผœ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋ณ„๋„๋กœ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณผ๋ชฉ์ด ์žˆ๋Š” ์ด์œ ์ด๊ธฐ๋„ ํ•˜๋‹ค. 


์ง€๊ธˆ๊นŒ์ง€ ํ”„๋กœ๊ทธ๋žจ, ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ์— ๊ด€ํ•œ ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋… ํ๋ฆ„๊ณผ ์ฐจ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ •๋„์˜ ์šด์˜์ฒด์ œ ์ง€์‹๋งŒ์œผ๋กœ๋Š” "ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ๋งํ•˜๋ผ๋Š”" ๊ธฐ์ˆ  ๋ฉด์ ‘์—์„œ ํ†ต๊ณผํ•˜๊ธฐ๋Š” ํž˜๋“ค ๊ฒƒ์ด๋‹ค.

์™œ๋ƒํ•˜๋ฉด ๋‹จ์ˆœ ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ์ฐจ์ด์  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ๋‚ด๋ถ€ ์ž‘๋™ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ดํ•˜๋Š” ๋ฉด์ ‘๊ด€์ด ๋Œ€๋ถ€๋ถ„์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์‚ฌ์‹ค ์œ„์—์„œ ํ•œ ์„ค๋ช…์€ ๋‰ด๋น„๋ผ๋„ ์ตœ๋Œ€ํ•œ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํ’€์–ด์“ด ๋‚ด์šฉ์ด๋ผ ์ € ๋ถ€๋ถ„๋งŒ์œผ๋กœ๋Š” ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ์žˆ์–ด ๋งŽ์ด ๋ถ€์กฑํ•˜๋‹ค. ์šด์˜์ฒด์ œ๊ฐ€ ์‹œ์Šคํ…œ ์ž์›์„ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ํ• ๋‹นํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์€ ์ž์›์„ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ๋‚ด๋ถ€ ์ž‘๋™ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์•ผ, ๊ธฐ์ˆ  ๋ฉด์ ‘๋„ ๊ทธ๋ ‡๊ณ  ๋‚˜์ค‘์— ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ• ๋•Œ ์‘์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ํฌ์ŠคํŒ…์„ ๋๊นŒ์ง€ ์ฝ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๋Š” ๋ฐ”๋‹ค.


ํ”„๋กœ์„ธ์Šค & ์Šค๋ ˆ๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ

 

ํ”„๋กœ์„ธ์Šค์˜ ์ž์› ๊ตฌ์กฐ

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜์–ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด ๋‹ค์Œ 4๊ฐ€์ง€์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ํ• ๋‹น ๋ฐ›๊ฒŒ ๋œ๋‹ค.

process

  • ์ฝ”๋“œ ์˜์—ญ(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 ๊ณต๊ฐ„์ด ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋œ๋‹ค.

process

 


์Šค๋ ˆ๋“œ์˜ ์ž์› ๊ณต์œ 

์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น ๋ฐ›์€ ์ž์›์„ ์ด์šฉํ•˜๋Š” ์‹คํ–‰์˜ ๋‹จ์œ„๋กœ์„œ, ์Šค๋ ˆ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ์œผ๋ฉด ์šฐ๋ฆฌ๊ฐ€ ํŒŒ์ผ์„ ๋‹ค์šด ๋ฐ›์œผ๋ฉฐ ๋™์‹œ์— ์›น ์„œํ•‘์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ๊ณต์œ ํ•˜๋ฉด์„œ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ ํ๋ฆ„์˜ ์ผ๋ถ€๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์‹œ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ์ƒํƒœ์ธ ๊ฒƒ์ด๋‹ค.

thread

์ด๋•Œ ํ”„๋กœ์„ธ์Šค์˜ 4๊ฐ€์ง€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ(Code, Data, Heap, Stack) ์ค‘ ์Šค๋ ˆ๋“œ๋Š” Stack๋งŒ ํ• ๋‹น๋ฐ›์•„ ๋ณต์‚ฌํ•˜๊ณ  Code, Data, Heap์€ ํ”„๋กœ์„ธ์Šค๋‚ด์˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋“ค๊ณผ ๊ณต์œ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๋Š” ๋ณ„๋„์˜ stack์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ heap ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ณ ์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ๊ฐ€์ ธ์™€ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

thread

stack์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ „๋‹ฌ๋˜๋Š” ์ธ์ž, ๋˜๋Œ์•„๊ฐˆ ์ฃผ์†Œ๊ฐ’, ํ•จ์ˆ˜ ๋‚ด์—์„œ ์„ ์–ธํ•˜๋Š” ๋ณ€์ˆ˜ ๋“ฑ์„ ์ €์žฅํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋…๋ฆฝ์ ์ธ ์Šคํƒ์„ ๊ฐ€์กŒ๋‹ค๋Š” ๊ฒƒ์€ ๋…๋ฆฝ์ ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค ๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋…๋ฆฝ์ ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์€ ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ํ๋ฆ„์ด ์ถ”๊ฐ€๋œ๋‹ค๋Š” ๋ง์ด๋‹ค.
์ฆ‰, stack์„ ๊ฐ€์ง์œผ๋กœ์จ ์Šค๋ ˆ๋“œ๋Š” ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ํ๋ฆ„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
๋ฐ˜๋ฉด์— ํ”„๋กœ์„ธ์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค ๋ผ๋ฆฌ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜๋Š” ์—†๋‹ค.

์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑํ•œ ์ด์œ ๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์ˆ˜์˜ ์‹คํ–‰ ๋‹จ์œ„์ธ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž์›์„ ๊ณต์œ ํ•˜๊ณ , ์ž์›์˜ ์ƒ์„ฑ๊ณผ ๊ด€๋ฆฌ์˜ ์ค‘๋ณต์„ฑ์„ ์ตœ์†Œํ™”ํ•˜์—ฌ ์ˆ˜ํ–‰ ๋Šฅ๋ ฅ์„ ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋‹ค.


ํ”„๋กœ์„ธ์Šค์˜ ์ž์› ๊ณต์œ 

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋ณ„๋„์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋ณ€์ˆ˜๋‚˜ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ ‘๊ทผํ•  ์ˆ˜๋Š” ์—†๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ”„๋กœ์„ธ์Šค๋Š” ์˜์›ํžˆ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์„๊นŒ?

ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ๋ณด๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์— ์žˆ๋Š” ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ๋Š” ์‹ฌ์‹ฌ์น˜ ์•Š๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด์ฒ˜๋Ÿผ ํŠน๋ณ„ํ•œ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ๋‹ค.

  • IPC(Inter-Process Communication) ์‚ฌ์šฉ
  • LPC(Local inter-Process Communication) ์‚ฌ์šฉ
  • ๋ณ„๋„๋กœ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋„๋ก ์„ค์ •

ํ”„๋กœ์„ธ์Šค์˜ ์ž์› ๊ณต์œ 

๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ์„ธ์Šค ์ž์› ๊ณต์œ ๋Š” ๋‹จ์ˆœํžˆ CPU ๋ ˆ์ง€์Šคํ„ฐ ๊ต์ฒด๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ RAM๊ณผ CPU ์‚ฌ์ด์˜ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๊นŒ์ง€ ์ดˆ๊ธฐํ™”๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์› ๋ถ€๋‹ด์ด ํฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์ค‘ ์ž‘์—…์ด ํ•„์š”ํ•œ๊ฒฝ์šฐ ์Šค๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ํšจ์œจ์ ์ด๋ผ, ํ˜„๋Œ€ ์ปดํ“จํ„ฐ์˜ ์šด์˜์ฒด์ œ์—์„  ๋‹ค์ค‘ ํ”„๋กœ์„ธ์‹ฑ์„ ์ง€์›ํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋‹ค์ค‘ ์Šค๋ ˆ๋”ฉ์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๊ณ  ์žˆ๋‹ค.


ํ”„๋กœ์„ธ์Šค & ์Šค๋ ˆ๋“œ์˜ ๋™์‹œ ์‹คํ–‰ ์›๋ฆฌ

์šฐ๋ฆฌ๊ฐ€ ์Œ์•…์„ ๋“ค์œผ๋ฉด์„œ, ์›น์„œํ•‘์„ ํ•˜๊ณ , ๋ฉ”์‹ ์ €์˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ์ปดํ“จํ„ฐ ๋‚ด๋ถ€์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น(multi tasking) ๊ธฐ์ˆ  ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์‹ฌํ”Œํ•˜๊ฒŒ CPU ํ”„๋กœ์„ธ์„œ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ํ•œ๊บผ๋ฒˆ์— ๋™์‹œ์— ๋Œ๋ฆฌ๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•˜๊ฒ ์ง€๋งŒ, ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณต์žกํ•œ ์›๋ฆฌ์— ์˜ํ•ด ์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์›๋ฆฌ๊ฐ€ ์šด์˜์ฒด์ œ ์ด๋ก ์˜ ํ•ต์‹ฌ ์›๋ฆฌ์ด๊ธฐ๋„ ํ•˜๋‹ค. ์ง€๊ธˆ๋ถ€ํ„ฐ ๊ทธ ์›๋ฆฌ์— ๋Œ€ํ•ด ํŒŒํ—ค์ณ ๋ณด๋„๋ก ํ•˜์ž.

Process ์™€ Thread


๋ฉ€ํ‹ฐ ์ฝ”์–ด์™€ ์Šค๋ ˆ๋“œ

ํ•œ๋ฒˆ ์ปดํ“จํ„ฐ ๊ฒฌ์ ์„ ๋งž์ถฐ๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋Š” ๋…์ž๋ถ„๋“ค์€ 4์ฝ”์–ด 8์“ฐ๋ ˆ๋“œ CPU์— ๋Œ€ํ•œ ๋‹จ์–ด๋ฅผ ๋ณธ ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. 

Process ์™€ Thread

CPU ํ•œ ๊ฐœ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ฝ”์–ด๋ฅผ ๊ฐ€์งˆ์ˆ˜ ์žˆ๋‹ค. ์ฝ”์–ด๋Š” ๋ง๊ทธ๋Œ€๋กœ CPU ์ฝ”์–ด ์œ ๋‹›์ด๋‹ค. ์ฆ‰, ๋ช…๋ น์–ด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฝ‘์•„ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐ˜๋„์ฒด ์œ ๋‹›์ด 4๊ฐœ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. 4์ฝ”์–ด๊ฐ€ ๋ฌผ๋ฆฌ์  ์ฝ”์–ด ๊ฐฏ์ˆ˜๋ฉด, 8์“ฐ๋ ˆ๋“œ๋Š” ๋…ผ๋ฆฌ์  ์ฝ”์–ด ๊ฐฏ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ฌผ๋ฆฌ์  ์ฝ”์–ด ํ•˜๋‚˜๊ฐ€ ์Šค๋ ˆ๋“œ ๋‘ ๊ฐœ ์ด์ƒ์„ ๋™์‹œ์— ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค. ์ฆ‰, ์šด์˜์ฒด์ œ๊ฐ€ 8๊ฐœ์˜ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค. ์ด๋ฅผ ํ•˜์ดํผ์Šค๋ ˆ๋”ฉ(Hyper-Threading) ๊ธฐ์ˆ ์ด๋ผ ๋งํ•œ๋‹ค.

Process ์™€ Thread

๋‹จ, ์—ฌ๊ธฐ์„œ CPU์˜ ์“ฐ๋ ˆ๋“œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šด ํ”„๋กœ์„ธ์Šค์˜ ์“ฐ๋ ˆ๋“œ์™€๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅธ ๊ฐœ๋…์ด๋‹ค. ์—„๋ฐ€ํžˆ ๋งํ•˜์ž๋ฉด CPU์˜ ์Šค๋ ˆ๋“œ๋Š” ํ•˜๋“œ์›จ์–ด์  ์Šค๋ ˆ๋“œ์ด๊ณ  ํ”„๋กœ๊ทธ๋žจ์˜ ์Šค๋ ˆ๋“œ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์  ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์šฐ๋ฆฌ๋Š” ์ปดํ“จํ„ฐ๋ฅผ ์ด์šฉํ• ๋•Œ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜์‹ญ, ์ˆ˜๋ฐฑ๊ฐœ๋ฅผ ์ผœ ๋†“๊ณ  ์ด์šฉํ•œ๋‹ค. ๊ทธ๋Ÿผ ๊ทธ ์ˆ˜์‹ญ์ˆ˜๋ฐฑ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์„ ๊ณ ์ž‘ 8๊ฐœ์˜ ๋…ผ๋ฆฌ์ ์ธ ์Šค๋ ˆ๋“œ๋„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?

์ด ์›๋ฆฌ๋ฅผ ์•Œ๊ธฐ์œ„ํ•ด์„  ๋ณ‘๋ ฌ์„ฑ(Parallelism) ๊ณผ ๋™์‹œ์„ฑ(Concurrency)์ด๋ผ๋Š” ๊ฐœ๋…์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด ๊ฐœ๋…์€ ์šด์˜์ฒด์ œ์˜ ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ์žˆ์–ด ๊ฐ€์žฅ ํ•ต์‹ฌ ๊ณจ์ž๊ฐ€ ๋˜๋Š” ๋…€์„๋“ค์ด๋‹ค.


CPU์˜ ์ž‘์—… ์ฒ˜๋ฆฌ ๋ฐฉ์‹

 

๋ณ‘๋ ฌ์„ฑ (Parallelism)

๋ณ‘๋ ฌ์„ฑ์€ ์ง๊ด€์ ์œผ๋กœ ๋ช…๋ น์–ด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฝ‘์•„ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐ˜๋„์ฒด ์œ ๋‹›์ธ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ฝ”์–ด์— ๋งž์ถฐ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ๋ฅผ ๋Œ๋ ค ๋ณ‘๋ ฌ๋กœ ์ž‘์—…๋“ค์„ ๋™์‹œ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. 

Parallelism

๋“€์–ผ์ฝ”์–ด, ์ฟผ๋“œ์ฝ”์–ด, ์˜ฅํƒ€์ฝ”์–ด ๋“ฑ๋“ฑ ์ด๋Ÿฐ ๋ช…์นญ์ด ๋ถ™๋Š” ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋‹ฌ๋ฆฐ ์ปดํ“จํ„ฐ์—์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ด๋‹ค.

Parallelism

 

๋™์‹œ์„ฑ (Concurrency)

๋™์‹œ์„ฑ์€ ๋‘˜ ์ด์ƒ์˜ ์ž‘์—…์ด ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด '๋™์‹œ' ๋ผ๋Š” ์˜๋ฏธ์—์„œ ๋ณ‘๋ ฌ์„ฑ๊ณผ ๋™์‹œ์„ฑ์˜ ํ•œ๊ธ€ ์˜๋ฏธ๊ฐ€ ํ—ท๊ฐˆ๋ฆด์ˆ˜ ์žˆ๋‹ค. Parallelism๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ง๋กœ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•˜๋ฉด, Concurrency๋Š” ๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

์ฆ‰, 1๊ฐœ์˜ ์ฝ”์–ด๊ฐ€ ์žˆ๊ณ  4๊ฐœ์˜ ์ž‘์—…์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋‹ค๋ฉด, ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํ”„๋กœ์„ธ์Šค๋“ค์„ โ€‹๊ณ„์† ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์กฐ๊ธˆ์”ฉ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ๋งˆ์น˜ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋•Œ ํ”„๋กœ์„ธ์Šค๋“ค์„ โ€‹๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํ“จํ„ฐ๋ฅผ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋ณด๋ฉด ๋งˆ์น˜ ๋™์‹œ์— ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋œ๋‹ค.

Concurrency

๋‹จ, ์ด๋•Œ ์ž‘์—…๋“ค์„ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰ํ• ๋•Œ ์ž‘์—…๋“ค์„ ์•„์ฃผ ์ž˜๊ฒŒ ๋‚˜๋ˆ„์–ด ์•„์ฃผ ์กฐ๊ธˆ์”ฉ๋งŒ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‹ค์Œ ์ž‘์—…์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ์‹์œผ๋กœ ๋™์ž‘๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ ๋Š” ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋งŒ๋“ค์–ด, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ๋น ๋ฅธ ๋ฐ˜์‘์„ฑ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ ‡๊ฒŒ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…๋“ค์„ A → B  C → D ๋กœ ๋ฒˆ๊ฐˆ์•„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ Context Switching ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

Concurrency
๊ฐ ํ”„๋กœ์„ธ์Šค ์ž‘์—…์„ ์ž‘๊ฒŒ ์ชผ๊ฐœ์–ด ๋ฒˆ๊ฐˆ์•„ ์ฒ˜๋ฆฌ

 

๋™์‹œ์„ฑ์ด ํ•„์š”ํ•œ ์ด์œ 

๊ทธ๋Ÿฐ๋ฐ ์ƒ์‹์ ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋™์‹œ์„ฑ(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 ์ƒํƒœ์— ์žˆ๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ• ์ง€ ์Šค์ผ€์ฅด๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด ๋™์ž‘๋œ๋‹ค.

process-state

  1. Admitted (new → ready) : ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ์„ ์Šน์ธ ๋ฐ›์Œ
  2. Dispatch (ready→ running) : ์ค€๋น„ ์ƒํƒœ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค ์ค‘ ํ•˜๋‚˜๊ฐ€ ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ์‹คํ–‰๋จ
  3. Interrupt (running → ready) : Timeout, ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค€๋น„ ์ƒํƒœ๋กœ ์ „ํ™˜ํ•˜๊ณ , ํ•ด๋‹น ์ž‘์—…์„ ๋จผ์ € ์ฒ˜๋ฆฌ
  4. I/O or event wait (running → wainting) : ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž…์ถœ๋ ฅ์ด๋‚˜ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์ž…์ถœ๋ ฅ์ด๋‚˜ ์ด๋ฒคํŠธ๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์ „ํ™˜
  5. I/O or event completion (waiting → ready) : ์ž…์ถœ๋ ฅ์ด๋‚˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ชจ๋‘ ๋๋‚œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ์ค€๋น„ ์ƒํƒœ๋กœ ๋งŒ๋“ค์–ด ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ์„ ํƒ๋  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋กœ ์ „ํ™˜

ํ”„๋กœ์„ธ์Šค ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ

์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ(Context Switching)์€ CPU๊ฐ€ ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ์ „ํ™˜ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ๋งํ•œ๋‹ค. ์œ„์˜ ๋™์‹œ์„ฑ (Concurrency) ํŒŒํŠธ์—์„œ ๋‹ค๋ค˜๋“ฏ์ด CPU๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ์‹คํ–‰ํ•˜์—ฌ CPU ํ™œ์šฉ๋ฅ ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ํ•„์š”ํ•œ ๊ฒƒ์ด๋‹ค.

์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์„ ์ข€๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋งํ•˜์ž๋ฉด, ๋™์ž‘ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Œ€๊ธฐ๋ฅผ ํ•˜๋ฉด์„œ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ(Context)๋ฅผ ๋ณด๊ด€ํ•˜๊ณ , ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋˜ ๋‹ค์Œ ์ˆœ์„œ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ž‘ํ•˜๋ฉด์„œ ์ด์ „์— ๋ณด๊ด€ํ–ˆ๋˜ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ์ผ์–ด๋‚  ๋•Œ ๋‹ค์Œ๋ฒˆ ํ”„๋กœ์„ธ์Šค๋Š” ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์„ ํ•˜๋Š” ์ฃผ์ฒด๋Š” ์Šค์ผ€์ค„๋Ÿฌ์ด๋‹ค.

Context Switching

 

PCB (Process Control Block)

PCB(ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก)๋Š” ์šด์˜์ฒด์ œ์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งํ•œ๋‹ค.

ํ”„๋กœ์„ธ์Šค๋ฅผ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ํ• ๋•Œ ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•ด ๋‘ฌ์•ผ ๋‹ค์Œ์— ๋˜‘๊ฐ™์€ ์ž‘์—…์„ ์ด์–ด์„œ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๊ณ , ์ƒˆ๋กœ ํ•ด์•ผ ํ•  ์ž‘์—…์˜ ์ƒํƒœ ๋˜ํ•œ ์•Œ์•„์•ผ ์–ด๋””์„œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž‘์—…์„ ์‹œ์ž‘ํ• ์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ฆ‰, PCB๋Š” ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋ง์„ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค์— ๊ด€ํ•œ ๋ชจ๋“  ์ •๋ณด ์ €์žฅํ•˜๋Š” ์ž„์‹œ ์ €์žฅ์†Œ์ธ ๊ฒƒ์ด๋‹ค.

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 ๊ณผ์ •

๋‘ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๊ณผ์ •์„ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

Context Switching

  1. CPU๋Š” Process P1์„ ์‹คํ–‰ํ•œ๋‹ค (Executing)
  2. ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜ Interrupt ๋˜๋Š” system call์ด ๋ฐœ์ƒํ•œ๋‹ค. (CPU๋Š” idle ์ƒํƒœ)
  3. ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ Process P1์˜ ์ƒํƒœ๋ฅผ PCB1์— ์ €์žฅํ•œ๋‹ค. (Save state into PCB1)
  4. ๋‹ค์Œ์œผ๋กœ ์‹คํ–‰ํ•  Process P2๋ฅผ ์„ ํƒํ•œ๋‹ค. (CPU ์Šค์ผ€์ค„๋ง)
  5. Process P2์˜ ์ƒํƒœ๋ฅผ PCB2์—์„œ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. (Reload state from PCB2)
  6. CPU๋Š” Process P2๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. (Executing)
  7. ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜  Interrupt ๋˜๋Š” system call์ด ๋ฐœ์ƒํ•œ๋‹ค. (CPU๋Š” idle ์ƒํƒœ)
  8. ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ Process P2์˜ ์ƒํƒœ๋ฅผ PCB2์— ์ €์žฅํ•œ๋‹ค. (Save state into PCB2)
  9. ๋‹ค์‹œ Process P1์„ ์‹คํ–‰ํ•  ์ฐจ๋ก€๊ฐ€ ๋œ๋‹ค. (CPU ์Šค์ผ€์ค„๋ง)
  10. Process P1์˜ ์ƒํƒœ๋ฅผ PCB1์—์„œ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. (Reload state from PCB1)
  11. CPU๋Š” Process P1์„ ์ค‘๊ฐ„ ์‹œ์  ๋ถ€ํ„ฐ ์‹คํ–‰ํ•œ๋‹ค. (Executing)
idle(๋Œ€๊ธฐ) ๊ณผ executing(์‹คํ–‰) ์€ CPU์˜ ๋™์ž‘ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค

 

Context Switching Overhead

์ด๋Ÿฌํ•œ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๊ณผ์ •์€ ์‚ฌ์šฉ์ž๋กœ๊ธˆ ๋น ๋ฅธ ๋ฐ˜์‘์„ฑ๊ณผ ๋™์‹œ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๋ณ€๊ฒฝ ๊ณผ์ •์—์„œ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ, ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’ ๋“ฑ์ด ์ €์žฅ๋˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋“ฑ์˜ ์ž‘์—…์ด ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์— ๋งŽ์€ ๋ถ€๋‹ด์„ ์ฃผ๊ฒŒ๋œ๋‹ค.

์œ„์˜ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๊ณผ์ • ๊ทธ๋ฆผ์„ ๋ณด๋ฉด P1์ด Execute์—์„œ idle์ด ๋  ๋•Œ P2๊ฐ€ ๋ฐ”๋กœ Execute๊ฐ€ ๋˜์ง€ ์•Š๊ณ  idle์„ ์ƒํƒœ์— ์กฐ๊ธˆ ์žˆ๋‹ค๊ฐ€ Execute๊ฐ€ ๋˜๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฐ„๊ทน์ด ๋ฐ”๋กœ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ์˜ค๋ฒ„ํ—ค๋“œ(overhead) ์ธ ๊ฒƒ์ด๋‹ค.

Context Switching Overhead

์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ–‰์œ„์— ์˜ํ•ด์„œ ๋ฐœ์ƒ๋œ๋‹ค.

  • PCB ์ €์žฅ ๋ฐ ๋ณต์› ๋น„์šฉ
  • CPU ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ ๋ฌดํšจํ™”์— ๋”ฐ๋ฅธ ๋น„์šฉ
  • ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋ง ๋น„์šฉ

์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๊ณผ์ •์—์„œ PCB๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ณต์›ํ•˜๋Š”๋ฐ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๋ฉฐ, ํ”„๋กœ์„ธ์Šค ์ž์ฒด๊ฐ€ ๊ต์ฒด๋˜๋Š” ๊ฒƒ์ด๋‹ˆ CPU์˜ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌดํšจํ™”๊ฐ€ ๋œ๋‹ค. ์ด ๊ณผ์ •์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚˜๊ณ , ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ CPU ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ•˜๋Š” ๋น„์šฉ๋„ ๋งŒ๋งŒ์น˜ ์•Š๋‹ค.

๋ฐ”๋กœ ๋’ค์—์„œ ๋‹ค๋ฃจ๊ฒ ์ง€๋งŒ, ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์€ ๊ผญ ํ”„๋กœ์„ธ์Šค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋“ค ๋ผ๋ฆฌ๋„ ์Šค์œ„์นญ์ด ์ผ์–ด๋‚œ๋‹ค. ๋ณดํ†ต ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ผ๊ณ  ํ•˜๋ฉด ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๋Œ์•„๊ฐ€๋‹ˆ ํ”„๋กœ๊ทธ๋žจ ์„ฑ๋Šฅ์ด ๋ฌด์กฐ๊ฑด ์ƒ์Šนํ• ๊ฑฐ๋ผ ์˜ˆ์ƒํ•˜์ง€๋งŒ, ์ด๋Š” ์ •ํ™•ํ•˜์ง€ ์•Š๋‹ค. ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ์˜ค๋ฒ„ํ—ค๋“œ๋ผ๋Š” ๋ณ€์ˆ˜ ๋•Œ๋ฌธ์— ์Šค๋ ˆ๋“œ ๊ต์ฒด ๊ณผ์ •์—์„œ ๊ณผํ•˜๊ฒŒ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์˜คํžˆ๋ ค ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š” ํ˜„์ƒ์ด ๋‚˜ํƒ€๋‚ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๐Ÿค” ์Šค๋ ˆ๋“œ๋ฅผ ๋งŽ์ด ์“ธ์ˆ˜๋ก ํ•ญ์ƒ ์„ฑ๋Šฅ์ด ์ข‹์•„์งˆ๊นŒ?

์Šค๋ ˆ๋“œ๋ฅผ ๋งŽ์ด ์“ฐ๋ฉด ์“ธ์ˆ˜๋ก ์„ฑ๋Šฅ์ด ๋†’์•„์ง€๋Š”๊ฐ€ ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ๋ฅผ ์ฒ˜์Œ ํ•™์Šตํ• ๋•Œ, ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์— ์กด์žฌํ•˜๋Š” ์‹คํ–‰ ๋‹จ์œ„์ด๋ฉฐ, ์ด ์Šค๋ ˆ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ธ ๋•๋ถ„์— ์šฐ๋ฆฌ๊ฐ€ ์Œ์•…์„ ๋“ค์œผ๋ฉฐ ์›น์„œ

inpa.tistory.com


์Šค๋ ˆ๋“œ ์Šค์ผ€์ฅด๋ง

ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ฅด๋ง๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์Šค๋ ˆ๋“œ ์Šค์ผ€์ค„๋ง(Thread Scheduling)์€ ์šด์˜์ฒด์ œ์—์„œ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, CPU๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ , CPU๋ฅผ ํ• ๋‹นํ•˜๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค.

์Šค๋ ˆ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„, ์‹คํ–‰ ์‹œ๊ฐ„, ์ž…์ถœ๋ ฅ ์š”์ฒญ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ณ ๋ คํ•˜์—ฌ CPU๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์„ ํƒํ•˜๋Š”, ์Šค๋ ˆ๋“œ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค. ๋‹ค์–‘ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ์œผ๋ฉฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ๋Š” Round Robin, Priority-based scheduling, Multi-level Queue scheduling ๋“ฑ์ด ์žˆ๋‹ค.
๋‹ค๋งŒ ์Šค๋ ˆ๋“œ ์Šค์ผ€์ค„๋ง์€ ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋ง๊ณผ ๋‹ค๋ฅด๊ฒŒ, ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋‹ค์ˆ˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์ž‘ํ•˜๋Š” ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์Šค๋ ˆ๋“œ ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ๊ณผ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ฐจ์ด์ ์ด ์กด์žฌํ•œ๋‹ค.

Thread Scheduling


์Šค๋ ˆ๋“œ ์ƒํƒœ

ํ”„๋กœ์„ธ์Šค ์ƒํƒœ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์Šค๋ ˆ๋“œ์—๋„ ์ƒํƒœ๊ฐ€ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ 4๊ฐ€์ง€ ์ƒํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค.

์Šค๋ ˆ๋“œ ์ƒํƒœ ์„ค๋ช…
NEW ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์•„์ง ํ˜ธ์ถœ๋˜์ง€ ์•Š์€ ์ƒํƒœ
RUNNABLE ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
CPU๋ฅผ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ด๋ฉฐ, ์–ธ์ œ๋“ ์ง€ ์‹คํ–‰๋  ์ค€๋น„๊ฐ€ ๋˜์–ด์žˆ๋‹ค.
BLOCKED ์Šค๋ ˆ๋“œ๊ฐ€ ํŠน์ • ์ด๋ฒคํŠธ(์ž…์ถœ๋ ฅ ์š”์ฒญ ๋“ฑ)๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋Œ€๊ธฐํ•˜๋Š” ์ƒํƒœ
CPU๋ฅผ ํ• ๋‹น๋ฐ›์ง€ ๋ชปํ•˜๋ฉฐ, ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋‹ค์‹œ RUNNABLE ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•œ๋‹ค.
TERMINATED ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰์„ ์™„๋ฃŒํ•˜๊ณ  ์ข…๋ฃŒ๋œ ์ƒํƒœ
๋” ์ด์ƒ ์‹คํ–‰๋  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋œ๋‹ค.

 

์Šค๋ ˆ๋“œ ์ƒํƒœ ์ „์ด

์Šค๋ ˆ๋“œ ์ƒํƒœ ์ „์ด์— ๋Œ€ํ•œ ์ œ์–ด๋Š” ์ž๋ฐ”์™€ ๊ฐ™์€ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃจ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

thread-state
์‹ค์ œ๋กœ๋Š” ๋” ๋ณต์žกํ•˜๋‹ค


์Šค๋ ˆ๋“œ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ

์Šค๋ ˆ๋“œ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ(thread context switching)์€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ ํ™˜๊ฒฝ์—์„œ ์Šค๋ ˆ๋“œ ๊ฐ„์˜ ์‹คํ–‰์„ ์ „ํ™˜ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ํ”„๋กœ์„ธ์Šค ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ๊ณผ ๋‹ค๋ฅธ์ ์€ ์Šค๋ ˆ๋“œ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์€ ํ•˜๋‚˜์˜ ํ”„๋กœ๋‚ด์Šค ๋‚ด์˜ ์Šค๋ ˆ๋“œ๋“ค์„ ๊ตํ™˜ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

thread context switching

 

TCB (Thread Control Block)

PCB ์ฒ˜๋Ÿผ, TCB(์Šค๋ ˆ๋“œ ์ œ์–ด ๋ธ”๋ก)๋Š” ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ์šด์˜ ์ฒด์ œ์—์„œ ์œ ์ง€ํ•˜๋Š” ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๊ทธ๋ฆผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด TCB๋Š” PCB ์•ˆ์— ๋“ค์–ด์žˆ๋‹ค. ์Šค๋ ˆ๋“œ๊ฐ€ ํ”„๋กœ์„ธ์Šค ๋‚ด์— ์œ„์น˜ํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ ๋ง์ด๋‹ค.

Thread Control Block
PCB์™€ TCB๋Š” LinkedList๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค

์—ญ์‹œ ์Šค๋ ˆ๋“œ์˜ ์ƒํƒœ ์ •๋ณด, ์Šค๋ ˆ๋“œ 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 ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š๋Š”๋‹ค. ๋‹ค๋งŒ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค๋ฅธ CPU ์ฝ”์–ด์—์„œ ์‹คํ–‰๋  ๋•Œ๋Š” ํ•ด๋‹น ์ฝ”์–ด์˜ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ์Šค๋ ˆ๋“œ ์ปจํ…์ŠคํŠธ ์ •๋ณด๊ฐ€ ๋กœ๋“œ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ์ดˆ๊ธฐํ™”๋  ์ˆ˜ ์žˆ๋‹ค.

 

3. ์ž์› ๋™๊ธฐํ™” ๋ฌธ์ œ

์Šค๋ ˆ๋“œ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ๋ฐœ์ƒํ•ด ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ heap ์˜์—ญ์˜ ๊ณต์œ  ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ• ๋•Œ, ์ด์ „ ์Šค๋ ˆ๋“œ๊ฐ€ ์ด๋ฏธ ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‘ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ์Šค๋ ˆ๋“œ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ž˜๋ชป๋œ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์„ ์Šค๋ ˆ๋“œ ๊ฐ„์— ๊ฒฝ์Ÿ ์กฐ๊ฑด (race condition)์ด๋ผ๊ณ  ํ•œ๋‹ค.

ํ”„๋กœ์„ธ์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋…๋ฆฝ๋œ ๊ณต๊ฐ„์ด์ง€๋งŒ, IPC์™€ ๊ฐ™์€ ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์— ๋˜‘๊ฐ™์ด ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด ๋ฐœ์ƒ ํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•˜์—ฌ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ๋ฐœ์ƒํ•  ๋•Œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ทธ ํŒŒ์ผ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ ๋‚ด์šฉ์ด ์†์ƒ๋  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„  ๊ฐ ์ƒํ™ฉ์— ์ ์ ˆํ•œ ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•ด์ง„๋‹ค.


Multi Process ์™€ Multi Thread

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์™€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋Š” ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฐฉ์‹ ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ์ด๋ฆ„์œผ๋กœ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋“ฏ์ด ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์™€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์ผ ์ปซ๋Š”๋‹ค.

Multi-Process-Multi-Thread

์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋“ฏ์ด, ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹จ์ผ์ด ์•„๋‹Œ ๋‹ค์ค‘์œผ๋กœ ๋Œ์•„๊ฐ์œผ๋กœ์จ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋˜ํ•œ ์ด๋กœ ์ธํ•ด ๋ฐœ์ƒ๋˜๋Š” ๋ถ€๊ฐ€์ ์ธ ๋ฌธ์ œ์ ๋„ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ์„ ํŒŒ์•…ํ•˜์—ฌ ์ ์žฌ์ ์†Œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์š”๊ตฌ๋œ๋‹ค. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์™€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๊ตฌ์„ฑ์˜ ์ž์„ธํ•œ ์žฅ๋‹จ์ ์— ๋Œ€ํ•œ ๋น„๊ต๋Š” ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

 

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค vs ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ์žฅ๋‹จ์  ๐Ÿ’ฏ ์™„๋ฒฝ ์ •๋ณต

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์™€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋Š” ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฐฉ์‹ ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ๋‹จ์ˆœํžˆ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ๊ฐœ ๋„์›Œ๋†“๋Š” ๊ฒƒ์ด ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ์ด ๋‘˜์€ ์–ธ์ œ ์–ด๋Š๋•Œ์— ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ

inpa.tistory.com


# ์ฐธ๊ณ ์ž๋ฃŒ

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