๐Ÿฅ

Limited Direct Execution, CPU scheduling(RR, MLFQ) ๋ณธ๋ฌธ

์šด์˜์ฒด์ œ

Limited Direct Execution, CPU scheduling(RR, MLFQ)

•8• 2019. 1. 3. 23:33

Direct Execution

 

OS๊ฐ€ program์„ ์‹œ์ž‘ํ•  ๋•Œ

โ‘  process list์— process entry๋ฅผ ๋งŒ๋“ค๊ณ 

โ‘ก memory๋ฅผ ํ• ๋‹นํ•˜๊ณ 

โ‘ข program code๋ฅผ memory์— loadํ•˜๊ณ 

โ‘ฃ ์ง„์ž…์ ์„ ์ฐพ์•„ ๊ทธ ์ง€์ ์œผ๋กœ ๋ถ„๊ธฐํ•œ๋‹ค.

 

program์„ cpu์ƒ์—์„œ ์ง์ ‘ ์‹คํ–‰์‹œํ‚ค๋ฏ€๋กœ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•œ๋ฒˆ์— ํ•œ ํ”„๋กœ๊ทธ๋žจ๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

ํ•œ๋ฒˆ์— ํ•œ ํ”„๋กœ๊ทธ๋žจ๋งŒ ๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€, ์ผ๋‹จ ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋˜๋ฉด, cpu๋Š” ํ˜„์žฌ ํ”„๋กœ๊ทธ๋žจ์ด cpu๋ฅผ ์ž๋ฐœ์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. 

์ด ๊ฒฝ์šฐ์— time sharing์ด ํž˜๋“ค์–ด์ง€๊ณ , Limited direct execution์ด ๋“ฑ์žฅํ–ˆ๋‹ค.

 

 

 

 

 

 

Limited Direct Execution

1. ์ œํ•œ๋œ ์—ฐ์‚ฐ

 

ํ”„๋กœ์„ธ์Šค๊ฐ€ ํŠน์ˆ˜ํ•œ ์ข…๋ฅ˜์˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธธ ์›ํ•  ๋•Œ, application์˜ execution mode๋ฅผ ๋‘ ๊ฐ€์ง€ ์ œ๊ณตํ•œ๋‹ค.

kernel mode : I/O์™€ ๊ฐ™์€ privileged operation์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. machine์˜ full resource์— ์ ‘๊ทผ ๊ฐ€๋Šฅ

user mode : privileged operation์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค. user process๋Š” ๋ณดํ†ต ์ด mode์—์„œ ๋™์ž‘ํ•œ๋‹ค.

 

 

user process๊ฐ€ privileged operation์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์กด์žฌํ•  ๊ฒƒ์ด๋‹ค. ์ด ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด ๋‘๊ฐ€์ง€ ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋‹ค.

trap๊ณผ return-from-trap์ด๋‹ค.

 

system call์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ trap ๋ช…๋ น์–ด ์ˆ˜ํ–‰

trap: kernel ์•ˆ์œผ๋กœ ๋ถ„๊ธฐํ•˜๋Š” ๋™์‹œ์— ํŠน๊ถŒ ์ˆ˜์ค€์„ kernel mode๋กœ ์ƒํ–ฅ์กฐ์ •

 

ํ˜ธ์ถœํ•œ process์˜ register๋ฅผ kernel stack์— ์ €์žฅํ•œ๋‹ค. return-from-trap์ด ๋ถˆ๋ฆฌ๋ฉด k-stack(kernel stack)์—์„œ popํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

 

return-from-trap: ํŠน๊ถŒ์ˆ˜์ค€์„ user mode๋กœ ํ•˜์–‘์กฐ์ •ํ•˜๋ฉด์„œ ํ˜ธ์ถœํ•œ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ return

 

trap์ด ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ค code๋ฅผ ์‹คํ–‰ํ•  ์ง€๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. ์ฃผ์†Œ๋ฅผ ๋ช…์‹œํ•ด์ค˜๋ฒ„๋ฆฌ๋ฉด kernel ๋‚ด๋ถ€์˜ ์›ํ•˜๋Š” ์ง€์ ์„ ์ ‘๊ทผํ•  ์ˆ˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ!(์œ„ํ—˜...)

