๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
HYU/์šด์˜์ฒด์ œ(OS)

3. Processes and Threads

by Jaeguk 2023. 3. 23.

Process

ํ”„๋กœ์„ธ์Šค์˜ ๋…ผ๋ฆฌ์  ์ •์˜๋Š” "์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ" ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ ์‹ค์ฒด๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋“ค์„ ๋‹ด๊ณ  ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค.

Branch๋‚˜ Jump์— ์˜ํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์ด sequentialํ•˜๊ฒŒ ์ˆ˜ํ–‰๋˜๋Š” ํŒจํ„ด์ด ๋ฐ”๋€” ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ๋ธŒ๋žœ์น˜๋‚˜ ์ ํ”„๊ฐ€ ์—†๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋žจ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค.

 

ํ”„๋กœ์„ธ์Šค ์•ˆ์—๋Š” ์–ด๋–ค ๋‚ด์šฉ๋“ค์ด ๋‹ด๊ฒจ ์žˆ์„๊นŒ?

Text Section: ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ๊ฐ€ ๋‹ด๊ฒจ ์žˆ๋Š” ์˜์—ญ

Stack Section: Function Call๊ณผ Context Switch๋ฅผ ์œ„ํ•œ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ

- Function Call: ํ•จ์ˆ˜๊ฐ€ ์ค‘์ฒฉ๋˜์–ด ํ˜ธ์ถœ๋˜๊ฒŒ ๋œ๋‹ค๋ฉด, Aํ•จ์ˆ˜์—์„œ B๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  Bํ•จ์ˆ˜์—์„œ Cํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž. return ์ฃผ์†Œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด๋ฉด, Cํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๊ณ  ๋‚˜๋ฉด Bํ•จ์ˆ˜๋กœ ๋Œ์•„๊ฐ€์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ๋Ÿฌ๋ ค๋ฉด B์˜ ์ฃผ์†Œ๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค. Stack์— return address๋ฅผ ์ €์žฅํ•œ๋‹ค๋ฉด Cํ•จ์ˆ˜๊ฐ€ ๋๋‚œ ํ›„ popํ•˜๋ฉด B๋กœ ๊ฐ€๋Š” return address๋ฅผ ์‰ฝ๊ฒŒ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
=> ๊ทธ๋ž˜์„œ function call ๊ด€๋ จ ์ •๋ณด๋“ค์€ stack์— ๋‹ด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

- Context Switch: ์ˆ˜ํ–‰ ์ค‘์ด๋˜ ํ”„๋กœ๊ทธ๋žจ์˜ PC๋ฅผ ํฌํ•จํ•œ ๋ ˆ์ง€์Šคํ„ฐ ์ •๋ณด, Stack pointer์˜ ์ฃผ์†Œ ๋“ฑ์„ ์ €์žฅํ•œ๋‹ค.

Data Section: ํ˜„์žฌ ํ”„๋กœ๊ทธ๋žจ์˜ ์–ด๋А ๋ถ€๋ถ„์„ ์ˆ˜ํ–‰ํ•˜๋“ ์ง€ ์ƒ๊ด€์—†์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์ธ Static ๋ณ€์ˆ˜๋‚˜, ์ „์—ญ ๋ณ€์ˆ˜์— ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

Heap Section: ๋™์  ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋“ค์€ ํž™ ์˜์—ญ์— ํ• ๋‹น๋œ๋‹ค.

 

ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ํƒ‘์žฌ๋  ๋•Œ ์–ด๋–ค ๋ชจ์Šต์œผ๋กœ ํƒ‘์žฌ๊ฐ€ ๋˜๋Š”๊ฐ€

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ Address Space๋ผ๊ณ  ํ•œ๋‹ค.

๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” logicalํ•˜๊ฒŒ ์—ฐ์†๋œ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. ๊ทธ๋Ÿฐ๋ฐ logicalํ•˜๊ฒŒ ์—ฐ์†๋œ ๊ณต๊ฐ„์ด์ง€ physicalํ•˜๊ฒŒ๋Š” ์—ฐ์†๋œ ๊ณต๊ฐ„์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ฐ ์˜์—ญ์€ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ๋”ฐ๋กœ ๋–จ์–ด์ ธ์„œ ์ €์žฅ๋˜์–ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

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

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ์ƒ์œผ๋กœ๋Š” ์—ฐ์†๋˜์–ด ์žˆ์ง€๋งŒ, ๋งคํ•‘๋œ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋Š” ์—ฐ์†์ ์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

 

Address Space์˜ ์˜์—ญ ์ค‘์—๋Š” ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ์˜์—ญ์ด ์žˆ๊ณ , ๊ฐ€๋ณ€ ํฌ๊ธฐ์˜ ์˜์—ญ์ด ์žˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ์™€ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋œ text, data ์˜์—ญ์€ ๊ณ ์ • ํฌ๊ธฐ ์˜์—ญ์ด๊ณ ,

function call, context switch๋ฅผ ์œ„ํ•œ ์ •๋ณด๊ฐ€ ์ €์žฅ๋œ stack๊ณผ ๋™์  ํ• ๋‹น์ด ๋˜๋Š” heap ์˜์—ญ์€ ๊ฐ€๋ณ€ ์˜์—ญ์ด๋‹ค.

