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
- Priority Donation: H๊ฐ ์ํ๋ lock์ ๊ฐ์ง L์ด๋ M์๊ฒ H์ priority๋ฅผ ๊ธฐ๋ถํ๋ค. L์ ๊ธฐ๋ถ๋ฐ์ ์ฐ์ ์์๋ก lock์ ๋ํ ์์
์ ๋ง์น ๋ค์, lock์ ๋ฐํํ๋ฉด์ CPU๋ฅผ ์๋ณดํ๋ค.
- Multiple Donation: L์ด lock A์ B๋ฅผ ๊ฐ๊ณ (hold) ์๋ ์ํฉ. L์ M๊ณผ H๋ก๋ถํฐ ์ฐ์ ์์๋ฅผ ์ฌ๋ฌ๋ฒ ๊ธฐ๋ถ๋ฐ๋๋ค.
- Nested Donation: H๋ M์ด ๊ฐ์ง lock์, M์ L์ด ๊ฐ์ง lock์ ์ํ๋ ์ํฉ. H์ ์ฐ์ ์์๋ M์ ๊ฑฐ์ณ L์๊ฒ ์ ๋ฌ๋๋ค.