Scheduling Algorithms - gon2gon2/pintos-kaist GitHub Wiki

  • CPU ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์—” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.
  • schedule metrics์ค‘ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” Task๋ฅผ ์œ„ํ•ด ์ตœ์ ํ™” ํ•  ์ง€ํ‘œ๋ฅผ ์„ ํƒํ•˜๊ณ  ๊ทธ์— ์–ด์šธ๋ฆฌ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณ ๋ฅธ๋‹ค.

1.FCFS(First-Come, First-Served) Scheduling

  • ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.(non-preemptive)
  • ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ, Average Waiting Time์ด ๊ธธ๋‹ค.
  • Convoy Effect: CPU๋ฅผ ์˜ค๋ž˜ ์‚ฌ์šฉํ•˜๋Š” job๋•Œ๋ฌธ์— ์‚ฌ์šฉ ์‹œ๊ฐ„์ด ์งง์€ job์ด ์ž‘์—…์„ ๋ชปํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ˜„์ƒ
  • context switching overhead๊ฐ€ ์ ์–ด CPU utilization์ด ์ข‹๋‹ค.

2.SJF(Shortest Job First) Scheduling

  • ๊ฐ€์žฅ ์งง์€ CPU burst๋ฅผ ๊ฐ€์ง„ job๋ถ€ํ„ฐ ์Šค์ผ€์ค„๋ง ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ ์˜ waiting time์„ ๋‚ธ๋‹ค.
  • non-preemptive์™€ preemptive ๋‘˜ ๋‹ค ๊ฐ€๋Šฅํ•˜๋‹ค. preemptive ๋ฐฉ์‹์€ ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ๋‚จ์€ cpu burst๋ณด๋‹ค ๋” ์งง์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ready queue์— ๋„์ฐฉํ–ˆ์„ ๋•Œ, ๋” ์งง์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ job์ด ์–ด๋А์ •๋„์˜ CPU burst๋ฅผ ๊ฐ€์งˆ ์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์‹ค์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋‹ค์Œ ์š”์ฒญ์€ ์ด์ „ ์š”์ฒญ๊ณผ ์œ ์‚ฌํ•  ๊ฒƒ์ด๋ผ๋Š” ๊ฐ€์ •ํ•˜์— exponential average๋ฅผ ์‚ฌ์šฉํ•ด ๊ทผ์‚ฌ์น˜๋ฅผ ์˜ˆ์ธกํ•œ๋‹ค.

3.RR(Round-Robin) Scheduling

  • FCFS์™€ ๋น„์Šทํ•˜์ง€๋งŒ ํ”„๋กœ์„ธ์Šค๊ฐ„์˜ ์Šค์œ„์น˜๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋„๋ก preemption์ด ์ถ”๊ฐ€๋๋‹ค.
  • Time Slice ํ˜น์€ Time Quantum์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์ž‘์€ ๋‹จ์œ„์‹œ๊ฐ„ ๋™์•ˆ ready queue์˜ ๋งจ ์•ž์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์‹œ๊ฐ„์•ˆ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค๋ฉด CPU๋ฅผ ์ž์ง„ํ•ด์„œ ๋ฐ˜๋‚ฉํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ready queue๋งจ ๋’ค์— insertํ•œ ๋‹ค์Œ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  • RR์˜ ์„ฑ๋Šฅ์€ time quantum์— ๊ฐ•ํ•˜๊ฒŒ ์˜์กด์ ์ด๋‹ค. ๋„ˆ๋ฌด ํฌ๋ฉด FCFS ๋ฐฉ์‹์ด ๋˜๊ณ , ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด context switching overhead๊ฐ€ ์ปค์ง„๋‹ค.
  • ๋Œ€๋ถ€๋ถ„ ํ˜„๋Œ€ ์‹œ์Šคํ…œ์—์„œ๋Š” time quantum์„ 10~100 milliseconds ์‚ฌ์ด๋กœ ์„ค์ •ํ•œ๋‹ค.
  • response time์ด ์งง์•„์ง€๋Š” ์žฅ์ ์ด ์žˆ์–ด ์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ, ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์‹œ์Šคํ…œ์— ์ ํ•ฉํ•˜๋‹ค.

