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

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

[์šด์˜์ฒด์ œ] CPU ์Šค์ผ€์ค„๋ง

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

CPU ์Šค์ผ€์ค„๋ง์ด๋ž€?

๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” CPU๋ฅผ ํ•„์š”๋กœ ํ•˜๊ณ , ๋จผ์ € CPU๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์–ด ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋กœ์„ธ์Šค๋“ค์—๊ฒŒ ๊ณต์ •ํ•˜๊ณ  ํ•ฉ๋ฆฌ์ ์œผ๋กœ CPU ์ž์›์„ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด ์šด์˜์ฒด์ œ๋Š” ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์— CPU๋ฅผ ํ• ๋‹นํ• ์ง€, ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์šด์˜์ฒด์ œ๊ฐ€ ํ”„๋กœ์„ธ์Šค๋“ค์—๊ฒŒ ๊ณต์ •ํ•˜๊ณ  ํ•ฉ๋ฆฌ์ ์œผ๋กœ CPU ์ž์›์„ ๋ฐฐ๋ถ„ํ•˜๋Š” ๊ฒƒ์„ CPU ์Šค์ผ€์ค„๋ง(CPU Scheduling)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ๋‹จ๊ณ„ (CPU and I/O Bursts)

ํ•ฉ๋ฆฌ์ ์ด๊ณ  ํšจ์œจ์ ์ธ CPU ์ž์› ๋ฐฐ๋ถ„์„ ์œ„ํ•ด ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU๋ฅผ ๋จผ์ € ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„์ง€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋ฉฐ ์‹คํ–‰๋˜๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณด์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์„ธ์Šค๋“ค์€ CPU์™€ ์ž…์ถœ๋ ฅ์žฅ์น˜๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ฉฐ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค(= ํ”„๋กœ๊ทธ๋žจ)๋Š” ๋Œ€๋ถ€๋ถ„ ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด CPU ์‚ฌ์šฉ, I/O ์žฅ์น˜ ์‚ฌ์šฉ์˜ ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

  • CPU Burst: CPU๋งŒ ์—ฐ์†์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ instruction์„ ์‹คํ–‰ํ•˜๋Š” ๋‹จ๊ณ„
  • I/O Burst: I/O๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ๋‹จ๊ณ„

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์€ CPU Burst์™€ I/O Burst๊ฐ€ ๋ฐ˜๋ณต๋˜๋ฉฐ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ, ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๊ฐ๊ฐ์˜ ๋นˆ๋„๋‚˜ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค CPU, I/O ์žฅ์น˜ ์ด์šฉ ์‹œ๊ฐ„ ์ฐจ์ด๊ฐ€ ์žˆ์Œ)

 

  • CPU bound process: CPU๋ฅผ ์ด์šฉํ•˜๋Š” ์‹œ๊ฐ„์ด ์ƒ๋Œ€์ ์œผ๋กœ ๊ธด ๊ณ„์‚ฐ ์œ„์ฃผ์˜ ์ž‘์—…์„ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค
  • I/O bound process: CPU๋ฅผ ์žก๊ณ  ๊ณ„์‚ฐํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ์ž…์ถœ๋ ฅ ์ž‘์—…์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ํ”„๋กœ์„ธ์Šค

CPU-burst Time์˜ ๋ถ„ํฌ

์œ„์˜ ๊ทธ๋ž˜ํ”„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, I/O bound process์˜ ๊ฒฝ์šฐ์—๋Š” CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๊ฐ„์€ ์งง์ง€๋งŒ CPU๋ฅผ ์žก๋Š” ๋นˆ๋„๊ฐ€ ๋†’์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด, CPU bound process์˜ ๊ฒฝ์šฐ CPU๋ฅผ ํ•œ ๋ฒˆ ์žก์œผ๋ฉด ์‚ฌ์šฉ์‹œ๊ฐ„์ด ๊ธธ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋‹ค๋ฅธ ํŠน์„ฑ์„ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„ž์—ฌ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— CPU์™€ I/O ์žฅ์น˜ ๋“ฑ ์‹œ์Šคํ…œ ์ž์›์„ ๊ณจ๊ณ ๋ฃจ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด CPU ์Šค์ผ€์ค„๋ง์ด ํ•„์š”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