stack์€ function์ด ํ˜ธ์ถœ๋˜๊ณ  return๋  ๋•Œ๋งˆ๋‹ค ๋Š˜์–ด๋‚˜๊ณ  ์ค„์–ด๋“œ๋‹ˆ๊นŒ ๊ฐ€๋ณ€ ์˜์—ญ.

heap์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ•  ๋•Œ๋งˆ๋‹ค ๋Š˜์–ด๋‚˜๊ณ  ์ค„์–ด๋“œ๋‹ˆ๊นŒ ๊ฐ€๋ณ€ ์˜์—ญ.

=> ๊ทธ๋ž˜์„œ ๊ณ ์ • ํฌ๊ธฐ ์˜์—ญ์„ ์•„๋ž˜์— ์Œ“๊ณ , ๊ฐ€๋ณ€ ์˜์—ญ์ธ heap๊ณผ stack์„ ์œ„์— ์Œ“์Œ.

 

๊ทธ๋ฆผ์„ ๋ณด๋ฉด heap๊ณผ stack์€ ์„œ๋กœ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ž๋ผ๋‚œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด heap๊ณผ stack์ด ๋งŒ๋‚˜์ง€๋งŒ ์•Š์œผ๋ฉด ๋ฌธ์ œ ์—†์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ logicalํ•˜๊ฒŒ ์—ฐ์†๋œ ๊ณต๊ฐ„์ด๊ธฐ ๋•Œ๋ฌธ์— max๊ฐ€ ์‚ฌ์‹ค ์—„์ฒญ๋‚˜๊ฒŒ ํฐ ๊ฐ’์ด๋‹ค.
=> ๋‘˜์ด ๋งŒ๋‚  ์ผ์ด ์—†๋‹ค. 

 

Process State

ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜ํ–‰๋จ์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋Š” ์ˆ˜์‹œ๋กœ ๋ฐ”๋€๋‹ค.

new: ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ํƒ‘์žฌ๋Š” ๋˜์—ˆ์ง€๋งŒ, CPU ์Šค์ผ€์ค„๋ง ๋Œ€์ƒ์— ๋“ฑ๋ก์ด ๋˜์ง€ ์•Š์€ ์ƒํƒœ.

๋”๋ณด๊ธฐ

ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™”์œผ๋ฉด CPU ์Šค์ผ€์ค„๋งํ•  ๋•Œ ํฌํ•จํ•˜๋ฉด ๋˜์ง€ ์™œ new ์ƒํƒœ๋กœ ๋‘๋А๋ƒ?

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

running: ํ”„๋กœ๊ทธ๋žจ์ด CPU๋ฅผ ๋ฐ›์•„ ์‹ค์ œ ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ

=> ๋งŒ์•ฝ CPU ์ฝ”์–ด๊ฐ€ ํ•˜๋‚˜๋ผ๋ฉด running ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜๋‚˜๋งŒ ์กด์žฌํ•  ๊ฒƒ์ด๋‹ค.

waiting: Event๊ฐ€ ๋๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ. ์—ฌ๊ธฐ์„œ ์ด๋ฒคํŠธ๋Š” ๋Œ€๋ถ€๋ถ„ I/O ์ด๋ฒคํŠธ๋ฅผ ๋งํ•œ๋‹ค.

์ฆ‰, I/O๊ฐ€ ๋๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํƒœ. I/O ์žฅ์น˜๋กœ๋ถ€ํ„ฐ Interrupt๋ฅผ ๋ฐ›์œผ๋ฉด wating ์ƒํƒœ์—์„œ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.

ready: CPU๋ฅผ ํ• ๋‹น๋ฐ›๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํƒœ

wating๊ณผ ready๋Š” ์ผ์„ ํ•˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค๋Š” ์ ์—์„œ๋Š” ๋™์ผํ•˜์ง€๋งŒ, waitng์€ I/O๊ฐ€ ๋๋‚˜์•ผ์ง€๋งŒ CPU๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ  ready๋Š” ์–ธ์ œ๋“ ์ง€ CPU๋ฅผ ๋ฐ›์„ ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ผ๋Š” ์ ์—์„œ ๋‹ค๋ฅด๋‹ค.

terminated: ๋ชจ๋“  Instruction์„ ์ˆ˜ํ–‰ํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๊ฐ€ ๋œ ์ƒํƒœ. ๋” ์ด์ƒ CPU ์Šค์ผ€์ค„๋ง ๋Œ€์ƒ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

running ์ƒํƒœ์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ์ƒํ™ฉ์€ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

1. ๋งˆ์ง€๋ง‰ Instruction์„ ์ˆ˜ํ–‰ํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๊ฐ€ ๋˜๋Š” ์‹œ์ ์— exit์„ ํ†ตํ•ด terminated ์ƒํƒœ๋กœ ๋ฐ”๋€œ
2. ํ”„๋กœ์„ธ์Šค ์ˆ˜ํ–‰ ๋„์ค‘์— I/O๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ CPU๋ฅผ ๋†“๊ณ  waiting ์ƒํƒœ๋กœ ๊ฐ„๋‹ค.
=> Interrupt๋ฅผ ๋ฐ›์œผ๋ฉด ๋‹ค์‹œ ready ์ƒํƒœ๋กœ ๊ฐ„๋‹ค
3. ์ด ํ”„๋กœ์„ธ์Šคํ•œํ…Œ ํ• ๋‹น๋œ ์‹œ๊ฐ„์ด ๋๋‚˜์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU๋ฅผ ๋„˜๊ฒจ์ค˜์•ผ ํ•  ๋•Œ.

