๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ–ฅ CS/์šด์˜์ฒด์ œ

[์šด์˜์ฒด์ œ] ํ”„๋กœ์„ธ์Šค

๋ณธ ๊ฒŒ์‹œ๊ธ€์€ KOCW ์ดํ™”์—ฌ์ž๋Œ€ํ•™๊ต ๋ฐ˜ํšจ๊ฒฝ ๊ต์ˆ˜๋‹˜์˜ <์šด์˜์ฒด์ œ> ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.
๊ฒŒ์‹œ๊ธ€์— ํฌํ•จ๋˜๋Š” ์ด๋ฏธ์ง€ ์ž๋ฃŒ ๋˜ํ•œ ํ•ด๋‹น ๊ฐ•์˜์— ํฌํ•จ๋œ ๊ฐ•์˜ ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค๋ž€?

ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

PCB (Process Control Block)

PCB๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ๊ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค๋‹น ์œ ์ง€ํ•˜๋Š” ์ •๋ณด์ž…๋‹ˆ๋‹ค.

์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ์„ธ์Šค ๋‹น PCB๋ฅผ ํ•˜๋‚˜์”ฉ ๋‘๊ณ (์ปค๋„ ์˜์—ญ์— ์ƒ์„ฑ) ์ด๋ฅผ ์ด์šฉํ•ด ๋น ๋ฅด๊ฒŒ ๋ฒˆ๊ฐˆ์•„ ์ˆ˜ํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค์— CPU๋ฅผ ๋น„๋กฏํ•œ ์ž์›์„ ๋ฐฐ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

 

PCB์˜ ๊ตฌ์„ฑ

PCB์—๋Š” ์–ด๋–ค ์ •๋ณด๋“ค์ด ๋‹ด๊ธธ๊นŒ์š”? PCB์˜ ๊ตฌ์„ฑ์€ ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

(1) OS๊ฐ€ ๊ด€๋ฆฌ์ƒ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ณด

- Process ID(=PID): ํŠน์ • ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€์—ฌํ•˜๋Š” ๊ณ ์œ ํ•œ ๋ฒˆํ˜ธ

- Process state: ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ ์ •๋ณด(ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉ ์ค‘์ธ์ง€, ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํƒœ์ธ์ง€ ๋“ฑ)

- CPU ์Šค์ผ€์ค„๋ง ์ •๋ณด, priority: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ธ์ œ, ์–ด๋–ค ์ˆœ์„œ๋กœ CPU๋ฅผ ํ• ๋‹น๋ฐ›์„์ง€์— ๋Œ€ํ•œ ์ •๋ณด)

 

(2) CPU ์ˆ˜ํ–‰ ๊ด€๋ จ ํ•˜๋“œ์›จ์–ด ๊ฐ’

- Program Counter

- registers

 

(3) ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ จ

- code, data, stack์˜ ์œ„์น˜ ์ •๋ณด

 

(4) ํŒŒ์ผ ๊ด€๋ จ

- ์‚ฌ์šฉํ•œ ํŒŒ์ผ ์ •๋ณด

- ์ž…์ถœ๋ ฅ ์žฅ์น˜ ๋ชฉ๋ก

ํ”„๋กœ์„ธ์Šค์˜ ๋ฌธ๋งฅ 

ํ”„๋กœ์„ธ์Šค์˜ ๋ฌธ๋งฅ(context)์ด๋ž€ ํ”„๋กœ์„ธ์Šค์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด์ž…๋‹ˆ๋‹ค.

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

 

ํ”„๋กœ์„ธ์Šค ๋ฌธ๋งฅ

ํ”„๋กœ์„ธ์Šค์˜ ๋ฌธ๋งฅ์€ ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ์ •๋„๋กœ ๋‚˜๋ˆ„์–ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

(1) CPU์˜ ์ˆ˜ํ–‰ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜๋“œ์›จ์–ด ๋ฌธ๋งฅ

- Program Counter (PC): ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์ฝ”๋“œ ์˜์—ญ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์Œ.

- ๊ฐ์ข… register

 

ํ˜„์žฌ์‹œ์ ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ instruction์„ ์–ด๋””๊นŒ์ง€ ์‹คํ–‰ํ–ˆ๋Š”์ง€๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ ˆ์ง€์Šคํ„ฐ์— ์–ด๋–ค ๊ฐ’์„ ๋„ฃ๊ณ  ์žˆ์—ˆ๊ณ ,

Program Counter(PC)๊ฐ€ ์–ด๋””๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์—ˆ๋Š”์ง€๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

(2) ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„

- code, data, stack

 

ํ˜„์žฌ ์‹œ์ ์— ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ณต๊ฐ„์— ์–ด๋–ค ๋‚ด์šฉ์ด ๋“ค์–ด์žˆ๋Š”์ง€๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