๊ทธ๋ž˜์„œ kernel์€ ๋ถ€ํŒ… ์‹œ์— trap table์„ ๋งŒ๋“ ๋‹ค. OS๋Š” ํŠน์ • ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ํ•˜๋“œ์›จ์–ด์—๊ฒŒ trap handler์˜ ์œ„์น˜๋ฅผ ์•Œ๋ ค์ค€๋‹ค.

 

2. ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ „ํ™˜

 

OS๋Š” cpu๋ฅผ ๋‹ค์‹œ ํš๋“ํ•˜์—ฌ process๋ฅผ ์ „ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. ์šด์˜์ฒด์ œ๊ฐ€ cpu๋ฅผ ํš๋“ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

Cooperative

 

OS๊ฐ€ user application์ด cpu control์„ ์ค„ ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ๋Š” ๊ฒƒ. ์ฆ‰ application ์ž์ฒด์—์„œ system call์„ ํ˜ธ์ถœํ•ด cpu๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์ค€๋‹ค.

* ์ด ๋ฐฉ๋ฒ•์€ ์•…์˜์ , ํ˜น์€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์–ด process๊ฐ€ ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์ ธ system call์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

 

Non-Cooperative

 

์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋‹ค์‹œํ”ผ, cooperative ๋ฐฉ๋ฒ•๊ณผ ์ • ๋ฐ˜๋Œ€์ด๋‹ค. OS๋Š” timer interrupt๋ฅผ ์ด์šฉํ•ด cpu ์ œ์–ด๊ถŒ์„ ๋‹ค์‹œ ํš๋“ํ•œ๋‹ค. ์ฆ‰ hardware support๊ฐ€ ํ•„์š”ํ•œ ๋ฐฉ๋ฒ•. 

interrupt๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์‹คํ–‰๋˜๋˜ process๋Š” ์ค‘๋‹จ๋˜๊ณ  interrupt handler๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

timer interrupt๊ฐ€ ์ผ์–ด๋‚˜๋ฉด

โ‘  ์‹คํ–‰๋˜๋˜ process์˜ register๋ฅผ ๊ทธ process์˜ k-stack์— ์ €์žฅํ•œ๋‹ค.

โ‘ก kernel mode๋กœ ์ด๋™

โ‘ข trap handler๋กœ jump

 

 

 

 

 

 

CPU Scheduling

 

์ฃผ์–ด์ง„ runnable processes์˜ ์ง‘ํ•ฉ ์ค‘์—์„œ ๋‹ค์Œ์— ์–ด๋–ค process๋ฅผ ๋™์ž‘์‹œ์ผœ์•ผ ํ•˜๋Š”์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.

์Šค์ผ€์ฅด๋ง ์ ‘๊ทผ ๋ฐฉ๋ฒ•์—๋Š” non-preemptive scheduling, preemptive scheduling ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

 

1. Non-preemptive scheduling

 

running process๊ฐ€ ์ž๋ฐœ์ ์œผ๋กœ yieldํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. ์ด ๊ฒฝ์šฐ process๊ฐ€ OS์— cooperative ํ•ด์•ผ ํ•œ๋‹ค.

๋ง ๊ทธ๋Œ€๋กœ OS๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งˆ์Œ๋Œ€๋กœ ๋ฉˆ์ถ”๊ฒŒ ํ•  ์ˆ˜ ์—†๋‹ค.

 

 

2. Preemptive scheduling (ํ˜„๋Œ€ ์Šค์ผ€์ฅด๋Ÿฌ)

 

scheduler๊ฐ€ process๋ฅผ interruptํ•˜๊ณ  context switching์„ ๊ฐ•์š”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋„ ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.

๋งŒ์•ฝ ๊ณต์œ  ๋ฐ์ดํ„ฐ์˜ update์ค‘์— process๊ฐ€ preempt๋œ๋‹ค๋ฉด? ๊ณต์œ  ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋œ๋‹ค๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋˜ ๋ชจ๋“  process์˜ ๋™์ž‘์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

๋˜๋Š” ๋งŒ์•ฝ system call์ด preempt๋œ๋‹ค๋ฉด? 

(๋’ค์— ์†Œ๊ฐœ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ)

 

 