CPU Scheduler & Dispatcher

CPU Scheduler

  • Ready ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค ์ค‘์—์„œ ์ด๋ฒˆ์— CPU๋ฅผ ์ค„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณ ๋ฆ„
  • CPU๋ฅผ ํ• ๋‹นํ•  ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์šด์˜์ฒด์ œ ์ฝ”๋“œ๋กœ, ๋ณ„๋„์˜ ํ•˜๋“œ์›จ์–ด๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์•„๋‹˜

Dispatcher

  • CPU์˜ ์ œ์–ด๊ถŒ์„ CPU Scheduler์— ์˜ํ•ด ์„ ํƒ๋œ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์‹ค์ œ๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ณผ์ •์„ ๋‹ด๋‹นํ•˜๋Š” ์ฝ”๋“œ
  • ์ด ๊ณผ์ •์„ ๋ฌธ๋งฅ ๊ตํ™˜(context switch)์ด๋ผ๊ณ  ํ•จ

CPU ์Šค์ผ€์ค„๋ง์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ

1. Running -> Blocked (ex. I/O ์š”์ฒญ ์‹œ์Šคํ…œ ์ฝœ) 

2. Running -> Ready (ex. timer ์ธํ„ฐ๋ŸฝํŠธ (=ํ• ๋‹น ์‹œ๊ฐ„ ๋งŒ๋ฃŒ)) 

3. Blocked -> Ready (ex. I/O ์™„๋ฃŒ ํ›„ ์ธํ„ฐ๋ŸฝํŠธ)

4. Terminate - nonpreemptive (์ž์ง„ ๋ฐ˜๋‚ฉ)

 

CPU ์Šค์ผ€์ค„๋ง์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์ง„ ๋ฐ˜๋‚ฉํ•œ ๊ฒฝ์šฐ(nonpreemptive, ๋น„์„ ์ ํ˜•)์™€ ๊ฐ•์ œ๋กœ ๋นผ์•—์•„์„œ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ์ค˜์•ผํ•˜๋Š” ๊ฒฝ์šฐ(preemptive, ์„ ์ ํ˜•)๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

1, 4 ์—์„œ์˜ ์Šค์ผ€์ค„๋ง์€ nonpreemptive, ๋‚˜๋จธ์ง€ ๊ฒฝ์šฐ preemptive

์Šค์ผ€์ค„๋ง ์„ฑ๋Šฅ ์ฒ™๋„

1. ์‹œ์Šคํ…œ ์ž…์žฅ์—์„œ์˜ ์„ฑ๋Šฅ ์ฒ™๋„ - CPU๊ฐ€ ์ผ์„ ๋งŽ์ด ํ•˜๋ฉด ํ•  ์ˆ˜๋ก ์„ฑ๋Šฅ์ด ๋†’์€ ๊ฒƒ

  • CPU utilization (์ด์šฉ๋ฅ ): CPU๊ฐ€ ์ผ์„ ํ•œ ์‹œ๊ฐ„ / ์ „์ฒด ์‹œ๊ฐ„
  • Throughput (์ฒ˜๋ฆฌ๋Ÿ‰): ์ฃผ์–ด์ง„ ์‹œ๊ฐ„ ์•ˆ์— ๋ช‡ ๊ฐœ์˜ ์ผ(process)๋ฅผ ์ฒ˜๋ฆฌํ–ˆ๋Š”๊ฐ€ 