๊ทธ๋ฆผ์—์„œ ๋ณด๋ฉด Interrupt๋ฅผ ๋ฐ›์•˜๋‹ค๊ณ  ๋˜์–ด ์žˆ๋‹ค. Timer๋ผ๋Š” ๋””๋ฐ”์ด์Šค๊ฐ€ ์‹œ๊ฐ„์ด ์ข…๋ฃŒ๋˜์—ˆ๋‹ค๋Š” Interrupt๋ฅผ ๋ณด๋ƒ„. ๊ทธ๋Ÿผ CPU ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์ด ํ”„๋กœ์„ธ์Šค๋Š” Ready ์ƒํƒœ๋กœ ๋ณด๋‚ด์•ผ๊ฒ ๋‹ค ํŒ๋‹จํ•˜๊ณ  Ready ์ƒํƒœ๋กœ ๋ณด๋ƒ„

 

Process Control Block(PCB)

ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ.

ํ˜„์žฌ ์ˆ˜ํ–‰ ์ค‘์ด๊ฑฐ๋‚˜ ์ˆ˜ํ–‰๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค.

ํ˜„์žฌ PC๊ฐ’์€ ์–ด๋””๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€, PCB๊ฐ€ ์–ด๋””์— ์˜ฌ๋ผ์™€ ์žˆ๋Š”์ง€, ๋ ˆ์ง€์Šคํ„ฐ์—๋Š” ์–ด๋–ค ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š”์ง€, heap๊ณผ stack์€ ์–ผ๋งˆ๋‚˜ ๋Š˜์–ด๋‚˜ ์žˆ๋Š”์ง€ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•จ.

 

์ด๋Ÿฌํ•œ PCB ์ •๋ณด๋Š” Context Switch๋ฅผ ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

P0 ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋‹ค๊ฐ€ Time Interrupt๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ System Call์„ ํ˜ธ์ถœํ•˜๋ฉด P0๋Š” ์žก๊ณ  ์žˆ๋˜ CPU๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋„˜๊ฒจ์ค˜์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ํ˜„์žฌ P0 ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ PCB ํ˜•ํƒœ๋กœ ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กญ๊ฒŒ ์ˆ˜ํ–‰ํ•  ํ”„๋กœ์„ธ์Šค P1์˜ PCB ์ •๋ณด๋ฅผ loadํ•ด์„œ P1๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ธํŒ…ํ•œ๋‹ค. PC๊ฐ’ ์„ธํŒ…ํ•˜๊ณ , ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ค๊ณ ,, ๋“ฑ๋“ฑ

 

Process Scheduling Queues

OS๊ฐ€ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ•œ ๋‘ ๊ฐœ๊ฐ€ ์•„๋‹ ๊ฒƒ์ž„. CPU๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค๋„ ์žˆ์„ ๊ฒƒ์ด๊ณ , CPU๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค, ๋˜๋Š” I/O๋กœ ์ธํ•ด์„œ waiting ์ƒํƒœ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค ๊นŒ์ง€.

์ด๋Ÿฐ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๊ทธ๋ƒฅ ๋’ค์ฃฝ๋ฐ•์ฃฝ์œผ๋กœ ์žˆ๋‹ค๋ฉด OS๊ฐ€ ๋‹ค์Œ์— CPU๋ฅผ ์ค„ ๋Œ€์ƒ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ๋ฒˆ๊ฑฐ๋กœ์šธ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์ƒํƒœ๋ณ„๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ queue์— ๋ชจ์•„๋‘”๋‹ค.

1. Job Queue: ์‹œ์Šคํ…œ ๋‚ด์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ

2. Ready Queue: CPU๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ready ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ํ.

=> OS๊ฐ€ CPU๋ฅผ ์ค„ ๋Œ€์ƒ์„ ์ •ํ•  ๋•Œ Ready ํ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ์ค‘ ๊ณ ๋ฅผ ๊ฒƒ์ž„.

3. Device Queue: I/O Device๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค. ์ฆ‰, wait ์ƒํƒœ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ํ

 

์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜๋ฉด Queue -> Queue๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ด๋™ํ•œ๋‹ค.

ํ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค ์ค‘ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ๊ณ  ๋‹ค๋ฅธ ํ๋กœ ์˜ฎ๊ธธ์ง€ ์„ ํƒํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด Scheduler์ด๋‹ค.

ํ๊ฐ„์˜ ์ด๋™์ด ๋ฐœ์ƒํ•˜๋Š” ์ฃผ๊ธฐ์— ๋”ฐ๋ผ long-term, short-term, mid-term ์Šค์ผ€์ค„๋Ÿฌ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

 

Long-term scheduler( or job scheduler )

: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ ์ƒ์„ฑ๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๊ธฐ์กด์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜ ๋น ์ ธ๋‚˜๊ฐ€๋ฉด ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง‘์–ด๋„ฃ๋Š” ์—ญํ• ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค( Long-term ).

new ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ready ์ƒํƒœ๋กœ ๋งŒ๋“ค๊ณ  ready queue์— ๋„ฃ์–ด์ฃผ๋Š” ์—ญํ• 

 

Short-term scheduler( or CPU scheduler )

: Ready ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค ์ค‘ ์–ด๋–ค ๋†ˆ์—๊ฒŒ CPU๋ฅผ ์ค„์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์—ญํ• ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์ž์ฃผ ๋ฐœ์ƒ( Short-term ).

๋˜ํ•œ I/O๊ฐ€ ๋๋‚œ ํ”„๋กœ์„ธ์Šค๋ฅผ Device queue์—์„œ Ready queue๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ ์—ญ์‹œ Short-term scheduler์˜ ์—ญํ• ์ด๋‹ค.

 

Midium-term scheduler

: ๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋‹ค ๋ณด๋ฉด ๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์‹œ์— ๋Œ์•„๊ฐ€๊ฒŒ ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ์„œ ๋””์Šคํฌ๋กœ ๋‚ด๋ฆฌ๊ณ (swap out) ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง‘์–ด ๋„ฃ๋Š”๋‹ค(swap in).
์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ผ์„ ํ•˜๋‹ค๊ฐ€ swap out์ด ๋˜๋ฉด, swap out๋œ ์ƒํƒœ๋กœ ์žˆ๋‹ค๊ฐ€ ์ด๋†ˆ์ด ๋‹ค์‹œ CPU๋ฅผ ์žก์•„์•ผ ๋  ์‹œ์ ์ด ์˜ค๋ฉด ๋‹ค์‹œ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๊ฐ€์ง€๊ณ  ์™€์„œ Ready ํ์— ๋„ฃ์–ด์ค€๋‹ค.
์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ swap out์‹œ์ผœ์„œ CPU๋ฅผ ์ฃผ์ง€ ์•Š๋Š” ์ƒํƒœ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  ๋‹ค์‹œ CPU๋ฅผ ์žก์•„์•ผ ํ•  ์‹œ์ ์ด ์˜ค๋ฉด ๋‹ค์‹œ ๋””์Šคํฌ์—์„œ ์ฝ์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฐ ๋‹ค์Œ Ready ํ๋กœ ๋ณด๋‚ด์ฃผ๋Š” ์ผ์„ ํ•˜๋Š” ์• ๊ฐ€ Medium term scheduler.

์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ swap out๋ ๊นŒ?

์‚ฌ์šฉ์ž๊ฐ€ Ctrl + Z๋ฅผ ๋ˆŒ๋Ÿฌ์„œ suspend ์ƒํƒœ๊ฐ€ ๋œ ์• ๋“ค์€ swap out์„ ์‹œํ‚ฌ ์•„์ฃผ ์ข‹์€ ๋Œ€์ƒ.
์ฃผ๋กœ suspend ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ swap out ๋Œ€์ƒ์ด ๋˜๋”๋ผ.

 

Long-term scheduler๋Š” Degree of multiprogramming์„ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ

Degree of multiprogramming์ด๋ž€ CPU ์Šค์ผ€์ค„๋ง์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค. Long-term scheduler๊ฐ€ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ CPU ์Šค์ผ€์ค„๋ง ๋Œ€์ƒ์— ํŽธ์ž…์‹œํ‚ค๋ฉด Degree๊ฐ€ 1 ์ฆ๊ฐ€ํ•œ๋‹ค.

์Šค์ผ€์ค„๋ง์˜ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฅ˜๋ฅผ 2๊ฐœ๋กœ ๋‚˜๋ˆ ์„œ ๊ด€๋ฆฌํ•œ๋‹ค.
I/O๋ฅผ ๋งŽ์ด ๋ฐœ์ƒ์‹œํ‚ค๋Š” ํ”„๋กœ์„ธ์Šค๋ƒ, I/O๋Š” ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ๊ณ„์‚ฐ์„ ๋งŽ์ด ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ƒ.

์ด๊ฒŒ CPU ์Šค์ผ€์ค„๋งํ•  ๋•Œ ์•„์ฃผ ์ค‘์š”ํ•œ ์ •๋ณด๊ฐ€ ๋œ๋‹ค.

 

I/O bound process

ํŽธ์ง‘๊ธฐ, ๋ฉ”์‹ ์ € ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅ์„ ๋งŽ์ด ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค.

์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๊ณ„์† ๋ฐ›๋‹ค๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ญ”๊ฐ€ ํƒ ๋ˆ„๋ฅด๋ฉด ๊ทธ๋•Œ๋งŒ ์ž ์‹œ CPU๋ฅผ ๋ฐ›์•„์„œ ์ผ์„ ํ•œ๋‹ค.

CPU๋ฅผ ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•  ๋•Œ ๋งค์šฐ ์งง๊ฒŒ ์‚ฌ์šฉํ•จ.

CPU ์‚ฌ์šฉ ๋นˆ๋„ ↑, 1ํšŒ๋‹น ์‚ฌ์šฉ ์‹œ๊ฐ„ ↓

 

CPU bound process

I/O๋Š” ๊ฑฐ์˜ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ๊ณ„์‚ฐ์„ ๋งŽ์ด ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค.

