Advanced Scheduler - gon2gon2/pintos-kaist GitHub Wiki

4.4BSD scheduler์™€ ๋น„์Šทํ•œ MLFQS๋ฅผ ๊ตฌํ˜„ํ•˜๋ผ.

MLFQS

  • CPU burst๊ฐ€ ์งง์€ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ฃผ๋Š” ๋ฐฉ์‹
  • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์„์ˆ˜๋ก time quantum์ด ์ž‘๋‹ค.
  • ์งง์€ time quantum์•ˆ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค. -> CPU burst๊ฐ€ ์ž‘๋‹ค.
  • time quantum์•ˆ์— ๋ชป ๋๋ƒˆ๋‹ค. -> CPU burst๊ฐ€ ์ปค์„œ ์งง์€ ์• ๋“ค ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๊ณ  ๋‚˜์ค‘์— ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • MLFQ๋Š” ์ตœ์ดˆ์— ๋ฐฐ์ •๋œ ํ์—์„œ ์ด๋™ํ•  ์ˆ˜ ์—†์ง€๋งŒ, MLFQS๋Š” aging์ด๋‚˜ CPU burst์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฒ˜์Œ ์ƒ์„ฑ๋œ ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„์˜ ํ์— ๋ฐฐ์ •๋˜๊ณ ,
  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์ด ํ•„์š”ํ•˜๋‹ค.
    • ํ์˜ ์ˆ˜
    • ๊ฐ ํ๋งˆ๋‹ค์˜ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜(๋†’์€ ์šฐ์„ ์ˆœ์œ„๋Š” ์งง์€ time quantum์˜ RR,๊ฐ€์žฅ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋Š” FCFS)
    • ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒํ–ฅ/ํ•˜ํ–ฅ ์‹œ์ผœ์ค„ ๊ฒƒ์ธ๊ฐ€.
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ service๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์–ด๋–ค ํ์— ๋„ฃ์–ด์ค„์ง€์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•
  • ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ CPU ์Šค์ผ€์ค„๋Ÿฌ์ด์ง€๋งŒ, ์„ค์ •ํ•  ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋งŽ์•„ ๊ฐ€์žฅ ๋ณต์žกํ•˜๋‹ค.

4.4BSD scheduler

  • scheduling metrics ์ค‘ average response time ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ ์Šค์ผ€์ค„๋Ÿฌ, MLFQS๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์šฐ์„ ์ˆœ์œ„๋ณ„๋กœ ๋ ˆ๋”” ํ๊ฐ€ ์žˆ๋‹ค.

Nice

  • ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋“ค์—๊ฒŒ ์–ผ๋งˆ๋‚˜ niceํ•œ์ง€.(์‚ฌ๋ ค๊นŠ์€, ์ดํƒ€์ ์ธ, ...)
  • ๋†’์„์ˆ˜๋ก niceํ•ด์„œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—๊ฒŒ ์–‘๋ณดํ•ด์ฃผ๊ณ  ๋‚ฎ์„์ˆ˜๋ก ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ๋บ์–ด์˜ค๋ ค๊ณ  ํ•œ๋‹ค.
  • priority = PRI_MAX - (recent_cpu / 4) - (nice * 2).

Priority

  • 0~63, ํด์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค. niceํ•˜์ง€ ์•Š์„์ˆ˜๋ก, ์ตœ๊ทผ์— CPU๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„์ˆ˜๋ก ๋†’์•„์ง„๋‹ค.
  • ๊ฐ coefficient(4,2)๋Š” ํฐ ์˜๋ฏธ๋Š” ์—†๊ณ  ์ž˜ ์ž‘๋™ํ•˜๋”๋ผ.

Recent CPU

  • ์ค‘์ฒฉ๋œ ๊ณฑ์˜ ์—ฐ์‚ฐ์œผ๋กœ(๊ณฑ์„ ๋ฎ์–ด์”Œ์šฐ๋Š” ์—ฐ์‚ฐ) ๊ตฌํ•œ๋‹ค.
  • exponential weighted moving average๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ณ„์‚ฐํ•œ๋‹ค
  • ๊ณ„์ˆ˜๋ฅผ ๋จผ์ € ๊ตฌํ•˜๊ณ  recent cpu๋ฅผ ๊ณฑํ•ด์•ผ ํ•œ๋‹ค.
  • recent_cpu = (2load_avg)/(2load_avg + 1) * recent_cpu + nice.

Load AVG

  • 1๋ถ„๋™์•ˆ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•œ ์Šค๋ ˆ๋“œ์˜ํ‰๊ท  ๊ฐœ์ˆ˜
  • ์‹œ์Šคํ…œ์ด ๋ชจ๋‘ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๊ฐ€์ง(์ „์—ญ์ ์ž„)
  • load_avg = (59/60)*load_avg + (1/60)*ready_threads.

Fixed-Point Real Arithmetic(๊ณ ์ • ์†Œ์ˆ˜์  ์—ฐ์‚ฐ)

  • ๋ถ€ํ˜ธ๋น„ํŠธ, ์ •์ˆ˜๋ถ€, ์†Œ์ˆ˜๋ถ€๋กœ ๋‚˜๋ˆ ์ง„๋‹ค.
  • ์ •์ˆ˜๋ถ€์™€ ์†Œ์ˆ˜๋ถ€์˜ ๋น„ํŠธ ์ˆ˜๋Š” ์‹œ์Šคํ…œ๋งˆ๋‹ค ๋‹ฌ๋ผ์ง„๋‹ค.
  • ํ•€ํ† ์Šค์—์„œ๋Š” 1/17/14๋กœ ๋‚˜๋ˆ ์„œ ์“ด๋‹ค.
  • ์ •์ˆ˜์™€ ์‹ค์ˆ˜์˜ ํ‘œํ˜„๋ฐฉ๋ฒ•์ด ๋‹ฌ๋ผ ๋น„ํŠธ์—ฐ์‚ฐ์„ ์ด์šฉํ•ด ์Šค์ผ€์ผ์„ ๋งž์ถฐ์ค˜์•ผ ํ•œ๋‹ค.(๋ณดํ†ต ์ •์ˆ˜์— 2^14๋ฅผ ๊ณฑํ•˜๋Š” ์—ฐ์‚ฐ์„ ํ•ด์ค€๋‹ค)