(3) ํ”„๋กœ์„ธ์Šค ๊ด€๋ จ ์ปค๋„ ์ž๋ฃŒ ๊ตฌ์กฐ (์ปค๋„์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ •๋ณด)

- PCB (Process Control Block)

- Kernel stack

 

์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜ ๋‹น PCB๋ฅผ ํ•˜๋‚˜์”ฉ ๋‘๊ณ  ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค์— CPU๋ฅผ ๋น„๋กฏํ•œ ์ž์›์„ ๋ฐฐ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์‹œ์Šคํ…œ ์ฝœ์ด ์ผ์–ด๋‚˜๊ฒŒ ๋  ๊ฒฝ์šฐ Program Counter๊ฐ€ ์ปค๋„ ์ฃผ์†Œ๊ณต๊ฐ„ ์–ด๋”˜๊ฐ€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜๊ณ , ์ปค๋„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ์ปค๋„์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์ผ์–ด๋‚˜๊ฒŒ ๋˜๋ฉด ์ปค๋„ ์Šคํƒ์— ๊ด€๋ จ ์ •๋ณด ์Œ“์•„ ๋†“๊ฒŒ ๋˜๋Š”๋ฐ, ์ปค๋„์˜ ์ฝ”๋“œ๋Š” ๊ณต์œ ๋˜๋Š” ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ํ”„๋กœ์„ธ์Šค ๋ณ„๋กœ ๋ณ„๋„์˜ ์Šคํƒ์„ ๋‘๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— kernel stack์— ๋Œ€ํ•œ ์ •๋ณด ๋˜ํ•œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ๋งฅ ๊ตํ™˜ (Context Switching)

์œ„์—์„œ ํ”„๋กœ์„ธ์Šค์˜ ์ค‘๊ฐ„ ์ •๋ณด, ์ฆ‰ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์ˆ˜ํ–‰์„ ์žฌ๊ฐœํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์–ตํ•ด์•ผ ํ•  ์ •๋ณด๋ฅผ ๋ฌธ๋งฅ(context)์ด๋ผ๊ณ  ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

 

๋ฌธ๋งฅ ๊ตํ™˜ ๊ณผ์ •

๋ฌธ๋งฅ ๊ตํ™˜(context switching): CPU๋ฅผ ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ณผ์ •

 

๋ฌธ๋งฅ ๊ตํ™˜ ์‹œ ์šด์˜์ฒด์ œ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…

- CPU๋ฅผ ๋‚ด์–ด์ฃผ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ PCB์— ์ €์žฅ

- CPU๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์–ป๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ PCB์—์„œ ์ฝ์–ด์˜ด

 

์‹œ์Šคํ…œ ์ฝœ์ด๋‚˜ ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์‹œ ๋ฐ˜๋“œ์‹œ ๋ฌธ๋งฅ ๊ตํ™˜์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค!

์œ„์˜ ๊ทธ๋ฆผ์—์„œ (1), (2)์˜ ๊ฒฝ์šฐ ๋ชจ๋‘ ์‹œ์Šคํ…œ ์ฝœ์ด๋‚˜ ์ธํ„ฐ๋ŸฝํŠธ๋กœ ์ธํ•ด ์œ ์ € ๋ชจ๋“œ์—์„œ ์ปค๋„ ๋ชจ๋“œ๋กœ ์ „ํ™˜๋˜์ง€๋งŒ (1)์€ ๋ฌธ๋งฅ ๊ตํ™˜์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ณ  ์œ ์ € ๋ชจ๋“œ๋กœ ๋ณต๊ท€๋˜๊ณ , (2)์˜ ๊ฒฝ์šฐ๋งŒ ๋ฌธ๋งฅ ๊ตํ™˜์ด ์ผ์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์™œ๋ƒํ•˜๋ฉด, ์ปค๋„ ๋ชจ๋“œ๋กœ ์ „ํ™˜๋˜์—ˆ๋‹ค๊ณ  ํ•ด์„œ CPU ์ œ์–ด๊ถŒ์ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

(1)์˜ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ ์ฝœ์ด ์ผ์–ด๋‚˜ OS ์ปค๋„ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ๋‚œ ํ›„ ๋‹ค์‹œ CPU ์ œ์–ด๊ถŒ์ด ํ”„๋กœ์„ธ์Šค A์—๊ฒŒ๋กœ ๋Œ์•„๊ฐ„ ๊ฒฝ์šฐ์ด๊ณ , (2)์˜ ๊ฒฝ์šฐ๋Š” ํƒ€์ด๋จธ ์ธํ„ฐ๋ŸฝํŠธ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋กœ ์ปค๋„ ๋ชจ๋“œ๋กœ ์ „ํ™˜๋œ ํ›„ OS์—์„œ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๋กœ CPU ์ œ์–ด๊ถŒ์ด ๋„˜์–ด๊ฐ„ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.