CPU-bound process๋Š” ํ•œ ๋ฒˆ CPU๋ฅผ ๋ฐ›์œผ๋ฉด ์ตœ๋Œ€ํ•œ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•จ. I/O๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋‹ˆ๊นŒ.
CPU ์‚ฌ์šฉ ๋นˆ๋„ ↓, 1ํšŒ๋‹น ์‚ฌ์šฉ ์‹œ๊ฐ„ ↑


Context Switch

๊ธฐ์กด ์ˆ˜ํ–‰ ์ค‘์ด๋˜ ํ”„๋กœ์„ธ์Šค์˜ ๋ฌธ๋งฅ์„ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์˜ ๋ฌธ๋งฅ์œผ๋กœ ์ „ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Context Switch๋ผ๊ณ  ํ•œ๋‹ค.

ํ˜„์žฌ CPU๋ฅผ ์žก๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ๊ณผ์ •์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ.

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

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

Context Switch๋Š” ๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๋Š” OS๋ผ๋ฉด ๊ฐ๋‚ดํ•ด์•ผ ํ•  ์˜ค๋ฒ„ํ—ค๋“œ์ด๋‹ค.

 

Context Switch๋ฅผ ํ•จ์— ๋”ฐ๋ผ ๋ถ€๊ฐ€์ ์œผ๋กœ ๋ฐœ์ƒ๋˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ, ๋ฐ”๋กœ Cache flushing ์ด๋‹ค.
์บ์‹œ์—๋Š” ํ˜„์žฌ CPU๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณผ์ •์— ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ์–ด๋“ค์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์˜ฌ๋ผ์˜จ๋‹ค.

์ฆ‰, ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ฒƒ.
๊ทธ๋Ÿฐ๋ฐ Context Switch๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ณ  ๊ธฐ์กด์˜ ์บ์‹œ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ด์ „ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฌธ๋งฅ(instruction๊ณผ ๋ฐ์ดํ„ฐ)์€ ํ•„์š”๊ฐ€ ์—†์–ด์ง.
๊ทธ๋ž˜์„œ Context Switch๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์บ์‹œ๋ฅผ ์•„์— ๋น„์›Œ๋ฒ„๋ฆฐ๋‹ค(Cache flushing). ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด ์บ์‹œ๊ฐ€ ๋น„์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๋ฐ˜์—” ๋ฌด์กฐ๊ฑด cache miss๊ฐ€ ๋งค์šฐ ์ž์ฃผ ๋ฐœ์ƒํ•จ.

=> Context Switch๊ฐ€ ๋™๋ฐ˜ํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ


Process Creation

๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ๋”๋ธ” ํด๋ฆญํ•ด์„œ ์‹คํ–‰ ํ•˜๊ฒŒ ๋˜๋ฉด Process๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์ฃผ์ฒด๋Š” ๋ˆ„๊ตฌ์ผ๊นŒ. ๋”๋ธ” ํด๋ฆญ์„ ํ•˜๋Š” ์ฃผ์ฒด๋Š” ์‚ฌ๋žŒ์ด๊ธด ํ•˜์ง€๋งŒ ์‚ฌ๋žŒ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฑด ์•„๋‹ˆ๋‹ˆ๊นŒ ๋ˆ„๊ตฐ๊ฐ€ ํ•˜๊ณ  ์žˆ์„ ํ…๋ฐ ๋ˆ„๊ตฌ์ผ๊นŒ.

์œ ์ €๊ฐ€ ๋”๋ธ”ํด๋ฆญ์„ ํ•˜๊ฒŒ ๋˜๋ฉด, User Interface๋ฅผ ๊ด€์žฅํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋”๋ธ” ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•„๋“ค์—ฌ์„œ Fork()๋ฅผ ํ˜ธ์ถœํ•ด ์คŒ.

๋˜๋Š” ํ„ฐ๋ฏธ๋„์—์„œ ๋ช…๋ น์–ด๋ฅผ ์น˜๊ณ  ์—”ํ„ฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด, ์‚ฌ์šฉ์ž ๋ช…๋ น์„ ๋ฐ›์•„๋“ค์ด๋Š” ํ”„๋กœ์„ธ์Šค์ธ Shell process๊ฐ€ ํ‚ค๋ณด๋“œ input์„ ๋ฐ›์•„ ๋“ค์—ฌ์„œ Fork()๋ฅผ ํ˜ธ์ถœ.

๊ฒฐ๊ตญ ํ”„๋กœ์„ธ์Šค๋ฅผ Createํ•˜๋Š” ์ฃผ์ฒด๋Š” ํ”„๋กœ์„ธ์Šค์ž„.

ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์—ฐ์‡„์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

=> ๊ทธ๋ž˜์„œ ํ”„๋กœ์„ธ์Šค๋“ค ๊ฐ„์˜ ๊ฐ€๊ณ„๋„๊ฐ€ ์กด์žฌ.
๋ถ€ํŒ…์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฃจํŠธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ณ  ๋ฃจํŠธ ํ”„๋กœ์„ธ์Šค๊ฐ€ Init ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑ. Init ํ”„๋กœ์„ธ์Šค๊ฐ€ Shell ํ”„๋กœ์„ธ์Šค๋ฅผ ๋น„๋กฏํ•ด ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค์„ Forkํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋˜ ๊ทธ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋˜ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ Fork,,,