2. ํ”„๋กœ๊ทธ๋žจ ์ž…์žฅ์—์„œ์˜ ์„ฑ๋Šฅ ์ฒ™๋„ - CPU๋ฅผ ์–ป์–ด์„œ ์ž‘์—…์„ ๋นจ๋ฆฌ ๋๋‚ผ์ˆ˜๋ก ์„ฑ๋Šฅ์ด ๋†’์€ ๊ฒƒ

  • Turnaround time(์†Œ์š”์‹œ๊ฐ„, ๋ฐ˜ํ™˜์‹œ๊ฐ„): CPU๋ฅผ ์–ป์–ด์„œ ์“ฐ๊ณ  ๋น ์ ธ๋‚˜๊ฐˆ ๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฐ ์ด ์‹œ๊ฐ„ (๋Œ€๊ธฐ์‹œ๊ฐ„ + CPU์‚ฌ์šฉ ์‹œ๊ฐ„ ์ดํ•ฉ)
  • Waiting time (๋Œ€๊ธฐ ์‹œ๊ฐ„): ready queue์—์„œ ๊ธฐ๋‹ค๋ฆฐ ์‹œ๊ฐ„์˜ ์ดํ•ฉ(ํ•œ ๋ฒˆ์˜ burst ์—๋„ ์–ป์—ˆ๋‹ค ๋นผ์•—๊ฒผ๋‹ค ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ˜๋ณต ๋  ์ˆ˜ ์žˆ์Œ)
  • Response time (์‘๋‹ต ์‹œ๊ฐ„): ์ตœ์ดˆ๋กœ CPU๋ฅผ ์–ป๊ธฐ ๊นŒ์ง€ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„

CPU ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜

FCFS (First-Come First-Served)

๋‹จ์ˆœํžˆ ready queue์— ์‚ฝ์ž…๋œ ์ˆœ์„œ๋Œ€๋กœ ํ”„๋กœ์„ธ์Šค๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ฆ‰, CPU๋ฅผ ๋จผ์ € ์š”์ฒญํ•œ ํ”„๋กœ์„ธ์Šค๋ถ€ํ„ฐ CPU ํ• ๋‹นํ•˜๋Š” ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์ด๋ฏ€๋กœ ๊ณต์ •ํ•ด๋ณด์ด๊ธด ํ•˜์ง€๋งŒ ํšจ์œจ์„ฑ์ด ๋†’์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

 

๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € ์„ ์ ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…์ด ์˜ค๋ž˜๊ฑธ๋ฆด ๊ฒฝ์šฐ, ๋’ค์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์€ ์ž‘์—…์‹œ๊ฐ„์ด ์งง๋”๋ผ๋„ ์„ ์ ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ํšจ์œจ์„ฑ์ด ๋‚ฎ์•„์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์œ„์˜ ๊ทธ๋ฆผ์—์„œ ๋จผ์ € ์„ ์ ํ•œ P1์ด 24์ดˆ ๋™์•ˆ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋’ค์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์€ ๊ณ ์ž‘ 3์ดˆ๊ฐ„ CPU๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ๊ฐ 24์ดˆ, 27์ดˆ๋™์•ˆ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋˜๋ฏ€๋กœ ํ‰๊ท  ๋Œ€๊ธฐ์‹œ๊ฐ„(waiting time)์€ 17์ดˆ((0 + 24 + 27) / 3 = 17)๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. 

์ด ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ๋จผ์ € ๋„์ฐฉํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๋ฒ„์ŠคํŠธ ์‹œ๊ฐ„์ด ๋งค์šฐ ๊ธธ์–ด ๊ทธ ๋‹ค์Œ ๋„์ฐฉํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งค์šฐ ๊ธด ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋˜๋Š” ๊ฒƒ์„ convoy effect(ํ˜ธ์œ„ ํšจ๊ณผ) ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

SJF (Shortest-Job-First)