์Šค์ผ€์ฅด๋ง์—๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์˜ ํ€„๋ฆฌํ‹ฐ๋ฅผ ์ธก์ •ํ•  ์‹์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

 

scheduling ๋˜๊ธฐ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ์‹œ๊ฐ„

 

 

 

โ— FIFO

 

First-In, First-Out. ๋ง ๊ทธ๋Œ€๋กœ ์˜จ ์ˆœ์„œ๋Œ€๋กœ scheduling์ด ๋œ๋‹ค.

๋‹น์—ฐํžˆ non-preemptiveํ•œ ์Šค์ผ€์ฅด๋ง ๋ฐฉ๋ฒ•์ด๋‹ค.

job์ด ๋™๋“ฑํ•˜๊ฒŒ ๋‹ค๋ค„์ง€๋ฏ€๋กœ starvation ๋ฌธ์ œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ convoy effect๋Š” ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

starvation์€ ๊ตถ์ฃผ๋ฆผ์ด๋ž€ ๋œป์ด๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜์ง€ ๋ชปํ•˜๊ณ  ๊ณ„์† ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํ™ฉ์„ ์˜๋ฏธํ•œ๋‹ค.

convoy effect๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ํ˜„์žฌ ์ฒ˜๋ฆฌ์ค‘์ธ ์ผ๋ณด๋‹ค ๋” ์งง์€ ์ผ์ด ๋„์ฐฉํ•ด๋„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค. ์ด๋Š” ์งง์€ ์‹œ๊ฐ„์˜ job์—๊ฒŒ ๊ณต์ •ํ•˜์ง€ ๋ชปํ•œ scheduling ๋ฐฉ๋ฒ•์ด๋‹ค.

 

โ— SJF

 

Shortest Job First. ๋ง ๊ทธ๋Œ€๋กœ ํ˜„์žฌ ๋„์ฐฉํ•œ process๋“ค ์ค‘ ๊ฐ€์žฅ ์งง์€ ์ผ๋ถ€ํ„ฐ ์ˆ˜ํ–‰ํ•˜๋Š” ์Šค์ผ€์ฅด๋ง ๊ธฐ๋ฒ•์ด๋‹ค.

๋ชจ๋“  ์ž‘์—…์ด ๋™์‹œ์— ๋„์ฐฉํ•œ๋‹ค๋ฉด, optimal turnaround time์ž„์„ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.

non-preemptiveํ•œ ์Šค์ผ€์ฅด๋ง ๋ฐฉ๋ฒ•

๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฐฉ๋ฒ•์—๋„ ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.

์ž‘์—…๋“ค์ด ๋™์‹œ์— ๋„์ฐฉํ•˜์ง€ ์•Š๊ณ  ์•„๋ฌด๋•Œ๋‚˜ ๋„์ฐฉํ•œ๋‹ค๋ฉด optimalํ•œ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋‹ค.

๋˜ ์ž ์žฌ์ ์œผ๋กœ starvation์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ๋งค์šฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ–ˆ๋Š”๋ฐ, ์ด ํ›„์— ๊ณ„์† ์งง์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•œ๋‹ค๋ฉด ์ด ๊ธด ํ”„๋กœ์„ธ์Šค๋Š” ์˜์›ํžˆ ์‹คํ–‰๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค...

 

โ— STCF

 

Shortest Time to Completion First

์ด๋Š” SJF์˜ preemptive ๋ฒ„์ „์ด๋‹ค. running job์˜ remaining time๊ณผ new arrival job์˜ run time์„ ๋น„๊ตํ•ด new job์ด ๋” ์งง์œผ๋ฉด running job์„ preemptํ•œ๋‹ค.

 

โ— RR

 

Round-Robin

์œ„์˜ ์ˆ˜์‹๋“ค ์ค‘ turnaround๋ณด๋‹ค๋Š” response time์— ํฌ์ปค์Šค๋ฅผ ๋‘” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. 

preemptiveํ•œ ์Šค์ผ€์ฅด๋ง ๋ฐฉ๋ฒ•

time slice ๋™์•ˆ ์‹คํ–‰ํ•œ ํ›„ ์‹คํ–‰ queue์˜ ๋‹ค์Œ ์ž‘์—…์œผ๋กœ ์ „ํ™˜.