Linux Process Hierarchy

 

์–ด๋–ป๊ฒŒ ์ด ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๋“ค์„ ๊ตฌ๋ถ„ํ•˜๊ณ  ๊ด€๋ฆฌํ• ๊นŒ?

๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” ๊ณ ์œ ํ•œ ํ”„๋กœ์„ธ์Šค ID๋ฅผ ๊ฐ€์ง„๋‹ค. ์ด pid๋ฅผ ๊ฐ€์ง€๊ณ  ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ๋ถ„.

 

ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค ์กด์žฌ.

  • Resource Sharing

์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์™„์ „ํžˆ ๋™์ผํ•˜๊ฒŒ Address Space๊ฐ€ ๊ตฌ์„ฑ์ด ๋˜๋Š”๋ฐ, ๊ทธ๋Ÿผ ์ž์›๋„ ๊ณต์œ ํ• ๊นŒ?

๋”๋ณด๊ธฐ

Parent ํ”„๋กœ์„ธ์Šค์™€ Child ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์—๋Š” ์‚ฌ์‹ค ๋‚ด์šฉ์ ์ธ(Context) ์ธก๋ฉด์œผ๋กœ๋Š” ์•„๋ฌด ๊ด€๊ณ„๊ฐ€ ์—†์Œ.
๊ทธ๋ ‡๋‹ค ํ•˜๋”๋ผ๋„ ๊ด€๊ณ„๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ด์œ ๋Š”  ์ž๊ธฐ ์ž์‹์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃฝ์—ˆ์„ ๋•Œ ๋ฆฌํ„ด ๊ฐ’์„ ๋ˆ„๊ตฐ๊ฐ€๋Š” ๋ฐ›์•„์•ผ ํ•˜๋Š”๋ฐ ๋ฐ›์•„์ฃผ๋Š” ์‚ฌ๋žŒ์ด ์—†์œผ๋ฉด output๊ฐ’์€ ์—†์–ด์ง€๋Š” ๊ฒƒ์ž„. ๊ทธ ์—ญํ• ์„ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•œ๋‹ค.


๋ถ€๋ชจ์™€ ์ž์‹ ์‚ฌ์ด๊ฐ€ ๋‚ด์šฉ์ ์œผ๋กœ๋„ ๋งค์šฐ ๋ฐ€์ ‘ํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๊ธด ํ•˜๋‹ค.

์›น ์„œ๋ฒ„๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ๋ˆ„๊ตฐ๊ฐ€ ์›น ์„œ๋ฒ„์— ์ ‘์†ํ–ˆ์„ ๋•Œ ์›น ์„œ๋ฒ„๋Š” ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ request๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. (์‹ค์ œ๋ก  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋‹Œ ์Šค๋ ˆ๋“œ๊ฐ€ ๋งŒ๋“ค์–ด์ง€์ง€๋งŒ ์ผ๋‹จ ํ”„๋กœ์„ธ์Šค๋ผ ์ƒ๊ฐํ•˜์ž)
http request๊ฐ€ ์˜ฌ ๋•Œ๋งˆ๋‹ค ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ request๋ฅผ ์ฒ˜๋ฆฌ.
์›น ์„œ๋ฒ„๊ฐ€ ๋งŒ๋“  ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ๊ทธ ์›น ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋‹ค.

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

๋ถ€๋ชจ ์ž์‹ ๊ฐ„์— ์ž์› ์ „์ฒด๋ฅผ ๊ณต์œ ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์ผ๋ถ€๋งŒ ๊ณต์œ ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์•„๋ฌด๋Ÿฐ ๊ด€๊ณ„๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๊ณต์œ ๋ฅผ ์•ˆ ํ•  ์ˆ˜๋„ ์žˆ์Œ.

 

  • Execution

๋ถ€๋ชจ์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ์ด ์›์น™.
๊ทธ๋Ÿฐ๋ฐ ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๋ถ€๋ชจ๊ฐ€ ์ž์‹์„ Fork ์‹œ์ผœ๋†“๊ณ  ๋ถ€๋ชจ๋Š” wait. ๊ทธ๋ฆฌ๊ณ  ์ž์‹์ด ์ข…๋ฃŒ๋˜์–ด return ๊ฐ’์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. return ๊ฐ’์ด ์˜ค๋ฉด ๊นจ์–ด๋‚˜์„œ return ๊ฐ’์„ ์ฒ˜๋ฆฌํ•ด ์ฃผ๋Š” ๊ด€๊ณ„๊ฐ€ ์กด์žฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

  • Address Space

ํ”„๋กœ์„ธ์Šค๊ฐ€ Fork๋˜์–ด ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง€๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ์„ธ์Šค์˜ Address space(์ž๋ฃŒ ๊ตฌ์กฐ)์—๋Š” ๋ฌด์Šจ ๋‚ด์šฉ์ด ์ฑ„์›Œ์งˆ๊นŒ.
๊ธฐ๋ณธ์ ์œผ๋กœ Fork๊ฐ€ ๋˜๋ฉด ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ Address space๋ฅผ ๊ทธ๋Œ€๋กœ ์นดํ”ผํ•˜๋Š” ๊ฒŒ ๋””ํดํŠธ.