ready queue์— ์‚ฝ์ž…๋œ ํ”„๋กœ์„ธ์Šค๋“ค ์ค‘ CPU ์ด์šฉ ์‹œ๊ฐ„์˜ ๊ธธ์ด๊ฐ€ ๊ฐ€์žฅ ์งง์€ ํ”„๋กœ์„ธ์Šค๋ถ€ํ„ฐ ์‹คํ–‰ํ•˜๋Š” ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

SJF์—๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. (๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ถ„๋ฅ˜๋˜๊ธด ํ•จ)

 

Nonpreemptive(๋น„์„ ์ ํ˜•)

  • ์ผ๋‹จ CPU๋ฅผ ์žก์œผ๋ฉด ์ด๋ฒˆ CPU burst๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ CPU๋ฅผ ์„ ์  ๋‹นํ•˜์ง€ ์•Š์Œ

Preemptive(์„ ์ ํ˜•)

  • ํ˜„์žฌ ์ˆ˜ํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ๋‚จ์€ burst time๋ณด๋‹ค ๋” ์งง์€ CPU burst time์„ ๊ฐ€์ง€๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•˜๋ฉด CPU๋ฅผ ๋นผ์•—๊น€
  • ์ด ๋ฐฉ๋ฒ•์„ Shortest-Remaining-Time-First(SRTF)์ด๋ผ๊ณ ๋„ ๋ถ€๋ฆ„
  • ๊ฐ€์žฅ ์งง์€ ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„(waiting time)์„ ๋ณด์žฅ

Nonpreemptive vs. Preemptive

Process Arrival Time Burst Time
P1 0.0 7
P2 2.0 4
P3 4.0 1
P4 5.0 4

SJF (Nonpreemptive)

 

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ๋‹ค ์‚ฌ์šฉํ•˜๊ณ  ๋‚˜๊ฐ€๋Š” ์‹œ์ ์— ์Šค์ผ€์ค„๋ง์„ ๊ฒฐ์ •
  • ๋„์ฐฉ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ๋น ๋ฅธ P1์ด ๊ฐ€์žฅ ๋จผ์ € CPU ์„ ์ 
  • P1์˜ ์ž‘์—…์ด ๋๋‚˜๋Š” ์‹œ์ ์— P2, P3, P4 ๊ฐ€ ๋ชจ๋‘ ๋„์ฐฉํ•ด์žˆ์œผ๋ฏ€๋กœ ๊ทธ ์ค‘ CPU ์ด์šฉ์‹œ๊ฐ„ ๊ฐ€์žฅ ์งง์€ P3 ๋จผ์ € ์‹คํ–‰
  • ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„: (0 + 6 + 3 + 7) / 4 = 4

SRTF (Preemptive)

 

  • ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•  ๋•Œ ๋งˆ๋‹ค ์ƒˆ๋กœ ์Šค์ผ€์ค„๋ง
  • ๊ฐ€์žฅ ๋จผ์ € ๋„์ฐฉํ•œ P1์˜ ์ž‘์—…์ด ๋๋‚˜๊ธฐ ์ „์— CPU ์ด์šฉ์‹œ๊ฐ„์ด ๋” ์งง์€ P2๊ฐ€ ๋„์ฐฉํ•˜๋ฉด P1์—๊ฒŒ์„œ CPU๋ฅผ ๋นผ์•—์•„ P2์— ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ P4์˜ ์ž‘์—…๊นŒ์ง€ ๋๋‚˜๋Š” ๋™์•ˆ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฒˆ๊ฐˆ์•„์„œ CPU๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋จ
  • ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„: (9 + 1 + 0 + 2) / 4 = 3
  • ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์จ๋„ SRTF(= preemptive SJF) ๋ณด๋‹ค ์งง์€ waiting time์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ (ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์งง์Œ)

SJF์˜ ๋‹จ์ 

1. starvation (๊ธฐ์•„ ํ˜„์ƒ)

