Priority Scheduling - gon2gon2/pintos-kaist GitHub Wiki

๋ฌธ์ œ

  • ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ, ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ๊ฐ€ ํ˜„์žฌ ์‹คํ–‰์ค‘์ด๋˜ ์Šค๋ ˆ๋“œ๋ณด๋‹ค ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ready_list์— ์žˆ๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ์Šค๋ ˆ๋“œ๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ, ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ lock, semaphore, or condition variable์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒฝ์šฐ, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์Šค๋ ˆ๋“œ๊ฐ€ ๊นจ์–ด๋‚˜ ์ด ํ•œ์ •๋œ ์ž์›์„ ๊ฐ–๊ฒŒ ํ•ด์•ผํ•œ๋‹ค.
  • ์–ธ์ œ๋“  ์Šค๋ ˆ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด, ์ฒดํฌํ•ด์„œ ๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•ด์•ผํ•œ๋‹ค.
  • Priority Inversion: H,M,L์„ ๊ฐ๊ฐ High, Medium, Low์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ–๋Š” ์Šค๋ ˆ๋“œ๋ผ๊ณ  ํ•˜์ž. H๊ฐ€ kernel data์— ์ฝ๊ธฐ๋‚˜ ์“ฐ๊ธฐ๋ฅผ ํ•˜๋ ค๋Š”๋ฐ L์ด ํ•ด๋‹น kernel data์— ๋Œ€ํ•œ lock์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ H๋Š” L์˜ lock_release๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š”๋ฐ, ์ด๋•Œ M์ด CPU๋ฅผ ์„ ์ ํ•˜๊ฒŒ ๋˜๋ฉด M์ด H์˜ ์Šค์ผ€์ค„๋ง์„ ๋Šฆ์ถ”๊ฒŒ ๋œ๋‹ค.

ํ•ด๊ฒฐ๋ฐฉ๋ฒ• - Priority Donation

  • ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ์Šค๋ ˆ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‚ฎ์€ ์Šค๋ ˆ๋“œ์—๊ฒŒ ๊ธฐ๋ถ€ํ•œ๋‹ค.

cases

  1. Priority Donation: H๊ฐ€ ์›ํ•˜๋Š” lock์„ ๊ฐ€์ง„ L์ด๋‚˜ M์—๊ฒŒ H์˜ priority๋ฅผ ๊ธฐ๋ถ€ํ•œ๋‹ค. L์€ ๊ธฐ๋ถ€๋ฐ›์€ ์šฐ์„ ์ˆœ์œ„๋กœ lock์— ๋Œ€ํ•œ ์ž‘์—…์„ ๋งˆ์นœ ๋‹ค์Œ, lock์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด์„œ CPU๋ฅผ ์–‘๋ณดํ•œ๋‹ค.
  2. Multiple Donation: L์ด lock A์™€ B๋ฅผ ๊ฐ–๊ณ (hold) ์žˆ๋Š” ์ƒํ™ฉ. L์€ M๊ณผ H๋กœ๋ถ€ํ„ฐ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ๊ธฐ๋ถ€๋ฐ›๋Š”๋‹ค.
  3. Nested Donation: H๋Š” M์ด ๊ฐ€์ง„ lock์„, M์€ L์ด ๊ฐ€์ง„ lock์„ ์›ํ•˜๋Š” ์ƒํ™ฉ. H์˜ ์šฐ์„ ์ˆœ์œ„๋Š” M์„ ๊ฑฐ์ณ L์—๊ฒŒ ์ „๋‹ฌ๋œ๋‹ค.