=> Fork๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์‹œ์ ์—๋Š” Child ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ๋‚ด์šฉ์„ ์ˆ˜ํ–‰ํ• ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋‹จ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ๋‚ด์šฉ์„ ๋ชจ๋‘ ๋ณต์‚ฌํ•œ๋‹ค.
๋ณ„๋„์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•  ํ”„๋กœ์„ธ์Šค๋ผ๋Š” ๊ฒƒ์ด ๊ฒฐ์ •์ด ๋‚˜๋ฉด ๊ทธ๋•Œ์„œ์•ผ ๋ณ„๋„์˜ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋‚ด์šฉ์„ ์ฑ„์šฐ๊ฒŒ ๋œ๋‹ค.

 

  • UNIX

์ด ๊ณผ์ •์„ UNIX๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž.

UNIX์—์„œ๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ Address space๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ๊นŒ์ง€๊ฐ€ fork() system call์— ํ•ด๋‹นํ•˜๋Š” ๋‚ด์šฉ.
=> ์ด๋•Œ๊นŒ์ง€๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ์™„์ „ํžˆ ๋™์ผํ•œ ๋‚ด์šฉ

exec() system call์„ ํ˜ธ์ถœํ•ด์•ผ ์ธ์ž๋กœ ๋„˜๊ฒจ์ค€ ํ”„๋กœ๊ทธ๋žจ ์ด๋ฆ„์„ ํ†ตํ•ด ๊ทธ ํ”„๋กœ๊ทธ๋žจ์˜ Context๋กœ ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ Address space๋ฅผ ์ฑ„์šฐ๊ฒŒ ๋œ๋‹ค.
=> ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์™„์ „ํžˆ ๋…๋ฆฝ์ ์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง

 

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ์˜๋ฌธ์ . 

fork system call์ด ํ˜ธ์ถœ๋œ ์งํ›„์—” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„์ „ํžˆ ๋™์ผํ•˜๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด ๋‘ ํ”„๋กœ์„ธ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„ํ• ๊นŒ. ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ Address space๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ–ˆ์œผ๋‹ˆ PC ๊ฐ’, ๋ ˆ์ง€์Šคํ„ฐ ์ƒํƒœ๊นŒ์ง€ ๊ฐ™์€๋ฐ, ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„์„ ํ•ด์„œ ์ž์‹ํ•œํ… ์ด๊ฑธ ์‹œํ‚ค๊ณ  ๋ถ€๋ชจ๋Š” ๊ณ„์† ์ผ์„ ํ•˜๊ณ  ์ด๋ ‡๊ฒŒ ์ปจํŠธ๋กค ํ• ๊นŒ.

Fork() System call์˜ return value์— ์ฃผ๋ชฉํ•ด์•ผ ํ•œ๋‹ค.
๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šคํ•œํ…Œ๋Š” return value๋กœ ์ž๊ธฐ๊ฐ€ ๋งŒ๋“  ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ pid ๊ฐ’์ด ๋ฆฌํ„ด์ด ๋˜๊ณ , ์ž์‹ ํ”„๋กœ์„ธ์Šคํ•œํ…Œ๋Š” 0์ด ๋ฆฌํ„ด๋จ

 

C์ฝ”๋“œ๋กœ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž

fork()๋ฅผ ํ˜ธ์ถœํ•œ ์งํ›„ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋Š” ์–ด๋–ค ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•  ์ฐจ๋ก€์ผ๊นŒ.
fork()์˜ ๋ฆฌํ„ด value๋ฅผ ๋ฐ›์•„์„œ pid ๋ณ€์ˆ˜์— ๋„ฃ์–ด์ค„ ์ฐจ๋ก€๋‹ค. ์ฆ‰, PC๋Š” fork()์˜ return ๊ฐ’์„ ๋ฐ›์•„ pid ๋ณ€์ˆ˜์— ๋„ฃ์–ด์ฃผ๋Š” Instruction์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์Œ. ๊ทธ๋Ÿฐ๋ฐ ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ PC์—ญ์‹œ ๋˜‘๊ฐ™์€ ๊ณณ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค.
๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„œ ๊ฐ™์€ value๋ฅผ returnํ•˜๋ฉด ๋‘ ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜์›ํžˆ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ž์‹ ํ”„๋กœ์„ธ์Šค์—๊ฒ ๋‹ค๋ฅธ ์ผ์„ ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ์ž„.

return ๊ฐ’์„ ๋‹ค๋ฅด๊ฒŒ ์ค˜์„œ ๊ตฌ๋ถ„๋  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์—๊ฒ ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ pid๋ฅผ ๋ฆฌํ„ด, ์ž์‹ ํ”„๋กœ์„ธ์Šค์—๊ฒ 0์„ ๋ฆฌํ„ด.

๊ทธ๋Ÿฌ๋ฉด ๋ชจ๋“  ๊ฒŒ ๊ฐ™์ง€๋งŒ pid ๋ณ€์ˆ˜์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  execlp๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ˆœ๊ฐ„ ls ํ”„๋กœ๊ทธ๋žจ์— ํ•ด๋‹นํ•˜๋Š” ๋‚ด์šฉ์œผ๋กœ ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ Address Space๊ฐ€ ์ฑ„์›Œ์ง€๊ฒŒ ๋œ๋‹ค.

 