๊ทน๋‹จ์ ์œผ๋กœ CPU ์‚ฌ์šฉ์‹œ๊ฐ„์ด ์งง์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํ˜ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜์›ํžˆ CPU๋ฅผ ํ• ๋‹น๋ฐ›์ง€ ๋ชปํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CPU ์ด์šฉ ์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค๊ฐ€ ready queue์— ํ•˜๋‚˜ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ CPU ์ด์šฉ ์‹œ๊ฐ„์ด ์งง์€ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๊ณ„์†ํ•ด์„œ ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋ฉด ๊ธด ํ”„๋กœ์„ธ์Šค๋Š” ์˜์›ํžˆ ์‹คํ–‰๋˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

2. CPU ์‚ฌ์šฉ์‹œ๊ฐ„์„ ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์—†๋‹ค.

SJF๋Š” CPU burst time์ด ์งง์€ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋จผ์ € CPU๋ฅผ ํ• ๋‹นํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๋‹ค์Œ ์‹คํ–‰ํ•  ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ OS๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์–ผ๋งˆ๋‚˜ ์‚ฌ์šฉํ• ์ง€ ์ •ํ™•ํžˆ ์•Œ ์ˆ˜ ์—†๊ณ , ๊ณผ๊ฑฐ์˜ CPU burst time์„ ํ†ตํ•ด ์˜ˆ์ธกํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ์‚ฌ์šฉ์‹œ๊ฐ„๊ณผ ์ฐจ์ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋จผ์ € CPU๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„์˜ ๊ธฐ์ค€์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— SJF๋„ ์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๊ธฐ์ค€: CPU ์ด์šฉ ์‹œ๊ฐ„์ด ์งง์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋†’์€ ์šฐ์„ ์ˆœ์œ„)

์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง์—๋„ ๋น„์„ ์ ํ˜•, ์„ ์ ํ˜•(์šฐ์„ ์ˆœ์œ„ ๋†’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด์˜ค๋ฉด CPU ๋นผ์•—๊น€) ์ด๋ ‡๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

๋˜ํ•œ, starvation(๊ธฐ์•„ ํ˜„์ƒ)์ด๋ผ๋Š” ๋ฌธ์ œ์ ์ด ์กด์žฌ(์šฐ์„ ์ˆœ์œ„ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜์›ํžˆ CPU๋ฅผ ํ• ๋‹น ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Œ)ํ•˜๋Š”๋ฐ, ์ด๋Š” ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ์ฐจ๋ณ„๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ ์•„๋ฌด๋ฆฌ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋ผ ํ•˜๋”๋ผ๋„ ์ง€๋‚˜์น˜๊ฒŒ ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋˜๋ฉด ์šฐ์„ ์ˆœ์œ„ ๋†’์—ฌ์ฃผ๋Š” aging์œผ๋กœ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

RR(Round Robin)

FCFS์— ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค๋ผ๋Š” ๊ฐœ๋…์ด ๋”ํ•ด์ง„ ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค: ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ •ํ•ด์ง„ ์‹œ๊ฐ„

์ฆ‰, Round Robin ์Šค์ผ€์ค„๋ง์€ ์ •ํ•ด์ง„ ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค๋งŒํผ์˜ ์‹œ๊ฐ„ ๋™์•ˆ ๋Œ์•„๊ฐ€๋ฉฐ CPU๋ฅผ ์ด์šฉํ•˜๋Š” ์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง์ž…๋‹ˆ๋‹ค.

