8.0 ์ค์ผ์ค๋ง : ๋ฉํฐ ๋ ๋ฒจ ํผ๋๋ฐฑ ํ
- MLFQ๊ฐ ํด๊ฒฐํ๋ ค๊ณ ํ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ ๋ ๋ ๊ฐ์ง ์ด๋ค.
- ์งง์ ์์ ์ ๋จผ์ ์คํ์์ผ ๋ฐํ ์๊ฐ์ ์ต์ ํ ํ๋ ๊ฒ.
- ๋ํํ ์ฌ์ฉ์์๊ฒ ๋น ๋ฅธ ์์คํ ์ด๋ผ๋ ๋๋์ ์ฃผ๊ธฐ ์ํด์ ์๋ต ์๊ฐ์ ์ต์ ํ ํ๋ ๊ฒ.
-
์ด ๊ณผ์ ์์ ํด๊ฒฐํด์ผ ํ๋ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ๋ค. “์ฐ๋ฆฌ๊ฐ ํ๋ก์ธ์ค์ ๋ํ ์ ๋ณด๊ฐ ์๋ค๋ฉด ์ด๋ฌํ ์ค์ผ์ค๋ฌ๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํ ์ ์์๊น?”
-
์์ ๋ฌธ์ ๋ ์ด ์ฅ์ ํต์ฌ ์ง๋ฌธ์ผ๋ก ์ด์ด์ง๋ค.
8.1 MLFQ: ๊ธฐ๋ณธ ๊ท์น
-
MLFQ๋ ์ฌ๋ฌ๊ฐ์ ํ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ๊ฐ ๋ค๋ฅธ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ค.
-
์คํ ์ค๋น๊ฐ ๋ ํ๋ก์ธ์ค๋ ์ด ์ค ํ๋์ ํ์ ์กด์ฌํ๋ค.
-
MLFQ๋ ํ๋ก์ธ์ค ์คํ์ ๊ฒฐ์ ํ ๋ ์ฐ์ ์์๋ฅผ ์ฌ์ฉํ๋ค.
-
๋ฌผ๋ก ํ๋์ ํ์ ์ฌ๋ฌ๊ฐ์ ์์ ์ด ๋ค์ด๊ฐ ์ ์์ง๋ง, ์ด ๊ฒฝ์ฐ RR์ ์ฌ์ฉํ๋ค.
-
์ฌ๊ธฐ๊น์ง๋ ์ฌ์ด๋ฐ ์ด๋ ค์ด๊ฑด ์ฐ์ ์์๋ฅผ ์ด๋ป๊ฒ ์ ํ ๊ฒ์ธ๊ฐ์ด๋ค.
-
MLFQ๋ ๊ฐ ์์ ์ ๊ณ ์ ๋ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ๋ ๊ฒ์ด ์๋๋ผ, ์์ ์ ํ๋์ ๋ฐ๋ผ ์ฐ์ ์์๋ฅผ ๋์ ์ผ๋ก ์กฐ์ ํ๋ค.
-
์๋ฅผ๋ค์ด ๋ํํ ํ๋ก์ธ์ค์ฒ๋ผ ๋น ๋ฅธ ๋ฐ์์ด ํ์ํ ํ๋ก๊ทธ๋จ์ ์ฐ์ ์์๋ฅผ ๋๊ฒ ์ค์ ํ๊ณ , ํ ์์ ์ด ๊ธด ์๊ฐ๋์ CPU๋ฅผ ์ฌ์ฉํ๋ฉด ์ฐ์ ์์๋ฅผ ๋ฎ์ถ๋ ๋ฐฉ์์ด๋ค.
-
MLFQ์ ๋ ๊ฐ์ง ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๊ท์น 1 : Priority A > Priority B ์ด๋ฉด, A์ ํ๋ก์ธ์ค๋ B์ ํ๋ก์ธ์ค๋ณด๋ค ๋จผ์ ์คํ๋๋ค.
- ๊ท์น 2 : Priority A = Priority B ์ด๋ฉด, A์ B๋ RR์ ์ฌ์ฉํ์ฌ ์คํ๋๋ค.
-
๋น์ฅ์ ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์์ ์ด ๊ตฌ์ฑ๋๋ค๊ณ ํ์ ๋, A B๊ฐ RR์ผ๋ก ์ฒ๋ฆฌ๋๋ฉด CD๋ ์คํ๋์ง๋ ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
-
์๋์ ๋ชฉ์ฐจ์์ ์์ ์์ ์์์์ฒด๊ฐ ๋ณ๊ฒฝ๋๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์.
8.2 MLFQ: ์ฐ์ ์์์ ๋ณ๊ฒฝ
-
์ฒซ๋ฒ์งธ ๋ณ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ์๋ฐ ์ฃผ๋ก ๋ํํ ํ๋ก์ธ์ค์ cpu bound ํ๋ก์ธ์ค๋ฅผ ๊ตฌ๋ถํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ๋ํํ ํ๋ก์ธ์ค๋ ์งง์ ์๊ฐ๋์ CPU๋ฅผ ์ฌ์ฉํ๊ณ , ๋๊ธฐ์๊ฐ์ด ๊ธธ๋ค.
- CPU bound ํ๋ก์ธ์ค๋ ๊ธด ์๊ฐ๋์ CPU๋ฅผ ์ฌ์ฉํ๊ณ , ๋๊ธฐ์๊ฐ์ด ์งง๋ค.
-
MLFQ์ ์ถ๊ฐ๋ ๊ท์น
-
๊ท์น 3 : ์์ ์ด ์์คํ ์ ๋ค์ด์ค๋ฉด, ์ฐ์ ์์๋ ๊ฐ์ฅ ๋์ ํ์ ํ ๋น๋๋ค.
-
๊ท์น 4-a : ์์ ์ด ํ์์ฌ๋ผ์ด์ค๋ฅผ ์ ๋ถ ์ฌ์ฉํ๋ฉด, ์ฐ์ ์์๋ ๋ฎ์ ํ๋ก ์ด๋๋๋ค.
-
๊ท์น 4-b : ํ์ ์ฌ๋ผ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ CPU๋ฅผ ์๋ํ๋ฉด, ์ฐ์ ์์๋ ์ ์ง๋๋ค.
-
์ด ๊ท์น์ ์์๋ ์ผ๋จ ์ ๋ถ ์งง์ ์๊ฐ์ ์ฌ์ฉํ๋ ํ๋ก์ธ์ค๋ผ ๊ฐ์ฅํ๊ณ , ์ค์ ๋ก ์คํ์๊ฐ์ด ์งง๋ค๋ฉด ์์ ๋๊ฑฐ๋ ์ฐ์ ์์๊ฐ ํ๋ฝํ๋ ๋์ ๋๋ด๋ ๊ฒ์ด๊ณ ,
-
์คํ์๊ฐ์ด ๊ธธ๋ค๋ฉด ์ฐ์ ์์๊ฐ ํ๋ฝํ๋ฉด์ ์๋๋ก ๋ด๋ ค๊ฐ๊ฒ ๋๋ค.
-
๋ํํ ํ๋ก๊ทธ๋จ์์๋ ๊ตณ์ด ์ดํผ์ง ์์๋ ์ ๋์ํจ์ ์ ์ ์๋ค.
ํ์ฌ MLFQ์ ๋ฌธ์ ์
- ์ผ๊ฒฌ ์๋ฒฝํด ๋ณด์ด์ง๋ง, MLFQ์๋ ๋ฌธ์ ์ ์ด ์กด์ฌํ๋ค.
- ๊ธฐ์ ์ํ(starvation)๊ฐ ๋ฐ์ํ ์ ์๋ค. (์๋ฅผ ๋ค์ด ๋ํํ ํ๋ก์ธ์ค๊ฐ ๋๋ฌด ๋ง์ ๊ฒฝ์ฐ)
- ์ง๊ธ ์ํ๋ฅผ ์ ์ ์๋ค๋ฉด, CPU๋ฅผ ๋ ์ ํ๋ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
- ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ถ์ด ๋ฐ๋ ์ ์๋ค.
8.3 ์ฐ์ ์์์ ์ํฅ ์กฐ์
-
๋น์ฐํ ๊ธฐ๋ณธ์ ์ธ ์์ด๋์ด๋ ์ฐ์ ์์๋ฅผ ์ํฅ ์กฐ์ ํ๋ ๊ฒ์ด๋ค.
-
์ด๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ์ถ๊ฐํ๋ค.
-
๊ท์น 5 : ์ผ์ ๊ธฐ๊ฐ S๊ฐ ์ง๋๋ฉด, ๋ชจ๋ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ์ต์์ ํ๋ก ์ด๋์ํจ๋ค.
-
์ด ๊ท์น์ ํตํด ๊ธฐ์ ์ํ์ ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ถ์ด ๋ฐ๋ ์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
-
๋ฌผ๋ก ์ฌ๊ธฐ์๋ ๋ง์ ๊ณ ๋ฏผ์ด ๋จ์์๋๋ฐ, ๋ฐ๋ก S์ ๊ฐ์ ์ด๋ป๊ฒ ์ค์ ํ ๊ฒ์ธ๊ฐ์ด๋ค.
-
S์ ๊ฐ์ด ๋๋ฌด ์์ผ๋ฉด, ๋ํํ ์์ ์ด ์ ์ ํ ์๊ฐ๋์ ์คํ๋์ง ์์ ์ ์๊ณ , ๋๋ฌด ํฌ๋ฉด ๊ธฐ์ ์ํ๊ฐ ๋ฐ์ํ ์ ์๋ค.
8.4 ์ฐ์ ์์์ ํํฅ ์กฐ์
-
๋๋จธ์ง ๋ฌธ์ (์ค์ผ์ค๋ฌ๋ฅผ ๋ ์ ํ๋ ์ด์)๋ ํ๋์ ๊ท์น์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
-
๊ท์น 6 : ์ฐ์ ์์ ๋จ๊ณ์์ ์๊ฐ ํ ๋น๋์ ์ฌ์ฉํ๋ฉด, ์ฐ์ ์์๋ฅผ ํํฅ ์กฐ์ ํ๋ค.
8.5 MLFQ์กฐ์ ๊ณผ ๋ค๋ฅธ ์ด์๋ค
-
MLFQ์ ์์ด๋์ด๋ ์์ ๊ฐ์ง๋ง, ์์ง ์ค์ ๊ตฌํ์๋ ๋ง์ ๋ฌธ์ ๊ฐ ๋จ์์๋ค.
-
ํ์์ฌ๋ผ์ด์ค์ ๊ธธ์ด๋ฅผ ์ด๋ป๊ฒ ์ค์ ํ ๊ฒ์ธ๊ฐ?
-
S์ ๊ฐ์ ์ด๋ป๊ฒ ์ค์ ํ ๊ฒ์ธ๊ฐ?
9.0 ์ค์ผ์ค๋ง : ๋น๋ก ๋ฐฐ๋ถ
-
์ด๋ฒ ์ฅ์์๋ ์ค์ผ์ค๋ฌ์ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ธ ๋น๋ก ๋ฐฐ๋ถ์ ๋ํด ์์๋ณธ๋ค.
-
๋น๋ก ๋ฐฐ๋ถ์ ๋ชฉํ๋ ๊ฐ๋จํ๋ฐ, ๋ฐํ์๊ฐ์ด๋ ์๋ต์๊ฐ์ ์ต์ ํ ํ๋ ๋์ ์ค์ผ์ค๋ฌ๊ฐ ๊ฐ ํ๋ก์ธ์ค์ CPU ์๊ฐ์ ๊ณตํํ๊ฒ ๋ถ๋ฐฐํ๋ ๊ฒ์ด๋ค.
-
๊ฐ์ฅ ์ข์ ์์๋ Waldspurger์ Weihl์ ์ฐ๊ตฌ์ธ lottery scheduling์ด๋ค. (๊ฐ๋จํ๊ฒ ๋งํ๋ฉด, ๊ฐ ํ๋ก์ธ์ค์ ํฐ์ผ์ ๋ถ์ฌํ๊ณ , ์ค์ผ์ค๋ฌ๊ฐ ๋๋คํ๊ฒ ํฐ์ผ์ ๋ฝ์์ ์คํํ๋ ๋ฐฉ์ ๋ ์ค์ํ ํ๋ก์ธ์ค์ ๋ ๋ง์ ํฐ์ผ์ ์ค๋ค)
9.1 ๊ธฐ๋ณธ ๊ฐ๋ : ์ถ์ฒจ๊ถ์ด ๋น์ ์ ์ง๋ถ์ด๋ค
-
์ถ์ฒจ๊ถ์ด๋ผ๋ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ด ์ถ์ฒ ์ค์ผ์ค๋ง์ ๊ทผ๊ฐ์ ์ด๋ฃฌ๋ค.
-
๊ธฐ๋ณธ์ ์ธ ์์ด๋์ด๋ ์์ ๊ฐ๊ณ , ์ฅ์ ์ ๋ฌด์์์ฑ์ด๋ค.
๋ฌด์์์ฑ์ด ์ฅ์ ์ธ ์ด์
- ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธฐ์กด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค (LRU์ ์์๋ฅผ ์๊ฐํด๋ณด์)
- ๊ฐ๋ณ๋ค (๊ด๋ฆฌํด์ผ ํ ์ ๋ณด๊ฐ ๊ฑฐ์ ์๋ค)
- ๋น ๋ฅด๋ค (๋ก์ง์ด ๋ ๋ถ์ด ๋์์์ฑ ์๊ฐ์ ๋์ ๋ถ๊ณผํ๋ค)
9.2 ์ถ์ฒจ ๊ธฐ๋ฒ
-
์ถ์ฒจ๊ถ์ ๋ค๋ฃจ๋ ๋ค์ํ ๊ธฐ๋ฒ์ด ์๋๋ฐ, ๊ทธ ์ค ๊ฐ์ฅ ๋จผ์ ๊ณ ๋ คํ ๊ฒ ์
์ถ์ฒจ๊ถ ํํ
์ด๋ค. -
์ด ๊ฐ๋ ์ ์ฌ์ฉ์๊ฐ ์ถ์ฒจ๊ถ์ ์์ ์ ํํ ๊ฐ์น๋ก ์ถ์ฒจ๊ถ์ ์์ ๋กญ๊ฒ ํ ๋น ํ ์ ์๊ฒ ํ๋ค. (์์คํ ์ ์๋์ ์ผ๋ก ํํ ๊ฐ์น๋ฅผ ๋ณํํ๋ค)
-
์ด๊ฑด ๋ค๋ฅธ ์ฌ์ฉ์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ํ ๋นํ ์ถ์ฒจ๊ถ์ ๊ฐ์น๋ฅผ ๋น๊ตํ ์ ์๊ฒ ํด์ค๋ค.
-
๊ทธ๋ฆฌ๊ณ
์ถ์ฒจ๊ถ ์๋
๋ผ๋ ๊ฐ๋ ๋ ์๋๋ฐ, ์ด๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ ์ถ์ฒจ๊ถ์ ์๋ํ ์ ์๊ฒ ํด์ค๋ค. -
์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ์์ ์ ์ถ์ฒจ๊ถ์ ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ ์๋ํ ์ ์๊ณ , ์ด๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋ ๋ง์ ์ถ์ฒจ๊ถ์ ๊ฐ์ง๊ฒ ํด์ค๋ค.
-
๋ง์ง๋ง์ผ๋ก
์ถ์ฒจ๊ถ ํฝ์ฐฝ
๋ผ๋ ๊ฐ๋ ๋ ์๋๋ฐ, ์ด๋ ์์คํ ์ด ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ์ถ์ฒจ๊ถ์ ์ฆ๊ฐ์ํค๋ ๊ฒ์ด๋ค.
9.3 ๊ตฌํ
// counter : ๋น์ฒจ์๋ฅผ ๋ฐ๊ฒฌํ๋์ง ํ์ธํ๋ ๋ณ์
int counter = 0;
// winner : 0๋ถํฐ ์ด ์ถ์ฒจ๊ถ์ ์๊น์ง ๋๋คํ๊ฒ ์ถ์ฒจ๋ ๋น์ฒจ์
int winner = getRandom(0, total_tickets);
// ์ถ์ฒจ๊ถ์ ๊ฐ์ง ํ๋ก์ธ์ค๋ฅผ ์ฐพ๋๋ค.
node_t *current = head;
while (current) {
counter += current->tickets;
if (counter > winner) {
// ๋น์ฒจ์๋ฅผ ๋ฐ๊ฒฌํ์ผ๋ฏ๋ก ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ค.
run(current->process);
break;
}
current = current->next;
}
- ์์ ์ฝ๋๋ ์ถ์ฒจ๊ถ์ ๊ฐ์ง ํ๋ก์ธ์ค๋ฅผ ์ฐพ์ ์คํํ๋ ์ฝ๋์ด๋ค.
9.4 ์ถ์ฒจ๊ถ ์์คํ ์์
-
๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๊ณต์ ์งํ U๋ฅผ ์ ์ํ๋ค.(U = 1 - (์ฒซ ์์ ์ข ๋ฃ ์๊ฐ / ๋ ๋ฒ์งธ ์์ ์ข ๋ฃ ์๊ฐ))
-
๊ธฐ๋ณธ์ ์ผ๋ก๋ 1(๊ฐ์ฅ ๊ณต์ ํจ)์ผ๋ก ์๋ ดํ๊ธด ํ์ง๋ง ๋๋ค์ ํน์ฑ์ ์ด๋ฐ์๋ ๋ถ๊ณต์ ํจ์ด ๋ฐ์ํ ์ ์๋ค.
-
๋ค๋ง ์ถ์ฒจ๊ถ ์์คํ ์์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ์ถ์ฒจ๊ถ์ ์ด๋ป๊ฒ ํ ๋นํ ๊ฒ์ธ๊ฐ์ด๋ค.
-
์ด๋ ์ถ์ฒจ๊ถ์ ์ด๋ป๊ฒ ํ ๋นํ ๊ฒ์ธ๊ฐ์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ๋ฌ๋ผ์ง ์ ์๊ณ ์์ง ๋ฏธํด๊ฒฐ ์ํ์ด๋ค.
9.6 ๊ฒฐ์ ๋ก ์ ์ค์ผ์ค๋ง
-
๊ฒฐ์ ๋ก ์ ์ค์ผ์ค๋ง์ ๋๋ค์ฑ์ ์ ๊ฑฐํ๊ณ , ์ค์ผ์ค๋ง์ ๊ฒฐ์ ๋ก ์ ์ผ๋ก ๋ง๋๋ ๊ฒ์ด๋ค.
-
๋ํ์ ์ผ๋ก ๋ณดํญ ์ค์ผ์ค๋ง(
stride scheduling
)์ด ์๋ค. -
๋ณดํญ ์ค์ผ์ค๋ง์ ๊ฐ ํ๋ก์ธ์ค์ ๋ณดํญ์ ํ ๋นํ๊ณ , ์ค์ผ์ค๋ฌ๋ ๊ฐ์ฅ ์์ ๋ณดํญ์ ๊ฐ์ง ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ค.
-
์ด๋ฅผ ํตํด ๋๋ค์ฑ์ ์ ๊ฑฐํ๊ณ , ์ค์ผ์ค๋ง์ ๊ฒฐ์ ๋ก ์ ์ผ๋ก ๋ง๋ค ์ ์๋ค.
curr = remove_min(queue);
schedule(curr);
curr->pass += curr->stride;
insert(queue, curr);
-
์ฒ์๋ถํฐ U๊ฐ 1์ ์๋ ดํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
-
๊ทธ๋ ๋ค๋ฉด ์ ๊ฒฐ์ ๋ก ์ ์ค์ผ์ค๋ง์ ์ฌ์ฉํ์ง ์์๊น?
-
์ด์ ๋ ๋จ์ํ๋ฐ, ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๋ค์ด์ค๋ฉด, ์ค์ผ์ค๋ฌ๋ ์๋ก์ด ๋ณดํญ์ ํ ๋นํด์ผ ํ๋๋ฐ, ์ด๊ฒ์ด ๊ฒฐ์ ๋ก ์ ์ค์ผ์ค๋ง์ ๋จ์ ์ด๋ค.(๋๋ค ์ถ์ฒจ๊ถ ๋ฐฉ์์์ ํจ์ฌ ์ฝ๋ค)
9.7 ๋ฆฌ๋ ์ค CFS(Completely Fair Scheduler)
-
๋ฆฌ๋ ์ค๋ ๊ธฐ์กด๊ณผ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๊ณต์ ๋ฐฐ๋ถ ์ค์ผ์ค๋ง์ ๊ตฌํํ๋ค.
-
์ด ์ค์ผ์ค๋ฌ์ ์ฅ์ ์ ํจ์จ์ฑ๊ณผ ํ์ฅ์ฑ์ด๋ค.
-
ํจ์จ์ฑ์ ์ํด CFS๋ ์ต์ ์ ๋ด๋ถ ์ค๊ณ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค.
-
์ผ๋จ ๊ธฐ๋ณธ์ ์ผ๋ก virtual runtime์ด๋ผ๋ counting ๊ธฐ๋ฐ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
-
ํ๋ก์ธ์ค ์คํ์ virtual runtime์ด ์ฆ๊ฐํ๊ณ , ์ค์ผ์ค๋ฌ๋ ๊ฐ์ฅ ์์ virtual runtime์ ๊ฐ์ง ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ค.
-
์ด ์ญ์ ์์ด๋์ด๋ ๊ฐ๋จํ์ง๋ง, ์ค์ผ์ค๋ฌ๊ฐ ์ด๋ ์์ ์ ๋ฉ์ถ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
-
๋๋ฌด ์์ฃผ ์ค์ผ์ค๋ฌ๋ฅผ ํธ์ถํ๋ฉด ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ณ , ๋๋ฌด ๋ฆ๊ฒ ํธ์ถํ๋ฉด ๊ณต์ ์ฑ์ด ๋จ์ด์ง๋ค.
-
์ด๋ฅผ ์ํด ๋ค์ํ ํต์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค.
-
์ฒซ ๋ฒ์งธ ๋ณ์๋ก
sced_latency
๊ฐ ์๋ค. ์ด ๋ณ์๋ ์ค์ผ์ค๋ฌ๊ฐ ์ผ๋ง๋ ์์ฃผ ํธ์ถ๋๋์ง๋ฅผ ๊ฒฐ์ ํ๋ค(๋ณดํต 48ms). -
์๋ฅผ ๋ค์ด ๋ค๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด, CFS๋
sced_latency
๋ฅผ 1/4๋ก ๋๋๊ณ ํ๋ก์ธ์ค๋น ํ์์ฌ๋ผ์ด์ค๋ฅผ ํด๋น ๊ฐ์ผ๋ก ์ค์ ํ๋ค. -
๋ฌธ์ ๋ ๋๋ฌด ๋ง์ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด ๋๋ฌด ๋ง์ context switching์ด ๋ฐ์ํ ์ ์๋ค.
-
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
min_granularity
๋ผ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค. (๋ณดํต ์ต์๊ฐ์ 6ms) -
์๋ฅผ๋ค์ด 10๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด, ์๋๋
sced_latency
์ ๋ฐ๋ผ 4.8ms๋ก ๋๋์ด์ง๋ค. -
ํ์ง๋ง
min_granularity
๊ฐ 6ms์ด๋ฏ๋ก, 6ms๋ก ์ค์ ๋๋ค. ์ค์ผ์ค๋ง์ ํจ์ธ์ฑ์ ์ด๋ ๊ฒ ๋ณดํธ๋๋ค. -
์ด๋ฌํ ๋ฐฉ์์ผ๋ก CFS๋ ๊ณต์ ์ฑ๊ณผ ํจ์จ์ฑ์ ๋ชจ๋ ํ๋ณดํ๋ค.
-
์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ผ๋ก ๊ฐ์ค์น(Niceness)๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ๋ณด์ ํ๋ค.
-
์์์ ๋ค์๊ณผ ๊ฐ๋ค.
time_slice = (weight_of_task / weight_of_all_tasks) * sced_latency
(๊ฐ์ค์น ํ๋ -20 ~ 19๊น์ง์ ํด๋นํ๋ ๊ฐ์ ๋์ ์ํจ๋ค) -
์ด๋ฐ ์์์ ๋์ ํ๋ฉด ๊ฐ์ค์น์ ๋ฐ๋ผ์ ํ๋ก์ธ์ค์ ํ์์ฌ๋ผ์ด์ค(์ฌ์กฐ์ ์๊ฐ)์ด ๋ฌ๋ผ์ง๊ฒ ๋๋ค.
-
vruntime๋ ๊ฐ์ค์น์ ๋ฐ๋ผ์ ๊ณ ๋ํ ๋์ด์๋ค.
-
๊ณ ๋ํ ์์์ ๋ค์๊ณผ ๊ฐ๋ค.
vruntime = vruntime + (weight_of_all_tasks / weight_of_task) * time_slice
(๊ฐ์ค์น๊ฐ ๋์์๋ก vruntime์ด ๋๋ฆฌ๊ฒ ์ฆ๊ฐํ๋ค)
RedBlack Tree์ ํ์ฉ
-
CFS๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ด ๊ผญ ํ์ํ๋ค. (๋ค์ ์คํํ ํ๋ก์ธ์ค๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ)
-
์๋ฅผ๋ค์ด ๋๊ธฐ์ค์ธ ํ๋ก์ธ์ค๋ฅผ LinkedList๋ก ๊ด๋ คํ๋ฉด, ๊ฒ์์ ๋๋ฌด ๋ง์ ์๊ฐ์ด ์์๋๋ค.
-
์ปค์ง์๋ก O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ธ๋ฐ, ์์ฃผ ์์ ํ์์ฌ๋ผ์ด์ค ์๊ฐ ์์ ์์ฒ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋๊ธฐํ ์ ์๋๋ฐ, ์ด๋ ๋งค์ฐ ํฐ ๋ฌธ์ ์ด๋ค.
I/O์ ์ ์๋ ํ๋ก์ธ์ค ๋ค๋ฃจ๊ธฐ
-
CFS๋ I/O์ ์ ์๋ ํ๋ก์ธ์ค๋ฅผ ์ด๋ป๊ฒ ๋ค๋ฃจ๋์ง์ ๋ํ ๋ฌธ์ ๋ ์๋ค.
-
์ด๋ฅผ ์ํด CFS๋
vruntime
์ ์ฌ์ฉํ๋ค. -
์ ํํ๋ ์ ์๋ ํ๋ก์ธ์ค๊ฐ ๊นจ์ด๋ฌ์ ๋
vruntime
์ ์ ๋ฐ์ดํธํ๋ค(ํธ๋ฆฌ์์ ์ฐพ์ ์ ์๋ ๊ฐ์ฅ ์์vruntime
์ ์ฐพ์์ ์ ๋ฐ์ดํธํ๋ค)
10.0 ๋ฉํฐํ๋ก์ธ์ ์ค์ผ์ค๋ง
-
์ด๋ฒ ์ฅ์์๋ ๋ฉํฐํ๋ก์ธ์ ์ค์ผ์ค๋ง์ ๋ํด ์์๋ณธ๋ค.
-
์๋๋ ๋ณํ์ฑ์ ๋ค๋ฃจ๊ณ ๋ณด๋ ๊ฒ์ด ์ค์ํ์ง๋ง, ์ด๋ฒ ์ฅ์์๋ ๋ฉํฐํ๋ก์ธ์ ์ค์ผ์ค๋ง์ ๋ํด ์์๋ณธ๋ค.
-
๋ค๋ง ๊ธฐ์กด์ ํ๋ก๊ทธ๋จ๋ค(ํ๋์ ์ฝ์ด๋ง ์ฌ์ฉํ๋๋ก ์ค๊ณ๋)์ ๋ฉํฐํ๋ก์ธ์์์ ์คํ์ํค๋ ๊ฒ์ ๋ํด์ ์์๋ณธ๋ค.
10.1 ๋ฐฐ๊ฒฝ: ๋ฉํฐํ๋ก์ธ์ ๊ตฌ์กฐ
-
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉํฐ ํ๋ก์ธ์ ํ๋์จ์ด๋ ๋๊ฐ์ง ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ๋ค.
- ๋ค์์ ํ๋ก์ธ์ ๊ฐ์ ๋ฐ์ดํฐ ๊ณต์ ๋ฌธ์
- ํ๋์จ์ด ์บ์์ ์ฌ์ฉ๋ฐฉ์ ๋ฌธ์
-
์บ์๋ ์ง์์ฑ์ ๊ธฐ๋ฐํ๋ค. ์ง์ญ์ฑ์๋ ์๊ฐ ์ง์ญ์ฑ๊ณผ ๊ณต๊ฐ ์ง์ญ์ฑ์ด ์๋ค.
- ์๊ฐ ์ง์ญ์ฑ : ์ต๊ทผ์ ์ ๊ทผํ ๋ฐ์ดํฐ๋ ๋ค์ ์ ๊ทผํ ํ๋ฅ ์ด ๋๋ค.
- ๊ณต๊ฐ ์ง์ญ์ฑ : ์ต๊ทผ์ ์ ๊ทผํ ๋ฐ์ดํฐ์ ์ธ์ ํ ๋ฐ์ดํฐ์ ๋ค์ ์ ๊ทผํ ํ๋ฅ ์ด ๋๋ค.
-
์ด๋ฌํ ํน์ง์์, ์บ์ ์ผ๊ด์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
-
์บ์ ์ผ๊ด์ฑ ๋ฌธ์ ๋ฅผ ์์ฝํ๋ฉด, ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํ๋ก์ธ์๊ฐ ๋ณ๊ฒฝํ์ ๋, ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ๊ฐ์ด๋ค.
-
๊ธฐ๋ณธ์ ์ธ ํด๊ฒฐ์ฑ ์ ํ๋์จ์ด์์ ์ ๊ณต๋๋ค, ํ๋์จ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ณ์ ๊ฐ์ํ๊ณ , ํญ์ ์ฌ๋ฐ๋ฅธ ์์๋ก ์ฒ๋ฆฌ๋๋๋ก ์์คํ ์ ๊ด๋ฆฌํ๋ค.
-
์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์๊ฐ ํ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐฑ์คํ ๋๋ ํญ์ ๊ณต์ ๋๋๋กํ๋ค.
-
๋ฒ์ค ๊ธฐ๋ฐ ์์คํ ์์๋ ๋ฒ์ค ์ค๋ํ์ด๋ผ๋ ๊ธฐ์ ์ ์ฌ์ฉํ๋ค. (์บ์๊ฐ ์์ ๊ณผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐ๊ฒฝํ๋ ๋ฒ์ค์ ํต์ ๋ด์ฉ์ ๊ฐ์ํ๋ ๊ฒ)
10.2 ๋๊ธฐํ๋ฅผ ์์ง ๋ง์์ค
-
๋ฉํฐํ๋ก์ธ์์์๋ ๋๊ธฐํ๊ฐ ๋์ฑ ์ค์ํ๋ค.
-
์ด๊ฑด ๋ณํ์ฑ์์ ๋ค๋ฃฐ ๊ฒ ๊ฐ๊ณ , ๊ฐ๋จํ ์์ฝํ๋ฉด, ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ฅผ ๊ฐ๋จํ ์ค๋ช ํ๋ ์ฅ์ด๋ค.
-
lock์ด ๋์์ด์ง๋ง, lock์ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ด ๋จ์ด์ง๋ trade-off๊ฐ ๋ฐ์ํ๋ค.
10.3 ์บ์ ์นํ์ฑ
-
์บ์ ์นํ์ฑ๋ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ๋ค (CPU๊ฐ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์บ์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฆฌ๋ฉด์ ์ค๋ ์ง์ฐ๊ณผ ๋ญ๋น)
-
๋ฉํฐํ๋ก์ธ์๋ ์ด๋ฐ์ ์ ๊ณ ๋ คํด์ ํ๋ก์ธ์๋ฅผ ์ค์ผ์ค๋ง ํด์ผ ํ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ์ฌ์ค ๋ณํ์ฑ์์ ๋์์ผ ํ๋ ์ฃผ์ ์ด๊ณ , ์์ ์ค๋ช ์ด ๋ถ์กฑํด์ ๋จ๋ฒ์ ์ดํด๊ฐ ์ด๋ ต๊ณ ํผ๋์ค๋ฌ์ธ ์ ์๋ค. ๋ฉํฐ ํ๋ก์ธ์ ํ๊ฒฝ์์
์ค์ผ์ค๋ง
์ ํ๊ธฐ ์ํด์ ๊ณ ๋ คํด์ผํ ๊ฒ๋ค์ ๋ํ ์ธ๊ธ์ ๋๋ก ์ดํดํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
10.4 ๋จ์ผ ํ ์ค์ผ์ค๋ง
-
๊ฒฐ๊ตญ ๋ค์ ์ค์ผ์ค๋ง์ผ๋ก ๋์์์ ์ด์ผ๊ธฐํด๋ณด๋ฉด, ๋ฉํฐํ๋ก์ธ์ ์ค์ผ์ค๋ง์์ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋จ์ผ ํ ์ค์ผ์ค๋ง์ด๋ค.
-
๋จ์ผ ํ ๋ฉํฐํ๋ก์ธ์ ์ค์ผ์ค๋ง(Single Queue Multiprocessor Scheduling)
์ ๋ชจ๋ ํ๋ก์ธ์๊ฐ ํ๋์ ํ๋ฅผ ๊ณต์ ํ๊ณ , ์ค์ผ์ค๋ฌ๋ ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ค. -
๊ฐ๋จํ ๋งํ๋ฉด, ํ์ ๋ฃ๊ณ ๋น์ด์๋ ํ๋ก์ธ์์๊ฒ ํ ๋นํ๋ ๋ฐฉ์์ด๋ค. (์์ ์ด ๋๊ฐ๊ณ ํ๋ก์ธ์๊ฐ ๋๊ฐ๋ฉด, ๋๊ฐ์ ํ๋ก์ธ์์๊ฒ ๊ฐ๊ฐ ํ ๋นํ๋ ๋ฐฉ์)
-
์ด ๋ฐฉ์์ ๋๋ถ๋ถ์ ๋จ์ ์ ๋ฌด์ํ๊ธฐ๋ ํ๊ณ , ๊ฐ๋จํ์ง๋ง, ํ์ฅ์ฑ์ด ๊ฒฐ์ฌ๋์ด์๋ค.
-
์ด ๋ฐฉ์์ ๋ฝ์ ์ฌ์ฉํ๋๋ฐ(์คํ์ํฌ ๋ค๋ฅธ ํ๋ก์ธ์๋ฅผ ์ฐพ์ ๋) ์ด๋ ์ฑ๋ฅ์ ๋จ์ด๋จ๋ฆด ์ ์๋ค.
-
๋ํ ์๋ฌด๋ฐ ๋ณด์ ์ด ์๋ค๋ฉด, ์บ์ ์นํ์ฑ์ด ๋จ์ด์ง ์ ์๋ค.
-
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ๊ฐ์ ํ๋ก์ธ์๊ฐ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋๋ก ์ ๋ํด์ ์ค๋ฒํค๋๋ฅผ ์ค์ด๋ ๋ฐฉ๋ฒ๋ ์๋ค.
-
์ด๊ฐ์ ๋ฐฉ์์ ์ข์ง๋ง, ๊ตฌํ์ด ์ด๋ ต๋ค๋ ๋จ์ ์ด ์๋ค.
10.5 ๋ฉํฐ ํ ์ค์ผ์ค๋ง
-
๋ฉํฐ ํ ์ค์ผ์ค๋ง(Multi Queue Scheduling)
์ ๋จ์ผ ํ ์ค์ผ์ค๋ง์ ๋จ์ ์ ๋ณด์ํ ๋ฐฉ์์ด๋ค. -
์ด๊ฒ๋ ๊ฐ๋ ์์ฒด๋ ์ด๋ ต์ง ์์์ ๊ฐ๋จํ๊ฒ ์์ฝํ๋ฉด, ๊ฐ ํ๋ก์ธ์์ ํ๋ฅผ ํ ๋นํ๊ณ , ๊ฐ ํ์ ํ๋ก์ธ์ค๋ฅผ ํ ๋นํ๋ ๋ฐฉ์์ด๋ค.
-
A,B,C,D ๋ค๊ฐ์ง ์์ ์ด ์๋ค๋ฉด, A,B๋ ํ1์, C,D๋ ํ2์ ํ ๋นํ๋ ๋ฐฉ์์ด๋ค.
-
๊ธฐ๋ณธ์ ์ผ๋ก ์บ์์นํ์ ์ด๊ณ , ํ๋ก ์ธํ ๋ฝ์ ์ค์ผ ์ ์๋ค.
-
๋จ ์ด ๋ฐฉ์๋ ๋ฌธ์ ๊ฐ ์๋๋ฐ, ์ํฌ๋ก๋๊ฐ ๋ถ๊ท ํํ๋ค๋ฉด, ํ์ชฝ ํ๊ฐ ๋๋ฌด ๋ง์ ์์ ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค.
-
์ด๊ฑธ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ด์ฃผ (migration)์ด๋ค.
-
์ด์ฃผ๋ ํ๋ก์ธ์ค๋ฅผ ๋ค๋ฅธ ํ๋ก ์ด๋์ํค๋ ๊ฒ์ด๊ณ ์ด๋ฅผ ํตํด ๋ถ๊ท ํ์ ํด๊ฒฐํ ์ ์๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋ชจ๋ ์ค์ผ์ค๋ง ๋ฐฉ๋ฒ์ ํ๊ณ๋ ์์ ์ ์ ํํ ์์ธก ํ ์ ์๋ค๋ ๊ฒ์ ์๋ค๊ณ ์๊ฐํ๋๋ฐ, ๊ทธ๋ฌํ ์ ๋ณด์ ๋จ์ ์์์ ์ฌ์ ์ ์ธ ํด๊ฒฐ์ฑ ์ ์ฐพ๋ ๊ฒ์ด ์ด๋ ต๋ค๊ณ ์๊ฐํ๋ค. ์ด์ฃผ๋ ๊ทธ๋ฌํ ๊ฒ๋ค์ ์ ๊ทน๋ณตํ ์ฌ๋ก๋ผ๊ณ ์๊ฐํ๋ค.