Single and Multithreaded Processes

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค์—์„œ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์˜ ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๋“ค์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋Š” ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ. ๊ทธ๋ฆฌ๊ณ  ์–ด๋А ๋ถ€๋ถ„์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋“  ์ „์—ญ ๋ณ€์ˆ˜๋Š” ๊ณต์œ ๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.
=> ์ฝ”๋“œ์™€ ์ „์—ญ๋ณ€์ˆ˜, ์˜คํ”ˆ๋œ ํŒŒ์ผ์€ ๊ณต์œ ๋ฅผ ํ•ด์•ผ ํ•จ.

๊ทธ๋Ÿผ ์Šค๋ ˆ๋“œ๋“ค์ด ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฐ’์€ ์–ด๋–ค ๊ฒŒ ์žˆ์„๊นŒ.
๊ฐ ์Šค๋ ˆ๋“œ ๋งˆ๋‹ค ๋‹ค๋ฅธ function์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ์˜์—ญ์— ์ €์žฅ๋˜๋Š” function call๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋“ค return address, parameter, local variable๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋“ค์€ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์งˆ ์ˆ˜ ๋ฐ–์— ์—†์Œ
=> Stack ์˜์—ญ์€ ๊ฐ์ž ๊ฐ€์งˆ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
=> ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ ˆ์ง€์Šคํ„ฐ๊ฐ’์€ ๋‹น์—ฐํžˆ ๋‹ค๋ฅด๋‹ค.

 

Benefits of Multithreaded Process

1. ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ž‘ํ•˜๋ฉด, I/O๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” System call์ด ํ˜ธ์ถœ๋˜๋ฉด  ํ”„๋กœ์„ธ์Šค๋Š” ๋ฉˆ์ถฐ์•ผ๋งŒ ํ•œ๋‹ค(waiting ์ƒํƒœ๊ฐ€ ๋˜์–ด์•ผ๋งŒ ํ•จ)
=> ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋กœ ๋งŒ๋“ค๊ณ  ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค๋ฅธ ์ผ์„ ํ•˜๊ฒŒ ํ•œ๋‹ค๋ฉด, ํŠน์ • ์Šค๋ ˆ๋“œ๋งŒ ๋ฉˆ์ถ”๋ฉด ๋จ. ํ”„๋กœ์„ธ์Šค ์ „์ฒด ์ž…์žฅ์—์„œ๋Š” ์ง„๋„๊ฐ€ ๋‚˜๊ฐ€๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ํ”„๋กœ์„ธ์Šค์˜ ์‘๋‹ต์„ฑ์ด ์ข‹์•„์ง„๋‹ค.

2. ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค๋ฉด ๊ฐ™์€ ์ผ์„ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ผ๋„ ๊ฐ๊ฐ์˜ Address space๋ฅผ ๊ฐ€์ง„๋‹ค. ๊ฐ™์€ ์ผ์„ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋‹ˆ๊นŒ ๋‚ด์šฉ์ด ์™„์ „ํžˆ ๊ฐ™์€ Address space๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค. ๋™์ผํ•œ ๋‚ด์šฉ์˜ text, data ์˜์—ญ์ด ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค์–ด์ ธ์„œ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๋ฏ€๋กœ ์ž์›์ด ๋‚ญ๋น„๋จ.
=> ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž์›์„ ๊ณต์œ ํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์Šค๋ ˆ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๋‹ค.
๊ฐ™์€ ๋‚ด์šฉ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค๋ฉด ๋งŒ๋“ค ๋•Œ๋งˆ๋‹ค Addresss space ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ•ด์•ผ ํ•จ. ์Šค๋ ˆ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค๋ฉด Stack์ด๋ž‘ Register ๊ฐ’๋งŒ ๋ณต์‚ฌํ•˜๋ฉด ๋จ

4. ํ™•์žฅ์„ฑ์˜ ์ฐจ์ด.
๋ฉ€ํ‹ฐ ์ฝ”์–ด์ผ ๋•Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜๋ผ๋ฉด, ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ ˆ๋Œ€ ์—ฌ๋Ÿฌ ์ฝ”์–ด์—์„œ ์ˆ˜ํ–‰๋  ์ˆ˜๊ฐ€ ์—†์Œ. ๊ทธ๋Ÿฐ๋ฐ ๊ทธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉด, ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ผ๋„ ์—ฌ๋Ÿฌ ์ฝ”์–ด์—์„œ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์Œ.
=> ๊ทธ๋Ÿฌ๋ฉด ์ง„๋„๊ฐ€ ํ›จ์”ฌ ๋นจ๋ฆฌ ๋‚˜๊ฐ€๊ฒŒ ๋œ๋‹ค

 

*๋ชจ๋“  ๋‚ด์šฉ์€ ํ•œ์–‘๋Œ€ํ•™๊ต ๊ฐ•์ˆ˜์šฉ ๊ต์ˆ˜๋‹˜์˜ ๊ฐ•์˜ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

728x90

'HYU > ์šด์˜์ฒด์ œ(OS)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

5. Process Synchronization (1)  (0) 2023.03.30
4. CPU Scheduling  (3) 2023.03.24
2. Operating System Overview (2)  (0) 2023.03.23
2. Operating System Overview (1)  (0) 2023.03.22
1. Computer System Overview (2)  (0) 2023.03.20