Skip to content

Latest commit

ย 

History

History
167 lines (133 loc) ยท 9.81 KB

cpuScheduler.md

File metadata and controls

167 lines (133 loc) ยท 9.81 KB

CPU Scheduler & Scheduling Algorithm

CPU busrt

=> CPU๋กœ ์ผ๋ฐ˜ ๋ช…๋ น์–ด`๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…

CPU burst๋Š” ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด cpu๋ฅผ ์ง์ ‘ ๊ฐ€์ง€๊ณ  ๋น ๋ฅธ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์€ cpu๋‚ด์—์„œ ์ผ์–ด๋‚˜๋Š” ๋ช…๋ น์ด๋‚˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋Š” ์ผ๋ฐ˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

I/O burst

=> ์šด์˜์ฒด์ œ์˜ ๋„์›€์„ ๋ฐ›์•„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š” ์ž‘์—…

I/O burst๋Š” ์ปค๋„์— ์˜ํ•ด ์ž…์ถœ๋ ฅ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” ๋น„๊ต์  ๋А๋ฆฐ ๋‹จ๊ณ„์ด๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” ๋ชจ๋“  ์ž…์ถœ๋ ฅ ๋ช…๋ น์„ ํŠน๊ถŒ ๋ช…๋ น์œผ๋กœ ๊ทœ์ •ํ•˜์—ฌ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ์ง์ ‘ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๊ณ (user level X, kernal level O), ์šด์˜์ฒด์ œ๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค๋ฅผ ๋Œ€ํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค.

์˜ˆ์‹œ

1. ํ‚ค๋ณด๋“œ ์ž…๋ ฅ์„ ๋ฐ›๋Š” ์ž‘์—…
2. ์ปดํ“จํ„ฐ์—์„œ ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ์ž‘์—…
3. ๋””์Šคํฌ์—์„œ ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ์ž‘์—… 
...

CPU bound process & I/O bound process

๊ฐ ํ”„๋กœ๊ทธ๋žจ๋งˆ๋‹ค cpu๋ฒ„์ŠคํŠธ์™€ io๋ฒ„์ŠคํŠธ๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๋น„์œจ์ด ๊ท ์ผํ•˜์ง€ ์•Š๋‹ค. ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋Š” io์ž‘์—…์ด ๋นˆ๋ฒˆํ•˜๋ฉด์„œ cpu์ž‘์—…์ด ์ ๊ณ  ์ด ๋ฐ˜๋Œ€๋„ ์žˆ๋‹ค. ์–ด๋–ค ๋ฒ„์ŠคํŠธ๊ฐ€ ๋” ์ž์ฃผ ์ผ์–ด๋‚˜๋Š”์ง€์— ๋”ฐ๋ผ์„œ io, cpu bound process๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

I/O bound process

=> I/O ๋ฒ„์ŠคํŠธ๊ฐ€ ๊ธด ํ”„๋กœ์„ธ์Šค I/O์š”์ฒญ์ด ๋นˆ๋ฒˆํ•ด CPU ๋ฒ„์ŠคํŠธ๊ฐ€ ์งง๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งํ•œ๋‹ค. ์ฃผ๋กœ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ interaction์„ ๊ณ„์† ๋ฐ›์•„๊ฐ€๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€ํ™”ํ˜• ํ”„๋กœ๊ทธ๋žจ์ด ์ด์— ํ•ด๋‹นํ•œ๋‹ค.

CPU bound process

=> CPU ๋ฒ„์ŠคํŠธ๊ฐ€ ๊ธด ํ”„๋กœ์„ธ์Šค I/O์ž‘์—…์„ ๊ฑฐ์˜ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•„ CPU ๋ฒ„์ŠคํŠธ๊ฐ€ ๊ธธ๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งํ•œ๋‹ค. ์ฃผ๋กœ ํ”„๋กœ์„ธ์Šค ์ˆ˜ํ–‰์˜ ์ƒ๋‹น ์‹œ๊ฐ„์„ ์ž…์ถœ๋ ฅ ์ž‘์—… ์—†์ด CPU ์ž‘์—…์— ์†Œ๋ชจํ•˜๋Š” ๊ณ„์‚ฐ ์œ„์ฃผ์˜ ํ”„๋กœ๊ทธ๋žจ์ด ํ•ด๋‹น๋œ๋‹ค.



CPU Scheduling

=> CPU ์‚ฌ์šฉ์„ ํšจ์œจ์  ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•ด ์šด์˜์ฒด์ œ๊ฐ€ CPU ์ ์œ ๊ถŒ์„ ์šฐ์„ ์ ์œผ๋กœ ํ• ๋‹นํ•ด์•ผํ•  ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ์ •ํ•˜๋Š” ๊ณผ์ • (schduling - OS๊ฐ€ ์ˆ˜ํ–‰)

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


CPU Scheduler

=> ready ์ƒํƒœ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค ์ค‘ ์–ด๋– ํ•œ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU๋ฅผ ํ• ๋‹นํ•  ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์šด์˜์ฒด์ œ์˜ ์ฝ”๋“œ

์„ ์ ํ˜•(preemptive) : ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ธฐ ์›ํ•ด๋„ ๊ฐ•์ œ๋กœ ๋นผ์•—์„ ์ˆ˜ ์žˆ๋Š” ์Šค์ผ€์ค„๋ง ๋ฐฉ๋ฒ• ๋น„์„ ์ ํ˜•(non-preemptive) : CPU๋ฅผ ํš๋“ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์Šค์Šค๋กœ CPU ์ ์œ ๊ถŒ์„ ํฌ๊ธฐํ•˜๊ธฐ ์ „๊นŒ์ง€ CPU๋ฅผ ๋นผ์•—์ง€ ์•Š๋Š” ์Šค์ผ€์ค„๋ง ๋ฐฉ๋ฒ•

CPU Scheduler๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ

  • Running -> Blocked = I/O์š”์ฒญํ•˜๋Š” ์‹œ์Šคํ…œ์ฝœ (non-preemptive, ์•Œ์•„์„œ ๋‚ด๋†“๊ธฐ ๋•Œ๋ฌธ)
  • Runing -> Ready = ํ€€ํ…€์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•œ timer interrupt (preemptive, ๊ฐ•์ œ ๋บ๊ธฐ)
  • Blocked -> Ready = I/O ์ž‘์—… ์™„๋ฃŒ ํ›„ interrupt
  • Terminated = ์ž‘์—…์„ ๋งˆ์นœ ํ”„๋กœ์„ธ์Šค๋ฅผ free (non-preemptive, ์•Œ์•„์„œ ๋‚ด๋†“๊ธฐ ๋•Œ๋ฌธ)

Dispatcher

  • ์ƒˆ๋กญ๊ฒŒ ์„ ํƒ๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ํ• ๋‹น๋ฐ›๊ณ  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™˜๊ฒฝ ์„ค์ •์„ ํ•˜๋Š” ์šด์˜์ฒด์ œ ์ฝ”๋“œ
  • CPU๋ฅผ ๋ˆ„๊ตฌํ•œํ…Œ ์ค„ ์ง€ ๊ฒฐ์ •ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋„˜๊ฒจ์ฃผ๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ (Context switch)
  • ๋””์ŠคํŒจ์น˜ ์ง€์—ฐ์‹œ๊ฐ„(Dispatch latency) : dispatcher๊ฐ€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ •์ง€์‹œํ‚ค๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ cpu๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ (context switch overhead)

Scheduling Criteria(์Šค์ผ€์ค„๋ง ์„ฑ๋Šฅ ํ‰๊ฐ€ ๊ธฐ์ค€)

์‹œ์Šคํ…œ ์ž…์žฅ

  • CPU Utilization(์ด์šฉ๋ฅ )
    • ์ „์ฒด ์‹œ๊ฐ„ ์ค‘์—์„œ CPU๊ฐ€ ์ผ์„ ํ•œ ์‹œ๊ฐ„์˜ ๋น„์œจ
    • CPU๋ฅผ ์ตœ๋Œ€ํ•œ ๋ฐ”์˜๊ฒŒ ๋‘ฌ๋ผ
  • Throughput(์ฒ˜๋ฆฌ๋Ÿ‰)
    • ์ฃผ์–ด์ง„ ์‹œ๊ฐ„๋™์•ˆ ์ค€๋น„ํ์—์„œ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋А ํ”„๋กœ์„ธ์Šค ์ค‘ ๋ช‡ ๊ฐœ๋ฅผ ๋๋งˆ์ณค๋Š”์ง€ ๋‚˜ํƒ€๋‚ธ๋‹ค

ํ”„๋กœ์„ธ์Šค ์ž…์žฅ

  • Turnaround time (์†Œ์š”์‹œ๊ฐ„, ๋ฐ˜ํ™˜ ์‹œ๊ฐ„)
    • CPU๋ฅผ ๋‹ค ์“ฐ๊ณ  CPU ๋ฒ„์ŠคํŠธ ๋๋‚œ ์‹œ์  - CPU ์š”์ฒญํ•œ ์‹œ์ 
    • ์ค€๋น„ํ์—์„œ ๊ธฐ๋‹ค๋ฆฐ ์‹œ๊ฐ„ + ์‹ค์ œ๋กœ cpu ์‚ฌ์šฉํ•œ ์‹œ๊ฐ„
  • Waiting time(๋Œ€๊ธฐ ์‹œ๊ฐ„)
    • CPU ๋ฒ„์ŠคํŠธ ๊ธฐ๊ฐ„์ค€ ์ค€๋น„ ํ์—์„œ ๊ธฐ๋‹ค๋ฆฐ ์‹œ๊ฐ„
  • Response time(์‘๋‹ต ์‹œ๊ฐ„)
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค€๋น„ ํ์— ๋“ค์–ด์˜จ ํ›„ ์ฒซ ๋ฒˆ์งธ cpu๋ฅผ ํš๋“ํ•˜๊ธฐ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ์‹œ๊ฐ„



Schduling Algorithm

1. FCFS (First come first served, ์„ ์ž… ์„ ์ถœ ์Šค์ผ€์ค„๋ง)
2. SJF (Shortest Job First, ์ตœ๋‹จ ์ž‘์—… ์šฐ์„  ์Šค์ผ€์ค„๋ง)
3. Priority (์šฐ์„  ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง)
4. RR (Round Robin, ๋ผ์šด๋“œ ๋กœ๋นˆ ์Šค์ผ€์ค„๋ง)
5. Multi-Level Queue (๋ฉ€ํ‹ฐ ๋ ˆ๋ฒจ ํ)
6. Multi-Level Feedback Queue(๋ฉ€ํ‹ฐ ๋ ˆ๋ฒจ ํ”ผ๋“œ๋ฐฑ ํ)
7. Multi-Processor (๋‹ค์ค‘ ์ฒ˜๋ฆฌ๊ธฐ ์Šค์ผ€์ค„๋ง)
8. Real-time (์‹ค์‹œ๊ฐ„ ์Šค์ผ€์ค„๋ง)
9. Thread (์Šค๋ ˆ๋“œ ์Šค์ผ€์ค„๋ง)

FCFS (First come first served, ์„ ์ž… ์„ ์ถœ ์Šค์ผ€์ค„๋ง)

=> ๋จผ์ € ์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ - CPU๋ฅผ ์˜ค๋ž˜ ์“ฐ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ์˜ค๋ฉด ์—„์ฒญ๋‚œ ๋น„ํšจ์œจ ๋ฐœ์ƒ (= ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์šฐ์„ ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š”์ง€์— ๋”ฐ๋ผ ๋Œ€๊ธฐ ์‹œ๊ฐ„์— ๋งŽ์€ ์˜ํ–ฅ์„ ๋ผ์นจ)

  • nonpreemptive

SJF (Shortest Job First, ์ตœ๋‹จ ์ž‘์—… ์šฐ์„  ์Šค์ผ€์ค„๋ง)

=> CPU ๋ฒ„์ŠคํŠธ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋จผ์ € CPU๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹

  • Preempive
    • SRTF (Shortest Remaining Time First) - ๊ฐ€์žฅ ๋‚จ์€ ์‹œ๊ฐ„์ด ์ ์€ ์ž‘์—… ์šฐ์„  ์‹คํ–‰
    • CPU๋ฅผ ์žก์•„๋„ ๋” ์งง์€ ํ”„๋กœ์„ธ์Šค ๋“ค์–ด์˜ค๋ฉด ์ ์œ ๊ถŒ ๋นผ์•—๊น€
  • nonpreemptive
    • ์ผ๋‹จ CPU๋ฅผ ์žก์œผ๋ฉด ๋” ์งง์€ ํ”„๋กœ์„ธ์Šค ๋“ค์–ด์™€๋„ CPU ๋ฒ„์ŠคํŠธ ๋๋‚  ๋•Œ๊นŒ์ง€ ์ ์œ ๊ถŒ ๋นผ์•—๊ธฐ์ง€ ์•Š์Œ
  • ๋ฌธ์ œ์ 
    • Starvation : ์งง์€ ํ”„๋กœ์„ธ์Šค๋กœ ์ธํ•ด ๊ธด ํ”„๋กœ์„ธ์Šค๋Š” ์˜์›ํžˆ cpu๋ฅผ ์ ์œ ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Œ
    • CPU ๋ฒ„์ŠคํŠธ ์‹œ๊ฐ„์„ ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์—†์Œ, ๊ณผ๊ฑฐ CPU ์‚ฌ์šฉ์‹œ๊ฐ„์„ ์ด์šฉํ•˜์—ฌ ์ถ”์ •

Priority (์šฐ์„  ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง)

=> ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ œ์ผ ๋†’์€ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU ํ• ๋‹น (์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ž‘์€๊ฒŒ ๋†’์€ ์šฐ์„ ๊ถŒ)

  • nonpreemptive
    • cpu๋ฅผ ์žก์œผ๋ฉด ๋” ๋†’์€ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด์™€๋„ CPU ๋ฒ„์ŠคํŠธ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ ์œ ๊ถŒ ๋นผ์•—๊ธฐ์ง€ ์•Š์Œ
  • preemptive
    • CPU๋ฅผ ์žก์•˜๋”๋ผ๋„ ๋” ๋†’์€ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์ ์œ ๊ถŒ ๋นผ์•—๊น€
  • ๋ฌธ์ œ์ 
    • Starvation : ์šฐ์„ ์ˆœ์œ„ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋Š” ์˜์›ํžˆ cpu๋ฅผ ์ฐจ์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Œ
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ
    • Aging : ์•„๋ฌด๋ฆฌ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋ผ๋„ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์šฐ์„ ์ˆœ์œ„ ๋†’์—ฌ์ฃผ๋Š” ๊ธฐ๋ฒ•

RR (Round Robin, ๋ผ์šด๋“œ ๋กœ๋นˆ ์Šค์ผ€์ค„๋ง)

=> time quantum์„ ๊ฐ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋ถ€์—ฌํ•˜์—ฌ ์ •ํ•ด์ง„ time quantum์„ ์‚ฌ์šฉํ•˜๋ฉด ready queue์— ๋’ค๋กœ ๊ฐ€์„œ ์ค„์„ ์„œ๊ณ , queue์˜ ๋งจ ์•ž๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋ฒ•

  • preemptive
    • ์ •ํ•ด์ง„ ์‹œ๊ฐ„๋งŒํผ cpu ๋ฒ„์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ ์œ ๊ถŒ์„ ๋„˜๊ฒจ์ฃผ๊ธฐ ์œ„ํ•ด ์ ์œ ๊ถŒ ๋นผ์•—๊ธฐ ๋•Œ๋ฌธ
  • ์งง์€ ์‘๋‹ต ์‹œ๊ฐ„ (๋ชจ๋“  n๊ฐœ ํ”„๋กœ์„ธ์Šค, q time, (n-1)*q ๋ฏธ๋งŒ์œผ๋กœ ๋Œ€๊ธฐ)
  • Quantum์ด ํฌ๋ฉด FCFS, Quantum์ด ์ž‘์œผ๋ฉด context switch overhead(dispatcher๋งŒ ๋ถˆ์Œํ•ด์ง)
  • Job์˜ ์ž‘์—… ์‹œ๊ฐ„์ด ๋ถ„์‚ฐ๋˜์–ด ์žˆ์œผ๋ฉด ํšจ์œจ์ , ๋ชจ๋‘ ๋™์ผํ•œ ์ž‘์—…์‹œ๊ฐ„ ๋น„ํšจ์œจ์ 

Multi-Level Queue (๋ฉ€ํ‹ฐ ๋ ˆ๋ฒจ ํ)

=> Round-robin + FCFS + priority scheduling

  • ์šฐ์„  ์ˆœ์œ„์— ๋”ฐ๋ผ ready queue ๋ถ„ํ• 
    • ์ „์œ„ํ - ๋น ๋ฅธ ์‘๋‹ต(io, RR), ํ›„์œ„ํ - ๊ณ„์‚ฐ(cpu, FCFS)
  • ๊ฐ๊ฐ์˜ ํ๋„ scheduling ํ•„์š”
    • ๊ณ ์ • ์šฐ์„  ์ˆœ์œ„ - ์ „์œ„ํ ์šฐ์„ ์ ์œผ๋กœ cpuํ• ๋‹น, ์ „์œ„ํ ๋น„๋ฉด ํ›„์œ„ํ cpu ํ• ๋‹น (starvation ์œ ๋ฐœ ๊ฐ€๋Šฅ)
    • ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค - ๊ฐ ํ์— cpu time์„ ์ •์ ˆํ•œ ๋น„์œจ๋กœ ํ• ๋‹น (8:2 = ์ „์œ„:ํ›„์œ„)

Multi-Level Feedback Queue(๋ฉ€ํ‹ฐ ๋ ˆ๋ฒจ ํ”ผ๋“œ๋ฐฑ ํ)

=> Multi-level queue + feedback ๊ธฐ๋Šฅ

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋ถ„ํ• ๋œ ready queue ๋‚ด์—์„œ ๋‹ค๋ฅธ ํ๋กœ ์ด๋™ ๊ฐ€๋Šฅ
  • aging ๊ตฌํ˜„ ๊ฐ€๋Šฅ
  • ๋ฉ€ํ‹ฐ ๋ ˆ๋ฒจ ํ”ผ๋“œ๋ฐฑ ํ ์ •์˜ํ•˜๋Š” ์š”์†Œ : ํ์˜ ์ˆ˜, ๊ฐ ํ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šน๊ฒฉ+๊ฐ•๋“ฑ ๊ธฐ์ค€, ํ”„๋กœ์„ธ์Šค ๋„์ฐฉ ์‹œ ์–ด๋А ๋ ˆ๋ฒจ๋กœ ๋“ค์–ด๊ฐˆ์ง€ ๊ฒฐ์ •

Multi-Processor (๋‹ค์ค‘ ์ฒ˜๋ฆฌ๊ธฐ ์Šค์ผ€์ค„๋ง)

=> CPU๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ฒ•

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

Real-time (์‹ค์‹œ๊ฐ„ ์Šค์ผ€์ค„๋ง)

=> deadline์ด ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์˜ cpu ์ ์œ ๊ถŒ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ๋ฒ•

  • hard real-time system
    • ์ •ํ•ด์ง„ ์‹œ๊ฐ„ ์•ˆ์— ๋ฐ˜๋“œ์‹œ ์ž‘์—…์ด ๋๋‚˜๋„๋ก ์Šค์ผ€์ค„๋งํ•ด์•ผ ํ•จ
  • soft real-time system
    • ๋ฐ๋“œ๋ผ์ธ์ด ์กด์žฌํ•˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์ง€ํ‚ค์ง€ ๋ชปํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ์œ„ํ—˜ํ•œ ์ƒํ™ฉ์ด ์ƒ๊ธฐ์ง€ ์•Š๋Š”๋‹ค. (๋‚˜์˜ ์ทจ์ค€..?)

Thread (์Šค๋ ˆ๋“œ ์Šค์ผ€์ค„๋ง)

=> thread๊ฐ„ ์ ์œ ๊ถŒ์„ ์–ด๋–ป๊ฒŒ ํ• ๋‹นํ•  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ๋ฒ•

  • local scheduling
    • ์šด์˜์ฒด์ œ ์ž…์žฅ ์Šค๋ ˆ๋“œ ์กด์žฌ ๋ชจ๋ฆ„
    • Process๊ฐ€ cpu ์ ์œ ๊ถŒ thread์—๊ฒŒ ๋ถ€์—ฌ
  • global scheduling
    • ์ปค๋„ ๋ ˆ๋ฒ  ์Šค๋ ˆ๋“œ ์ผ๋ฐ˜ ํ”„๋กœ์„ธ์Šค์ฒ˜๋Ÿผ ์ปค๋„์˜ ๋‹จ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์–ด๋–ค ์Šค๋ ˆ๋“œ๋ฅผ ์Šค์ผ€์ค„ํ•  ์ง€ ๊ฒฐ์ •