ํ˜„๋Œ€์ ์ธ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” CPU ์Šค์ผ€์ค„๋ง์€ ๋ผ์šด๋“œ ๋กœ๋นˆ์— ๊ธฐ๋ฐ˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋™์ผํ•œ ํฌ๊ธฐ์˜ ํ• ๋‹น ์‹œ๊ฐ„(time quantum)์„ ๊ฐ€์ง (์ผ๋ฐ˜์ ์œผ๋กœ 10-100 milliseconds)
  • ํ• ๋‹น ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ํ”„๋กœ์„ธ์Šค๋Š” ์„ ์ ๋‹นํ•˜๊ณ  ready queue์˜ ์ œ์ผ ๋’ค์— ๊ฐ€์„œ ๋‹ค์‹œ ์ค„์„ ์„œ๊ฒŒ ๋จ
  • ํ• ๋‹น ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๋ฉด FCFS์™€ ๋™์ผํ•ด์ง
  • ํ• ๋‹น ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์งง๋‹ค๋ฉด context switching์ด ๋นˆ๋ฒˆํ•ด์ ธ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ปค์ง

Round Robin

 

์ผ๋ฐ˜์ ์œผ๋กœ SJF๋ณด๋‹ค ํ‰๊ท  ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ๊ธธ์ง€๋งŒ ์‘๋‹ต์‹œ๊ฐ„(response time)์€ ๋” ์งง์Šต๋‹ˆ๋‹ค.

RR์˜ ์žฅ์ 

1. ์‘๋‹ต์‹œ๊ฐ„(CPU๋ฅผ ์ตœ์ดˆ๋กœ ์–ป๊ธฐ ๊นŒ์ง€์˜ ์‹œ๊ฐ„)์ด ๋นจ๋ผ์ง„๋‹ค.

n๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ready queue์— ์žˆ๊ณ  ํ• ๋‹น ์‹œ๊ฐ„์ด q time unit์ธ ๊ฒฝ์šฐ, ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์ตœ๋Œ€ q time unit ๋‹จ์œ„๋กœ CPU ์‹œ๊ฐ„์˜ 1/n์„ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋„ (n-1)q time unit ์ด์ƒ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

2. CPU ์‚ฌ์šฉ์‹œ๊ฐ„ ์˜ˆ์ธก์ด ํ•„์š”์—†๋‹ค.

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

 

3. waiting time์ด burst time์— ๋น„๋ก€ํ•ด์„œ ๊ธธ์–ด์ง„๋‹ค. (๊ณต์ •์„ฑ)

CPU ์‚ฌ์šฉ์‹œ๊ฐ„์ด ์งง์€ ํ”„๋กœ์„ธ์Šค๋Š” ํ• ๋‹น ์‹œ๊ฐ„ ์•ˆ์— CPU๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋นจ๋ฆฌ ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ƒ๋Œ€์ ์œผ๋กœ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์งง์•„์ง€๊ธฐ ๋•Œ๋ฌธ์— waiting time์ด CPU ์‚ฌ์šฉ์‹œ๊ฐ„์— ๋น„๋ก€ํ•ด์ ธ ๊ณต์ •ํ•œ ๋ฐฉ์‹์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Multilevel Queue

์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง์˜ ๋ฐœ์ „๋œ ํ˜•ํƒœ๋กœ, ์šฐ์„ ์ˆœ์œ„๋ณ„๋กœ ready queue๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

CPU๋Š” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ๋ถ€ํ„ฐ ์Šค์ผ€์ค„๋งํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

Multilevel Queue

  • Ready Queue ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋ถ„ํ•  - ํ”„๋กœ์„ธ์Šค ์œ ํ˜•๋ณ„๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•ด์ง 
    • foreground : interactive
    • background : batch - no human interaction 
  • ๊ฐ ํ๋Š” ๋…๋ฆฝ์ ์ธ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐ€์ง(๊ฐ ํ์— ๋งž๋Š” ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹)
    • foreground : RR
    • background : FCFS
  • ํ์— ๋Œ€ํ•œ ์Šค์ผ€์ค„๋ง ํ•„์š”
    • Fixed priority scehduling
      • ex) background๋ณด๋‹ค forground ๋จผ์ €
      • starvation ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ (์šฐ์„  ์ˆœ์œ„ ๋‚ฎ์€ ํ๋Š” ์˜์›ํžˆ CPU ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์—†์„์ˆ˜๋„)
    • Time slice
      • ๊ฐ ํ์— CPU Time ์„ ์ ์ ˆํ•œ ๋น„์œจ๋กœ ํ• ๋‹น
      • ex) 80% foreground in RR, 20% background in FCFS