์ด ๋•Œ time slice๊ฐ€ ๋„ˆ๋ฌด ์งง๋‹ค๋ฉด context switching cost๊ฐ€ ์ „์ฒด ์„ฑ๋Šฅ์ด ํฐ ์˜ํ–ฅ์„ ๋ผ์ง„๋‹ค. ๋„ˆ๋ฌด ์ž์ฃผ process๊ฐ€ ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฐ˜๋Œ€๋กœ ๋˜ ๋„ˆ๋ฌด ๊ธธ๋‹ค๋ฉด ๋œ responsiveํ•˜๊ฒŒ ๋œ๋‹ค.

์–ด๋–ค ํฌ๊ธฐ์˜ slice๊ฐ€ ์ข‹๋Š๋ƒ๋Š” ์ •ํ™•ํ•œ optimalํ•œ ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ƒฅ heuristicํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ€์žฅ ์ข‹์€ ์„ฑ๋Šฅ์˜ ํฌ๊ธฐ๋กœ ์ •ํ•œ๋‹ค. ๋ณดํ†ต 10~100ms๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

์ด ๋ฐฉ๋ฒ•์€ starvation์ด ์—†์œผ๋ฉฐ response time์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ๋”ฐ๋ผ์„œ time-sharing์— ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค.

 

 

๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ์ž‘์—…์ด CPU'๋งŒ' ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ž…์ถœ๋ ฅ ์—ฐ์‚ฐ๋„ ๊ณ ๋ คํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด process A๋Š” 10ms๋™์•ˆ ์‹คํ–‰ ํ›„ ์ž…์ถœ๋ ฅ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , process B๋Š” I/O ์—ฐ์‚ฐ์ด ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. ๊ฐ ์ž‘์—…์€ 50ms์˜ CPU time์„ ํ•„์š”๋กœ ํ•œ๋‹ค.

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์€ A๋ฅผ ๋จผ์ € ๋๋‚ธ ๋‹ค์Œ B๋ฅผ ๋๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

ํ•œ ๋ˆˆ์— ๋ณด๊ธฐ์—๋„ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค. A์™€ B๋ฅผ ๋ชจ๋‘ ๋๋‚ด๋Š” ๋ฐ 140ms๊ฐ€ ์†Œ์š”๋œ๋‹ค.

 

์ด์ œ STCF๋ฅผ ์ด์šฉํ•ด ์กฐ๊ธˆ ๋” ํšจ์œจ์ ์œผ๋กœ ๋ฐ”๊ฟ”๋ณด์ž. A๊ฐ€ 5๊ฐœ์˜ 10ms์˜ ์ž‘์€ ์ž‘์—…์œผ๋กœ ๋ถ„ํ• ๋˜๊ณ , B๋Š” ํ•˜๋‚˜์˜ 50ms ๋ฉ์–ด๋ฆฌ๋ผ๋Š” ์‚ฌ์‹ค์„ ํ™œ์šฉํ•ด๋ณด์ž.

A์˜ ๊ฐ 10ms๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋‹ค๋ค„๋ณด๋ฉด ์–ด๋–จ๊นŒ? ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์‹œ์Šคํ…œ์ด ์‹œ์ž‘๋  ๋•Œ 10ms ์ž‘์—…๋“ค๊ณผ 50ms ์ž‘์—…์„ ์Šค์ผ€์ค„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. STCF์˜ ๊ฒฝ์šฐ ๊ฐ€์žฅ ์งง์€ ์ž‘์—…์„ ์„ ํƒํ•˜๋ฏ€๋กœ ์ด ๊ฒฝ์šฐ์—๋Š” A๊ฐ€ ๋œ๋‹ค. 10ms A๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด B๋งŒ ๋‚จ๊ฒŒ๋˜๋ฏ€๋กœ B๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ๊ทธ ํ›„์— A์˜ ์ž…์ถœ๋ ฅ์ด ์™„๋ฃŒ๋œ๋‹ค๋ฉด ์‹คํ–‰๋˜๊ณ  ์žˆ๋˜ B๋ฅผ preemptํ•ด์„œ 10ms A๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค. ์ด ๊ณผ์ •์„ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

