Computer Science

[CS] Process(ํ”„๋กœ์„ธ์Šค) ์™€ Thread(์“ฐ๋ ˆ๋“œ)

YounghunJo 2024. 2. 27. 21:41
๋ฐ˜์‘ํ˜•

๐Ÿ”Š ํ•ด๋‹น ํฌ์ŠคํŒ…์€ 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์ด ์ผ์–ด๋‚˜๋Š” ๊ณผ์ •์„ ์ข€ ๋” ์‰ฝ๊ฒŒ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

ํ”„๋กœ์„ธ์Šค๋“ค ๊ฐ„์— Context Switch ๋ฐœ์ƒ ๊ณผ์ •

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 ์™€ ๊ฐ™์€ ๊ตฌ์„ฑ์š”์†Œ๋“ค์„ ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹นํ•œ๋‹ค.

 

fork()๋กœ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ์‹œ

 

๋ฐ˜๋ฉด์— exec()๋Š” ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ VMS, PCB์™€ ๊ฐ™์€ ๊ตฌ์„ฑ์š”์†Œ๋“ค์„ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค ๊ฒƒ์„ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ์‹คํ–‰ ์ฝ”๋“œ ์˜์—ญ์ด ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ์ฝ”๋“œ ์˜์—ญ์„ overwriteํ•œ๋‹ค. 

 

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 ์ด๋ž‘์€ ๋˜ ๋‹ค๋ฅด๋‹ค!). ์ด๋ ‡๊ฒŒ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์„ ์“ฐ๋ ˆ๋“œ๋„ ํ•˜๊ฒŒ ๋จ์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค์—์„œ ์ƒํƒœ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์“ฐ๋ ˆ๋“œ๋„ ๋˜‘๊ฐ™์ด ์ƒํƒœ(์ค€๋น„, ์‹คํ–‰, ๋ณด๋ฅ˜ ๋“ฑ)๋ฅผ ๊ฐ–๋Š”๋‹ค.

 

๋ฐ˜์‘ํ˜•