4.Priority Scheduling

  • ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU๊ฐ€ ํ• ๋‹น๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ๋™์ผํ•œ ์šฐ์„ ์ˆœ์œ„ ๊ฐ„์—๋Š” FCFS๋กœ ์ˆ˜ํ–‰๋œ๋‹ค.
  • ์šฐ์„ ์ˆœ์œ„์˜ ๋ฒ”์œ„๋Š” 07, 04095๋“ฑ ๋‹ค์–‘ํ•˜๊ฒŒ ์„ค์ •๋  ์ˆ˜ ์žˆ๊ณ , 0์„ ๋†’์€ ํ˜น์€ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋กœ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • non-preemptive, preemptive ๋‘˜ ๋‹ค ๊ฐ€๋Šฅํ•˜๋‹ค. ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ํ”„๋กœ์„ธ์Šค์™€ ์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋น„๊ตํ•˜๊ณ , ๋†’์€ ํ”„๋กœ์„ธ์Šค๋กœ context switchingํ•ด์ฃผ๋ฉด preemptive ๋ฐฉ์‹์ด๋‹ค.
  • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋Š” ํ‰์ƒ(๋˜๋Š” ๋งค์šฐ ์˜ค๋žœ ์‹œ๊ฐ„) ๋Œ€๊ธฐํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ indefinit blocking ๋˜๋Š” aging์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆฐ ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์˜ฌ๋ ค์ฃผ๋Š” aging์„ ๋„์ž…ํ•˜๊ฑฐ๋‚˜, round-robin๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • (SJF ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ Priority Scheduling์˜ ํŠน์ˆ˜ํ•œ ๋ฒ„์ „์ด๋‹ค.)

5.MLQ(Multi-Level Queue) Scheduling

  • Priority๋‚˜ RR ๋ฐฉ์‹์˜ ๋ฌธ์ œ๋Š” ๋ชจ๋“  ready์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ•˜๋‚˜์˜ ready queue์—๋งŒ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ์˜ ๊ด€๋ฆฌ๋ฐฉ์‹์— ๋”ฐ๋ผ ์‹คํ–‰์‹œํ‚ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ํƒ์ƒ‰ํ•˜๋Š”๋ฐ ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.
  • MLQ๋Š” ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ํ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋‚˜๋ˆ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๊ณ , ๊ฐ ํ์— ๋Œ€ํ•ด์„œ RR ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž˜ ์ž‘๋™ํ•œ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค๋Š” ์ฒ˜์Œ ๋ฐฐ์ •๋œ ํ๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ๋ชปํ•œ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค์˜ ํƒ€์ž…(real-time, interactive, system, batch)์— ๋”ฐ๋ผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

6.MLFQ(Multi-Level Feedback Queue) Scheduling

  • MLQ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ฒ˜์Œ ๋ฐฐ์ •๋œ ํ๋ฅผ ๋ฒ—์–ด๋‚  ์ˆ˜ ์—†๋‹ค๋Š” ํ•œ๊ณ„ ๋•Œ๋ฌธ์— ์Šค์ผ€์ค„๋ง ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์œ ์—ฐํ•œ ๋Œ€์ฒ˜๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

  • MLFQ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์˜ CPU bursts์— ๋”ฐ๋ผ ํ ์‚ฌ์ด๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • CPU burst๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋“ค(I/O bound, interactive)์ด๋‚˜ ์˜ค๋ž˜ ๋Œ€๊ธฐํ•œ ํ”„๋กœ์„ธ์Šค๋“ค์€ high priority queue์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.

  • ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„์˜ ํ์— ๋“ค์–ด์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋“ค์˜ ํ๊ฐ€ ๋ชจ๋‘ ๋น„์—ˆ์„ ๋•Œ๋งŒ ์‹คํ–‰๊ฐ€๋Šฅํ•˜๋‹ค.

  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์ด ํ•„์š”ํ•˜๋‹ค.

    • ํ์˜ ์ˆ˜
    • ๊ฐ ํ๋งˆ๋‹ค์˜ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜(๋†’์€ ์šฐ์„ ์ˆœ์œ„๋Š” ์งง์€ time quantum์˜ RR,๊ฐ€์žฅ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋Š” FCFS)
    • ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒํ–ฅ/ํ•˜ํ–ฅ ์‹œ์ผœ์ค„ ๊ฒƒ์ธ๊ฐ€.
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ service๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์–ด๋–ค ํ์— ๋„ฃ์–ด์ค„์ง€์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•
  • ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ CPU ์Šค์ผ€์ค„๋Ÿฌ์ด์ง€๋งŒ, ์„ค์ •ํ•  ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋งŽ์•„ ๊ฐ€์žฅ ๋ณต์žกํ•˜๋‹ค.