Multilevel Feedback Queue

Multilevel Queue ๋ฐฉ์‹์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ ์‚ฌ์ด๋ฅผ ์ด๋™ํ•  ์ˆ˜  ์—†๊ธฐ ๋•Œ๋ฌธ์— ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋Š” CPU ํ• ๋‹น์ด ๊ณ„์† ์—ฐ๊ธฐ๋˜์–ด ์˜์›ํžˆ ํ• ๋‹น ๋ฐ›์ง€ ๋ชปํ•˜๋Š” starvation(๊ธฐ์•„ ํ˜„์ƒ)์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ๋ณด์™„ํ•œ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด Multilevel Feedback Queue์ž…๋‹ˆ๋‹ค.

 

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ๋กœ ์ด๋™ ๊ฐ€๋Šฅ
  • aging ๊ธฐ๋ฒ•์„ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ stavation ์˜ˆ๋ฐฉ
  • ๊ณ ๋ ค์‚ฌํ•ญ
    • Queue ์˜ ์ˆ˜
    • ๊ฐ ํ์˜ schedhuling algorithm
    • Process๋ฅผ ์ƒ์œ„ ํ๋กœ ๋ณด๋‚ด๋Š” ๊ธฐ์ค€
    • Process๋ฅผ ํ•˜์œ„ ํ๋กœ ์ซ“์•„๋‚ด๋Š” ๊ธฐ์ค€
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU ์„œ๋น„์Šค๋ฅผ ๋ฐ›์œผ๋ ค๊ณ  ํ•  ๋•Œ ๋“ค์–ด๊ฐˆ ํ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ์ค€

Multilevel Feedback Queue

 

Multilevel Feedback Queue ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ์ƒˆ๋กœ ready ์ƒํƒœ๊ฐ€ ๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ์šฐ์„  ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ํ์— ์‚ฝ์ž…๋˜๊ณ  ์ผ์ •์‹œ๊ฐ„(time quantum)๋™์•ˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ํ์—๊ฒŒ๋Š” time quantum ์งง๊ฒŒ ํ• ๋‹นํ•˜๊ณ , ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ์ผ์ˆ˜๋ก ๊ธด time quantum์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ํ๋Š” FCFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ์˜ ํ• ๋‹น ์‹œ๊ฐ„์ด ๋งŒ๋ฃŒ๋˜๋ฉด ์‹คํ–‰์ด ๋๋‚˜์ง€ ์•Š์€ ํ”„๋กœ์„ธ์Šค๋Š” ์•„๋ž˜ ํ๋กœ ๊ฐ•๋“ฑ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์šด์˜๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— CPU ์ด์šฉ์‹œ๊ฐ„์ด ์งง์€ ํ”„๋กœ์„ธ์Šค๋Š” ์งง์€ ์‹œ๊ฐ„์•ˆ์— ํ๋ฅผ ๋น ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ , CPU ์ด์šฉ์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค๋Š” ์•„๋ž˜ ํ๋กœ ์ด๋™ํ•˜๋ฉด์„œ ์ ์  ๋” ๊ธด ํ• ๋‹น์‹œ๊ฐ„์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, CPU ์‚ฌ์šฉ์‹œ๊ฐ„์ด ์งง์€ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, ์œ„์˜ ํ๊ฐ€ ๋น„์–ด์žˆ์„ ๋•Œ๋งŒ ์•„๋ž˜ ํ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ๋จผ์ € ๋„์ฐฉํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ๋นจ๋ฆฌ ์ฒ˜๋ฆฌ๋˜์ง€๋งŒ ์ดํ›„์— ๋“ค์–ด์˜จ ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์œ„์˜ ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.