์‹œ๊ฐ„์„ ์ •๋ง ๋งŽ์ด ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์ž…์ถœ๋ ฅ์ด ๋๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ CPU๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ overlap(์ค‘์ฒฉ)์ด๋ผ๊ณ  ํ•œ๋‹ค. overlap์ด ์žˆ๋‹ค๋ฉด cpu์˜ ํ™œ์šฉ๋ฅ ์€ ๋” ์˜ฌ๋ผ๊ฐ„๋‹ค.

 

 

์Šค์ผ€์ค„๋Ÿฌ์˜ ์ตœ์ข… ๋ชฉํ‘œ๋Š” ๋ฌด์—‡์ผ๊นŒ?

turnaround time์„ optimizeํ•˜๊ณ 

interactive job์— ๋Œ€ํ•œ response time์„ ์ตœ์†Œํ™”ํ•˜๊ณ 

workload์— ๋Œ€ํ•œ priori knowledge ์—†์ด ์Šค์ผ€์ค„๋ง ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

์•„๋ž˜์˜ MLFQ๊ฐ€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

โ— MLFQ

 

Multi-level Feedback Queue

๋ง ๊ทธ๋Œ€๋กœ process๊ฐ„ level์ด ์กด์žฌํ•ด ๋†’์€ level, ์ฆ‰ ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๋ฉด ๊ทธ process๋ฅผ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. (Rule 1)

์ด ์šฐ์„ ์ˆœ์œ„๋Š” process์˜ behavior์— ๋”ฐ๋ผ ๊ฒฐ์ •๋œ๋‹ค.

 

Rule 1. If Priority(A) > Priority(B), A runs

 

๊ฐ™์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„๋‹ค๋ฉด ์–ด๋–จ๊นŒ? ์ด๋•Œ๋Š” RR scheduling์„ ์‚ฌ์šฉํ•œ๋‹ค. (Rule 2)

 

Rule 2. If Priority(A) = Priority(B), scheduling with RR

 

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜์˜ ๊ฐ™์€ priority๋ฅผ ๊ฐ€์งˆ ์ˆ˜๋Š” ์—†๋‹ค. ๊ทธ๋Ÿด๊ฒฝ์šฐ starvation problem์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋†’์€ priority์˜ ์ž‘์—…๋งŒ ๊ณ„์† ๋“ค์–ด์˜จ๋‹ค๋ฉด, ์ƒ๋Œ€์ ์œผ๋กœ ๋‚ฎ์€ priority๋ฅผ ๊ฐ€์ง„ job์€ ์˜์›ํžˆ ์ˆ˜ํ–‰๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธด๋‹ค. ๊ทธ๋ ‡๊ธฐ๋•Œ๋ฌธ์— MLFQ๋Š” priority๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐ”๊ฟ”์ค˜์•ผํ•œ๋‹ค.

Priority๋ฅผ ๋ฐ”๊ฟ”์ฃผ๊ธฐ ์œ„ํ•ด Rule 3๊ณผ Rule 4๊ฐ€ ์žˆ๋‹ค.

 

Rule 3. ์ž‘์—…์ด system์— ์ง„์ž…ํ•˜๋ฉด, ๊ฐ€์žฅ ๋†’์€ priority queue์— ๋†“์ธ๋‹ค.

Rule 4a. ์ฃผ์–ด์ง„ time slice๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ๋‹จ๊ณ„ ๋‚ฎ์€ queue๋กœ ์ด๋™ํ•œ๋‹ค.

Rule 4b. time slice๋ฅผ ๋‹ค ์“ฐ๊ธฐ ์ „์— cpu๋ฅผ ํฌ๊ธฐํ•˜๋ฉด ๊ฐ™์€ priority level์„ ์œ ์ง€ํ•œ๋‹ค

 

์ด Rule์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ์ ์ด ์ƒ๊ธด๋‹ค.

 

1. Starvation Problem

์˜ค๋ž˜ ์‹คํ–‰๋˜๋Š” job์€ ๋„ˆ๋ฌด ๋งŽ์€ interactive job ๋•Œ๋ฌธ์— starve(๋ฆฌ์†Œ์Šค๋ฅผ ์˜ค๋žœ๊ธฐ๊ฐ„ ํ• ๋‹น๋ฐ›์ง€ ๋ชปํ•จ)ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ณดํ†ต workload๋Š” interactive job๊ณผ cpu-intensive job์ด ํ•จ๊ป˜ ์žˆ๋‹ค. interactive job์€ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์งง๊ณ , ์งง์€ response time์„ ์š”๊ตฌํ•œ๋‹ค. ๋ฐ˜๋Œ€๋กœ cpu-intensive job์€ ๋งŽ์€ cpu time ์„ ์š”๊ตฌํ•˜๊ณ  response time์€ ์ƒ๋Œ€์ ์œผ๋กœ ๋œ ์ค‘์š”ํ•˜๋‹ค.

 

2. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž์‹ ์˜ ํ”„๋กœ๊ทธ๋žจ์— ์œ ๋ฆฌํ•˜๊ฒŒ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

Rule 4a์™€ 4b๊ฐ€ ์ด ๋ฌธ์ œ์— ๊ธฐ์—ฌํ•œ๋‹ค. ๋งŒ์•ฝ time slice ์ง์ „์— micro sleep system call์„ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด OS๋Š” ํ•ด๋‹น application์„ top level queue์— ๋ฐฐ์น˜ํ•˜๊ฒŒ ๋œ๋‹ค.

 

3. ์‹œ๊ฐ„์— ํ๋ฆ„์— ๋”ฐ๋ผ behavior๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค

 

Starvation์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ฒŒ Rule์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ชจ๋“  ์ž‘์—…์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ƒํ–ฅ ์กฐ์ •(Priority Boost) ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

Rule 5. ์ผ์ • time period๊ฐ€ ์ง€๋‚˜๋ฉด ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ์ž‘์—…์„ topmost queue๋กœ ์ด๋™์‹œํ‚จ๋‹ค.

 

Rule 5๋ฅผ ํ†ตํ•ด 1๋ฒˆ์˜ starvation problem์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ € `์ผ์ • time period`๋Š” ์–ด๋–ป๊ฒŒ ์ •ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ? John Ousterhout๋Š” ์ด๋Ÿฐ ๊ฐ’์„ voo-doo constants(๋ถ€๋‘ ์ƒ์ˆ˜)๋ผ๊ณ  ๋ถˆ๋ €๋Š”๋ฐ, ๋„ˆ๋ฌด ํฌ๋ฉด starvation์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด interactive job์ด ์ ์ ˆํ•œ ์–‘์˜ cpu ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ๋ถ€๋‘์ƒ์ˆ˜๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

์œ„์˜ ๋ฌธ์ œ์  2๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Rule 4๋ฅผ ๊ณ ์ณ์•ผ ํ•œ๋‹ค. MLFQ์˜ ๊ฐ ๋‹จ๊ณ„์—์„œ ์ด CPU ์‚ฌ์šฉ ์‹œ๊ฐ„์„ ์ธก์ •ํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด๋กœ Rule 4a, 4b๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •๋œ๋‹ค.

 

Rule 4. ์ฃผ์–ด์ง„ ๋‹จ๊ณ„์—์„œ time slice๋ฅผ ์†Œ์ง„ํ•˜๋ฉด(CPU๋ฅผ ๋ช‡ ๋ฒˆ ์–‘๋„ํ–ˆ๋Š”์ง€๋Š” ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์Œ), ์šฐ์„  ์ˆœ์œ„๋Š” ๋‚ฎ์•„์ง„๋‹ค (ํ•œ ๋‹จ๊ณ„ ์•„๋ž˜ queue๋กœ ์ด๋™).

 

์ •๋ฆฌํ•ด๋ณด์ž๋ฉด MLFQ๋Š”

  • Preemptive priority scheduling ์ด๊ณ ,
  • Time slice์— ๊ธฐ๋ฐ˜ํ•œ time-shared ์ด๊ณ ,
  • process์˜ priority๋“ค์ด ๋‹ค์ด๋‚˜๋ฏนํ•˜๊ฒŒ ๋ฐ”๋€Œ๋ฉฐ,
  • Starvation Problem์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

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

Virtual memory (fixed partition, variable partition, segmentation)  (0) 2019.01.06
Process Abstraction  (0) 2019.01.03