CPU ์ค์ผ์ค๋ง(CPU Scheduling)
CPU ์ค์ผ์ค๋ง์ ๋ค์ค ํ๋ก๊ทธ๋จ ์ด์์ฒด์ ์ ๊ธฐ๋ณธ์ ๋๋ค. ์ด์์ฒด์ ๋ CPU๋ฅผ ํ๋ก์ธ์ค ๊ฐ์ ๊ตํํจ์ผ๋ก์จ, ์ปดํจํฐ๋ฅผ ๋ณด๋ค ์์ฐ์ ์ผ๋ก ๋ง๋ญ๋๋ค. ์ด๋ฒ์๋ ๊ธฐ๋ณธ์ ์ธ ์ค์ผ์ค๋ง ๊ฐ๋ ์ ์๊ฐํ๊ณ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
์ฝ์ด๊ฐ ํ๋์ธ ์์คํ ์์๋ ํ์๊ฐ์ ์ค์ง ํ๋์ ํ๋ก์ธ์ค๋ง์ด ์คํ๋ ์ ์์ต๋๋ค. ๋๋จธ์ง ํ๋ก์ธ์ค๋ CPU์ ์ฝ์ด๊ฐ ๊ฐ์ฉ ์ํ๊ฐ ๋์ด ๋ค์ ์ค์ผ์ค ๋ ์ ์์ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค. ๋ค์ค ํ๋ก๊ทธ๋๋ฐ์ ๋ชฉ์ ์ CPU ์ด์ฉ๋ฅ ์ ์ต๋ํํ๊ธฐ ์ํด ํญ์ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ง๊ฒ ํ๋ ๋ฐ ์์ต๋๋ค. ๋ค์ค ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ๊ธฐ๋ณธ ์์ด๋์ด๋ ๋น๊ต์ ๊ฐ๋จํฉ๋๋ค. ํ๋์ ํ๋ก์ธ์ค๋, ์ ํ์ ์ธ ์ด๋ค I/O ์์ฒญ์ด ์๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ ค์ผ๋ง ํ ๋๊น์ง ์คํ๋ฉ๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด, ๋จ์ํ ์ปดํจํฐ ์์คํ ์์ CPU๋ ๊ทธ์ ๋๊ณ ์๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋ ๋๊ธฐ ์๊ฐ์ ๋ญ๋น๋๋ฉฐ, ์ด๋ค ์ ์ฉํ ์์ ๋ ์ํํ์ง ๋ชปํฉ๋๋ค. ๋ค์ค ํ๋ก๊ทธ๋๋ฐ์์๋, ์ฐ๋ฆฌ๋ ์ด๋ฌํ ์๊ฐ์ ์์ฐ์ ์ผ๋ก ํ์ฉํ๋ ค๊ณ ์๋ํฉ๋๋ค.
- ์ด๋ ํ์๊ฐ์ ๋ค์์ ํ๋ก์ธ์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ์ ์งํฉ๋๋ค.
- ์ด๋ค ํ๋ก์ธ์ค๊ฐ ๋๊ธฐํด์ผ ํ ๊ฒฝ์ฐ, ์ด์์ฒด์ ๋ CPU๋ฅผ ๊ทธ ํ๋ก์ธ์ค๋ก๋ถํฐ ํ์ํด ๋ค๋ฅธ ํ๋ก์ธ์ค์ ํ ๋นํฉ๋๋ค.
์ด๋ฌํ ํจํด์ ๊ณ์ ๋ฐ๋ณต๋ฉ๋๋ค. ํ๋์ ํ๋ก์ธ์ค๊ฐ ๋๊ธฐํด์ผ ํ ๋๋ง๋ค, ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ CPU ์ฌ์ฉ์ ์๋๋ฐ์ ์ ์์ต๋๋ค. ๋ค์ค ์ฝ์ด ์์คํ ์์ CPU๋ฅผ ๋ฐ์๊ฒ ์ ์งํ๋ ์ด ๊ฐ๋ ์ ์์คํ ์ ๋ชจ๋ ์ฒ๋ฆฌ ์ฝ์ด๋ก ํ์ฅ๋ฉ๋๋ค.
์ด๋ฌํ ์ข ๋ฅ์ ์ค์ผ์ค๋ง์ ์ด์์ฒด์ ์ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ๋๋ค. ๊ฑฐ์ ๋ชจ๋ ์ปดํจํฐ ์์๋ค์ ์ฌ์ฉ๋๊ธฐ ์ ์ ์ค์ผ์ค ๋ฉ๋๋ค. ๋ฌผ๋ก CPU๋ ์ค์ํ ์ปดํจํฐ ์์ ์ค์ ํ๋์ ๋๋ค. ๋ฐ๋ผ์ CPU ์ค์ผ์ค๋ง์ ์ด์์ฒด์ ์ค๊ณ์ ํต์ฌ์ด ๋ฉ๋๋ค.
(1) CPU ์ค์ผ์ค๋ฌ(_CPU Scheduler)
CPU๊ฐ ์ ํด ์ํ๊ฐ ๋ ๋๋ง๋ค, ์ด์์ฒด์ ๋ ์ค๋น ํ์ ์๋ ํ๋ก์ธ์ค ์ค์์ ํ๋๋ฅผ ์ ํํด์ผ ํฉ๋๋ค. ์ ํ ์ ์ฐจ๋ CPU ์ค์ผ์ค๋ฌ์ ์ํด ์ํด๋ฉ๋๋ค. ์ค์ผ์ค๋ฌ๋ ์คํ ์ค๋น๊ฐ ๋์ด ์๋ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ํ๋ก์ธ์ค ์ค์์ ์ ํํ์ฌ, ์ด๋ค ์ค ํ๋์๊ฒ CPU๋ฅผ ํ ๋นํฉ๋๋ค.
์ค๋น ํ๋ ๋ฐ๋์ ์ ์ ์ ์ถ(FIFO) ๋ฐฉ์์ ํ๊ฐ ์๋์ด๋ ๋๋ ๊ฒ์ ์ ์ํด์ผ ํฉ๋๋ค. ์ฌ๋ฌ ๊ฐ์ง ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ๋ค์ ๊ณ ๋ คํ ๋ ์๊ฒ ๋๊ฒ ์ง๋ง, ์ค๋น ํ๋ ์ ์ ์ ์ถ ํ, ์ฐ์ ์์ ํ, ํธ๋ฆฌ ๋๋ ๋จ์ํ ์์๊ฐ ์๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ตฌํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ๋ ์ ์ผ๋ก ๋ณผ ๋ ์ค๋น ํ์ ์๋ ๋ชจ๋ ํ๋ก์ธ์ค๋ค์ CPU์์ ์คํ๋ ๊ธฐํ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๋๊ธฐํ๊ณ ์์ต๋๋ค. ํ์ ์๋ ๋ ์ฝ๋๋ค์ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก์ธ์ค๋ค์ ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก(PCB)๋ค์ ๋๋ค.
(2) ์ ์ ๋ฐ ๋น์ ์ ์ค์ผ์ค๋ง(_Preemptive and Nonpreemptive Scheduling)
CPU ์ค์ผ์ค๋ง ๊ฒฐ์ ์ ๋ค์์ ๋ค ๊ฐ์ง ์ํฉ์์ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ํ ํ๋ก์ธ์ค๊ฐ ์คํ ์ํ์์ ๋๊ธฐ ์ํ๋ก ์ ํ๋ ๋
- ํ๋ก์ธ์ค๊ฐ ์คํ ์ํ์์ ์ค๋น ์๋ฃ ์ํ๋ก ์ ํ๋ ๋(์: ์ธํฐ๋ฝํธ ๋ฐ์)
- ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ ์ํ์์ ์ค๋น ์๋ฃ ์ํ๋ก ์ ํ๋ ๋(์: I/O ์ข ๋ฃ ์)
- ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃํ ๋
์ํฉ 1๊ณผ 4์ ๊ฒฝ์ฐ, ์ค์ผ์ค๋ง ๋ฉด์์๋ ์ ํ์ ์ฌ์ง๊ฐ ์์ต๋๋ค. ์คํ์ ์ํด ์๋ก์ด ํ๋ก์ธ์ค(์ค๋น ํ์ ํ๋๋ผ๋ ์กด์ฌํ ๊ฒฝ์ฐ)๊ฐ ๋ฐ๋์ ์ ํ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ํฉ 2์ 3์ ์ํด์๋ ์ ํ์ ์ฌ์ง๊ฐ ์์ต๋๋ค.
์ํฉ 1๊ณผ 4์์๋ง ์ค์ผ์ค๋ง์ด ๋ฐ์ํ ๊ฒฝ์ฐ, ์ฐ๋ฆฌ๋ ์ด๋ฌํ ์ค์ผ์ค๋ง ๋ฐฉ๋ฒ์ ๋น์ ์ (nonpreemptive) ๋๋ ํ์กฐ์ (cooperative)๋ผ๊ณ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด, ๊ทธ๊ฒ์ ์ ์ (preemptive)์ด๋ผ๊ณ ํฉ๋๋ค. ๋น์ ์ ์ค์ผ์ค๋ง ํ์์๋, ์ผ๋จ CPU๊ฐ ํ ํ๋ก์ธ์ค์ ํ ๋น๋๋ฉด ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃํ๋ ์ง, ๋๋ ๋๊ธฐ ์ํ๋ก ์ ํํด CPU๋ฅผ ๋ฐฉ์ถํ ๋๊น์ง ์ ์ ํฉ๋๋ค. Windows, macOS, Linux ๋ฐ UNIX๋ฅผ ํฌํจํ ๊ฑฐ์ ๋ชจ๋ ์ต์ ์ด์์ฒด์ ๋ค์ ์ ์ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค.
์ ์ ํ ์ค์ผ์ค๋ฌ(Preemptive Scheduling) | ํ๋์ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค ๋์ ์ ํ๋ก์ธ์ค CPU๋ฅผ ์ฐจ์งํ (๋บ์) ์ ์์ |
๋น์ ์ ํ(Non-preemptive Scheduling) | ํ๋์ ํ๋ก์ธ์ค๊ฐ ๋๋์ง ์์ผ๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ CPU๋ฅผ ์ฌ์ฉํ (๋บ์) ์ ์์ |
์ด๋ฌํ ์ค์ผ์ค๋ง์ ํ๊ธฐ ์ํ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฒ๋ค์ ์๋์์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ค์ผ์ค๋ง ๊ธฐ์ค(_Scheduling Criteria)
์๋ก ๋ค๋ฅธ CPU ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ๋ค์ ๋ค๋ฅธ ํน์ฑ์ด ์์ผ๋ฉฐ ํ ๋ถ๋ฅ์ ํ๋ก์ธ์ค๋ค์ ๋ค๋ฅธ ๋ถ๋ฅ๋ณด๋ค ๋ ์ ํธํ ์ ์์ต๋๋ค. ํน์ ์ํฉ์์ ์ด๋ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๋ ค๋ฉด, ์ฐ๋ฆฌ๋ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ๋ค์ ์๋ก ๋ค๋ฅธ ํน์ฑ์ ๋ฐ๋์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
CPU ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ๋น๊ตํ๊ธฐ ์ํ ์ฌ๋ฌ ๊ธฐ์ค์ด ์ ์๋์์ต๋๋ค. ๋น๊ตํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํน์ฑ์ ๋ฐ๋ผ์ ์ต์ ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฐ์ ํ๋ ๋ฐ ํฐ ์ฐจ์ด๊ฐ ๋ฐ์ํฉ๋๋ค. ์ฌ์ฉ๋๋ ๊ธฐ์ค์ ๋ค์์ ํฌํจํฉ๋๋ค.
- ๋๊ธฐ์๊ฐ(waiting time): ํ๋ก์ธ์ค๊ฐ ์์ฑ๋ ํ ์คํ๋๊ธฐ ์ ๊น์ง ๋๊ธฐํ๋ ์๊ฐ(์ค๋น ํ์์ ๋๊ธฐํ ์๊ฐ)
- ํ๊ท ๋๊ธฐ ์๊ฐ: ๋ชจ๋ ํ๋ก์ธ์ค์ ๋๊ธฐ ์๊ฐ์ ํฉํ ๋ค ํ๋ก์ธ์ค์ ์๋ก ๋๋ ๊ฐ
- ์๋ต ์๊ฐ(response time): ์ฒซ ์์ ์ ์์ํ ํ ์ฒซ ๋ฒ์งธ ์ถ๋ ฅ(๋ฐ์)์ด ๋์ค๊ธฐ ์ ๊น์ง ์๊ฐ
- ์คํ์๊ฐ: ํ๋ก์ธ์ค ์์ ์ด ์์๋ ํ ์ข ๋ฃ๋๊ธฐ๊น์ง์ ์๊ฐ
- ๋ฐํ์๊ฐ(turn around time): ๋๊ธฐ ์๊ฐ์ ํฌํจํ์ฌ ์คํ์ด ์ข ๋ฃ๋ ๋๊น์ง์ ์๊ฐ
์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ(_Scheduling Algorithms)
๋๋ถ๋ถ์ ์ต์ CPU ์ํคํ ์ฒ์๋ ์ฌ๋ฌ ๊ฐ์ ์ฒ๋ฆฌ ์ฝ์ด๊ฐ ์์ง๋ง ์ด๋ฌํ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ฒ๋ฆฌ ์ฝ์ด๊ฐ ํ๋๋ฟ์ด๋ผ๊ณ ๊ฐ์ ํ๊ณ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
- ์ ์ ์ ์ฒ๋ฆฌ ์ค์ผ์ค๋ง(_First Come First-Served Scheduling, FCFS)
- ์ต๋จ ์์ ์ฐ์ ์ค์ผ์ค๋ง(_Short-Job- First Scheduling, SJF)
- ๋ผ์ด๋ ๋ก๋น ์ค์ผ์ค๋ง(_Round-Robin Scheduling, RR)
- ์ฐ์ ์์ ์ค์ผ์ค๋ง(_Priority Scheduling)
(1) ์ ์ ์ ์ฒ๋ฆฌ ์ค์ผ์ค๋ง(_First Come First-Served Scheduling, FCFS)
- ์ค๋น ํ์ ๋์ฐฉํ๋ฉด ์์๋๋ก CPU๋ฅผ ํ ๋นํ๋ ๋น์ ์ ํ ๋ฐฉ์
- ํ ๋ฒ ์คํ๋๋ฉด ๊ทธ ํ๋ก์ธ์ค๊ฐ ๋๋์ผ๋ง ๋ค์ ํ๋ก์ธ์ค๋ฅผ ์คํํ ์ ์์
- ํ๊ฐ ํ๋๋ผ ๋ชจ๋ ํ๋ก์ธ์ค๋ ์ฐ์ ์์๊ฐ ๋์ผ
ํ๋ก์ธ์ค๋ค์ด P1, P2, P3 ์์ผ๋ก ๋์ฐฉํ๊ณ , ์ ์ ์ ์ฒ๋ฆฌ ์์ผ๋ก ์๋น์ค๋ฐ๋๋ค๋ฉด, ๋ค์์ Gantt ์ฐจํธ์ ๋ณด์ธ ๊ฒฐ๊ณผ๋ฅผ ์ป์ต๋๋ค.
ํ๋ก์ธ์ค P1์ ๋๊ธฐ ์๊ฐ์0๋ฐ๋ฆฌ ์ด์ด๋ฉฐ, ํ๋ก์ธ์ค P2๋ 24๋ฐ๋ฆฌ ์ด์ด๊ณ , ํ๋ก์ธ์ค P3์ 27๋ฐ๋ฆฌ ์ด์ ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก, ํ๊ท ๋๊ธฐ์๊ฐ์(0+24+27)/3 = 17 ๋ฐ๋ฆฌ์ด์ ๋๋ค. ๊ทธ๋ฌ๋ ํ๋ก์ธ์ค๋ค์ด P2, P3, P4 ์์ผ๋ก ๋์ฐฉํ๋ฉด, ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ๊ท ๋๊ธฐ ์๊ฐ์ ์ด์ (6 + 0 + 3)/3 = 3๋ฐ๋ฆฌ ์ด์ ๋๋ค. ์ด๋ฌํ ๊ฐ์๋ ์๋นํ ํฐ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ ์ ์ ์ฒ๋ฆฌ ์ ์ฑ ํ์์ ํ๊ท ๋๊ธฐ ์๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก ์ต์๊ฐ ์๋๋ฉฐ, ํ๋ก์ธ์ค CPU ๋ฒ์คํธ ์๊ฐ์ด ํฌ๊ฒ ๋ณํ ๊ฒฝ์ฐ์๋ ํ๊ท ๋๊ธฐ ์๊ฐ๋ ์๋นํ ๋ณํ ์ ์์ต๋๋ค.
์ด๋ฌํ FCFS ์ค์ผ์ค๋ง์ ๋จ์ ์ ๋ชจ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ํ๋์ ๊ธด ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์๋ํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ํธ์ ํจ๊ณผ(convoy effect)์ ๋ฐ์์ ๋๋ค. ์ด ํจ๊ณผ๋ ์งง์ ํ๋ก์ธ์ค๋ค์ด ๋จผ์ ์ฒ๋ฆฌ๋๋๋ก ํ์ฉ๋ ๋๋ณด๋ค CPU์ ์ฅ์น ์ด์ฉ๋ฅ ์ด ์ ํ๋๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์ต๋๋ค.
(2) ์ต๋จ ์์ ์ฐ์ ์ค์ผ์ค๋ง(_Short-Job- First Scheduling, SJF)
- ์ค๋น ํ์ ์๋ ํ๋ก์ธ์ค ์ค์์ ์คํ ์๊ฐ์ด ๊ฐ์ฅ ์งง์ ์์ ๋ถํฐ CPU๋ฅผ ํ ๋นํ๋ ๋ฐฉ์
- FCFS์ ๋ฌธ์ ์ ์ธ ํธ์ ํจ๊ณผ(convoy effect)๋ฅผ ์ํํ์ฌ ์์คํ ์ ํจ์จ์ฑ์ ๋์
- ์ต์ ์์ฌ ์๊ฐ ์ฐ์ (shortest remaining time first) ์ค์ผ์ค๋ง ์ด๋ผ๊ณ ๋ ๋ถ๋ฆผ
SJF ์ค์ผ์ค๋ง์ ์ด์ฉํ๋ฉด, ์ฐ๋ฆฌ๋ ์์ ํ๋ก์ธ์ค๋ฅผ ๋ค์์ Gantt ์ฐจํธ์ ๊ฐ์ด ์ค์ผ์ค ํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค P1์ ๋๊ธฐ ์๊ฐ์ 3๋ฐ๋ฆฌ ์ด, ํ๋ก์ธ์ค p2์ ๋๊ธฐ ์๊ฐ์ 16๋ฐ๋ฆฌ ์ด, ํ๋ก์ธ์ค P3๋ 9๋ฐ๋ฆฌ ์ด์ด๊ณ , ํ๋ก์ธ์ค P4๋ 0์ด์ ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก, ํ๊ท ๋๊ธฐ ์๊ฐ์ (3 + 16 + 9 + 0)/4 = 7๋ฐ๋ฆฌ ์ด์ ๋๋ค. ๋น๊ต ์ฐจ์์์ ๋ง์ผ ์ ์ ์ ์ถ(FCFS) ์ค์ผ์ค๋ง์ ์ฌ์ฉํ๋ค๋ฉด, ํ๊ท ๋๊ธฐ์๊ฐ์ 10.25๋ฐ๋ฆฌ ์ด๊ฐ ๋์์ ๊ฒ์ ๋๋ค.
SJF ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ฃผ์ด์ง ํ๋ก์ธ์ค ์งํฉ์ ๋ํด ์ต์์ ํ๊ท ๋๊ธฐ ์๊ฐ์ ๊ฐ์ง๋ค๋ ์ ์์ ์ต์ ์์ ์ฆ๋ช ํ ์ ์์ต๋๋ค. ์งง์ ํ๋ก์ธ์ค๋ฅผ ๊ธด ํ๋ก์ธ์ค์ ์์ผ๋ก ์ด๋ํจ์ผ๋ก์จ, ์งง์ ํ๋ก์ธ์ค์ ๋๊ธฐ ์๊ฐ์ ๊ธด ํ๋ก์ธ์ค์ ๋๊ธฐ ์๊ฐ์ด ์ฆ๊ฐํ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ด ์ค์ผ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, ํ๊ท ๋๊ธฐ ์๊ฐ์ด ์ค์ด๋ญ๋๋ค.
SJF ์๊ณ ๋ฆฌ์ฆ์ด ์ต์ ์ด๊ธด ํ์ง๋ง, ๋ค์ CPU ๋ฒ์คํธ์ ๊ธธ์ด๋ฅผ ์ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ CPU ์ค์ผ์ค๋ง ์์ค์์๋ ๊ตฌํํ ์ ์์ต๋๋ค.
(3) ๋ผ์ด๋ ๋ก๋น ์ค์ผ์ค๋ง(_Round-Robin Scheduling, RR)
- ํ ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ ์๊ฐ(ํ์ ์ฌ๋ผ์ด์ค: time slice, time quantum) ๋์ ์์ ์ ํ๋ค๊ฐ ์์ ์ ์๋ฃํ์ง ๋ชปํ๋ฉด ์ค๋น ํ์ ๋งจ ๋ค๋ก ๊ฐ์ ์๊ธฐ ์ฐจ๋ก๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ์
- ์ ์ ํ ์๊ณ ๋ฆฌ์ฆ ์ค ๊ฐ์ฅ ๋จ์ํ๊ณ ๋ํ์ ์ธ ๋ฐฉ์
- ํ๋ก์ธ์ค๋ค์ด ์์ ์ ์๋ฃํ ๋๊น์ง ๊ณ์ ์ํํ๋ฉด์ ์คํ
๋ง์ผ ์ฐ๋ฆฌ๊ฐ ์๊ฐ ํ ๋น๋์ 4๋ฐ๋ฆฌ์ด๋ก ํ๋ค๋ฉด, ํ๋ก์ธ์ค P1์ ์ฒ์์ 4๋ฐ๋ฆฌ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ํ๋ก์ธ์ค๋ 20๋ฐ๋ฆฌ์ด๊ฐ ๋ ํ์ํ๊ธฐ ๋๋ฌธ์, ์ด ํ๋ก์ธ์ค๋ ์ฒซ ๋ฒ์งธ ์๊ฐ ํ ๋น๋ ์ดํ์ ์ ์ ๋๊ณ , CPU๋ ํ์ ์๋ ๋ค์ ํ๋ก์ธ์ค์ธ P2์ ํ ๋น๋ฉ๋๋ค. ํ๋ก์ธ์ค P2๋ 4๋ฐ๋ฆฌ์ด๋ฅผ ํ์๋ก ํ์ง ์๊ธฐ ๋๋ฌธ์, ์๊ฐ ํ ๋น๋์ด ๋๋๊ธฐ๋ ์ ์ ์ข ๋ฃํฉ๋๋ค. CPU๋ ์ด์ด ๋ค์ ํ๋ก์ธ์ค์ธ P3์ ํ ๋น๋ฉ๋๋ค. ์ผ๋จ ๊ฐ ํ๋ก์ธ์ค๊ฐ ํ ๋น๋์ ๋ฐ์ผ๋ฉด CPU๋ ๋ค์์ ์๊ฐ ํ ๋น๋์ ํ๋ก์ธ์ค P1์๊ฒ ํ ๋นํฉ๋๋ค. ๋ผ์ด๋ ๋ก๋น ์ค์ผ์ค์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด ์ค์ผ์ค์ ๋ฐ๋ฅด๋ ํ๊ท ๋๊ธฐ ์๊ฐ์ ๊ณ์ฐํด ๋ด ์๋ค. P1์ 6๋ฐ๋ฆฌ์ด(10 - 4)๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ , P2๋ 4๋ฐ๋ฆฌ์ด, ๊ทธ๋ฆฌ๊ณ P3๋ 7๋ฐ๋ฆฌ์ด๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค. ๋ฐ๋ผ์ ํ๊ท ๋๊ธฐ ์๊ฐ์ 17/3 = 5.66 ๋ฐ๋ฆฌ์ด์ ๋๋ค.
๋ผ์ด๋ ๋ก๋น ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์์๋, ์ ์ผํ๊ฒ ์คํ ๊ฐ๋ฅํ ํ๋ก์ธ์ค๊ฐ ์๋๋ผ๋ฉด ์ฐ์์ ์ผ๋ก ๋ ๋ฒ ์ด์์ ์๊ฐ ํ ๋น๋์ ํ ๋น๋ฐ๋ ํ๋ก์ธ์ค๋ ์์ต๋๋ค. ๋ง์ผ CPU ๋ฒ์คํธ๊ฐ ํ ๋ฒ์ ์๊ฐ ํ ๋น๋์ ์ด๊ณผํ๋ฉด, ํ๋ก์ธ์ค๋ ์ ์ ๋๊ณ ์ค๋น ํ๋ก ๋๋์๊ฐ๋๋ค. ๋ฐ๋ผ์ RR ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ ์ ํ์ ๋๋ค.
ํ์ ์ฌ๋ผ์ด์ค(Time Slice or Time Quantum)์ ํฌ๊ธฐ์ ๋ฌธ๋งฅ ๊ตํ
-> ๋ผ์ด๋ ๋ก๋น ์ค์ผ์ค๋ง์ด ํจ๊ณผ์ ์ผ๋ก ์๋ํ๋ ค๋ฉด ๋ฌธ๋งฅ ๊ตํ์ ๋ฐ๋ฅธ ์ถ๊ฐ ์๊ฐ์ ๊ณ ๋ คํ์ฌ ํ์ ์ฌ๋ผ์ด์ค๋ฅผ ์ ์ ํ ์ค์ ํด์ผ ํจ
ํ์ ์ฌ๋ผ์ด์ค๊ฐ ํฐ ๊ฒฝ์ฐ
-> ํ๋์ ์์
์ด ๋๋ ๋ค ๋ค์ ์์
์ด ์์๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ฌ FCFS ์ค์ผ์ค๋ง๊ณผ ๋ค๋ฅผ๊ฒ ์์
ํ์ ์ฌ๋ผ์ด์ค๊ฐ ์์ ๊ฒฝ์ฐ
-> ๋ฌธ๋งฅ ๊ตํ์ด ๋๋ฌด ์์ฃผ ์ผ์ด๋ ๋ฌธ๋งฅ ๊ตํ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ์ค์ ์์
์๊ฐ๋ณด๋ค ์๋์ ์ผ๋ก ์ปค์ง๋ฉฐ, ๋ฌธ๋งฅ ๊ตํ์ ๋ง์ ์๊ฐ์ ๋ญ๋นํ์ฌ ์ค์ ์์
์ ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์
๋ฐ๋ผ์ RR์ค์ผ์ค๋ง์ ํ์ ์ฌ๋ผ์ด์ค๋ ๋๋๋ก ์๊ฒ ์ค์ ํ๋ ๋ฌธ๋งฅ ๊ตํ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ณ ๋ คํ์ฌ ์ ๋นํ ํฌ๊ธฐ๋ก ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
(4)์ฐ์ ์์ ์ค์ผ์ค๋ง(_Priority Scheduling)
SJF ์๊ณ ๋ฆฌ์ฆ์ ์ผ๋ฐ์ ์ธ ์ฐ์ ์์ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ํน๋ณํ ๊ฒฝ์ฐ์ ๋๋ค. ์ฐ์ ์์๊ฐ ๊ฐ ํ๋ก์ธ์ค๋ค์ ์ฐ๊ด๋์ด ์์ผ๋ฉฐ, CPU๋ ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค์ ํ ๋น๋ฉ๋๋ค. ์ฐ์ ์์๊ฐ ๊ฐ์ ํ๋ก์ธ์ค๋ค์ ์ ์ ์ ์ฒ๋ฆฌ(FCFS) ์์๋ก ์ค์ผ์ค ๋ฉ๋๋ค. SJF ์๊ณ ๋ฆฌ์ฆ์ ์ฐ์ ์์๊ฐ ์์๋๋ ๋ค์ CPU ๋ฒ์คํธ์ ์ญ์ธ ๋จ์ํ ์ฐ์ ์์ ์๊ณ ๋ฆฌ์ฆ ์ ๋๋ค. CPU ๋ฒ์คํธ๊ฐ ํด์๋ก ์ฐ์ ์์๊ฐ ๋ฎ์ผ๋ฉฐ, ์ค๊ณ์ ๋ฐ๋ผ ๊ทธ ์ญ๋ ์ฑ๋ฆฝํฉ๋๋ค.
์ฐ์ ์์ ์ค์ผ์ค๋ง์ ์ด์ฉํด, ๋ค์์ Gantt ์ฐจํธ์ ๊ฐ์ด ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ์ค์ผ์ค ํ ์ ์์ต๋๋ค.
ํ๊ท ๋๊ธฐ ์๊ฐ์ 8.2๋ฐ๋ฆฌ์ด์ ๋๋ค.
์ฐ์ ์์ ์ค์ผ์ค๋ง์ ์ ์ ํ์ด๊ฑฐ๋ ๋๋ ๋น์ ์ ํ์ด ๋ ์ ์์ต๋๋ค. ํ๋ก์ธ์ค๊ฐ ์ค๋น ํ์ ๋์ฐฉํ๋ฉด, ์๋ก ๋์ฐฉํ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ์ฐ์ ์์์ ๋น๊ตํฉ๋๋ค.
- ์ ์ ํ ์ฐ์ ์์ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ: ์๋ก ๋์ฐฉํ ํ๋ก์ธ์ค์ ์ฐ์ ์์๊ฐ ํ์ฌ ์คํ๋๋ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ณด๋ค ๋๋ค๋ฉด CPU๋ฅผ ์ ์ ํ๋ค.
- ๋น์ ์ ํ ์ฐ์ ์์ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ: ๋จ์ํ ์ค๋น์๋ฃ ํ์ ๋จธ๋ฆฌ ๋ถ๋ถ์ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ๋ฃ๋๋ค.
์ฐ์ ์์ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ฃผ์ ๋ฌธ์ ๋ ๋ฌดํ ๋ด์(indefinite blocking) ๋๋ ๊ธฐ์ ์ํ(starvation)์ ๋๋ค. ์คํ ์ค๋น๋ ๋์ด ์์ผ๋ CPU๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋ ํ๋ก์ธ์ค๋ CPU๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉด์ ๋ด์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ ์ ์์ต๋๋ค. ์ฐ์ ์์ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฎ์ ์ฐ์ ์์ ํ๋ก์ธ์ค๋ค์ด CPU๋ฅผ ๋ฌดํํ ๋๊ธฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ถํ๊ฐ ๊ณผ์คํ ์ปดํจํฐ ์์คํ ์์๋ ๋์ ์ฐ์ ์์์ ํ๋ก์ธ์ค๋ค์ด ๊พธ์คํ ๋ค์ด์์ ๋ฎ์ ์ฐ์ ์์์ ํ๋ก์ธ์ค๋ค์ด CPU๋ฅผ ์ป์ง ๋ชปํ๊ฒ ๋ ์๋ ์์ต๋๋ค.
๋ฎ์ ์ฐ์ ์์์ ํ๋ก์ธ์ค๋ค์ด ๋ฌดํํ ๋ด์๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- ๋ ธํ(aging)
- ๋ผ์ด๋ ๋ก๋น๊ณผ ์ฐ์ ์์ ์ค์ผ์ค๋ง์ ๊ฒฐํฉ
์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ธ ๋ ธํ(aging)๋ ์ค๋ซ๋์ ์์คํ ์์ ๋๊ธฐํ๋ ํ๋ก์ธ์ค๋ค์ ์ฐ์ ์์๋ฅผ ์ ์ง์ ์ผ๋ก ์ฆ๊ฐ์ํต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฐ์ ์์๊ฐ 127(๋ฎ์)์์ 0(๋์)๊น์ง์ ๋ฒ์๋ผ๋ฉด, ์ฐ๋ฆฌ๋ ์ฃผ๊ธฐ์ ์ผ๋ก(์, 1์ด๋ง๋ค) ๋๊ธฐ ์ค์ธ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ 1์ฉ ์ฆ๊ฐ์ํฌ ์ ์์ ๊ฒ์ ๋๋ค. ๊ฒฐ๊ตญ์๋ ์ด๊ธฐ์ ์ฐ์ ์์๊ฐ 127์ด์๋ ํ๋ก์ธ์ค๋ ์์คํ ์์ ์ต๊ณ ์ ์ฐ์ ์์๋ฅผ ๊ฐ๊ฒ ๋์ด ์คํ ๋ ๊ฒ์ ๋๋ค.
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋ผ์ด๋ ๋ก๋น๊ณผ ์ฐ์ ์์ ์ค์ผ์ค๋ง์ ๊ฒฐํฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์์คํ ์ด ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ํ๋ก์ธ์ค๋ฅผ ์คํํ๊ณ ์ฐ์ ์์๊ฐ ๊ฐ์ ํ๋ก์ธ์ค๋ค์ ๋ผ์ด๋ ๋ก๋น ์ค์ผ์ค๋ง์ ์ฌ์ฉํ์ฌ ์ค์ผ์ค ํ๋ ๋ฐฉ์์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ํ๋ก์ธ์ค ์งํฉ์ ์๋ก ๋ค์ด ์ค์ผ์ค๋ง์ ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค. ํ๋ก์ธ์ค์ ๋ฒ์คํธ๋ ๋ฐ๋ฆฌ์ด ๋จ์์ ๋๋ค.
์ฐ์ ์์ ์ค์ผ์ค๋ง๊ณผ ์ฐ์ ์์๊ฐ ๊ฐ์ ํ๋ก์ธ์ค๋ค์ ๋ผ์ด๋ ๋ก๋น์ผ๋ก ์ค์ผ์ค๋งํ๊ณ , ์๊ฐ ํ ๋น๋์ 2๋ฐ๋ฆฌ์ด๋ก ํ์ ๊ฒฝ์ฐ ์ ํ๋ก์ธ์ค๋ค์ ๋ค์ Gantt ์ฐจํธ์ ๊ฐ์ด ์ค์ผ์ค๋ง ๋ ๊ฒ์ ๋๋ค.
์ด ์์์ ํ๋ก์ธ์ค P4์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ผ๋ฏ๋ก ์๋ฃ๋ ๋๊น์ง ์คํ๋ฉ๋๋ค. ํ๋ก์ธ์ค P2 ๋ฐ P3๋ ๋ค์์ผ๋ก ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ฉฐ ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์์ผ๋ก ์คํ๋ฉ๋๋ค. ํ๋ก์ธ์ค P2๊ฐ ์๊ฐ 16์์ ์๋ฃ๋๋ฉด ํ๋ก์ธ์ค P3๊ฐ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ํ๋ก์ธ์ค์ด๋ฏ๋ก ์คํ์ด ์๋ฃ๋ ๋๊น์ง ์คํ๋ฉ๋๋ค. ์ด์ ํ๋ก์ธ์ค P1๊ณผ P5๋ง ๋จ์ ์์ผ๋ฉฐ ์ฐ์ ์์๊ฐ ๊ฐ์ผ๋ฏ๋ก ์๋ฃ๋ ๋๊น์ง ๋ผ์ด๋ ๋ก๋น ์์๋ก ์คํ๋ฉ๋๋ค.
์ ๋ฆฌ
- CPU ์ค์ผ์ค๋ง์ ์ค๋น ํ์์ ๋๊ธฐ ํ๋ก์ธ์ค๋ฅผ ์ ํํ๊ณ CPU๋ฅผ ํ ๋นํ๋ ์์ ์ด๋ค. ๋์คํจ์ฒ์ ์ํด ์ ํ๋ ํ๋ก์ธ์ค์ CPU๊ฐ ํ ๋น๋๋ค.
- ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ ์ ์ (CPU๋ฅผ ํ๋ก์ธ์ค๋ก๋ถํฐ ๋บ์ ์ ์๋ ๊ฒฝ์ฐ) ๋๋ ๋น์ ์ ์ (ํ๋ก์ธ์ค๊ฐ ์๋ฐ์ ์ผ๋ก CPU ์ ์ด๋ฅผ ํฌ๊ธฐํด์ผ ํ๋ ๊ฒฝ์ฐ)์ผ ์ ์๋ค. ๊ฑฐ์ ๋ชจ๋ ์ต์ ์ด์์ฒด์ ๊ฐ ์ ์ ์ ์ด๋ค.
- ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ (1) CPU ์ด์ฉ๋ฅ , (2) ์ฒ๋ฆฌ๋, (3) ์ด์ฒ๋ฆฌ ์๊ฐ, (4) ๋๊ธฐ ์๊ฐ, (5) ์๋ต ์๊ฐ์ 5๊ฐ์ง ๊ธฐ์ค์ ๋ฐ๋ผ ํ๊ฐํ ์ ์๋ค.
- ์ ์ ์ ์ฒ๋ฆฌ(FCFS) ์ค์ผ์ค๋ง์ ๊ฐ์ฅ ๋จ์ํ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ด์ง๋ง ์งง์ ํ๋ก์ธ์ค๊ฐ ๋งค์ฐ ๊ธด ํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ ์ ์๋ค.
- ์ต๋จ ์์ ์ฐ์ (SJF) ์ค์ผ์ค๋ง์ ์ต์ ์ด๋ฉฐ ํ๊ท ๋๊ธฐ ์๊ฐ์ด ๊ฐ์ฅ ์งง๋ค. ๊ทธ๋ฌ๋ ๋ค์ CPU ๋ฒ์คํธ์ ๊ธธ์ด๋ฅผ ์์ธกํ๊ธฐ ์ด๋ ค์ฐ๋ฏ๋ก SJF ์ค์ผ์ค๋ง์ ๊ตฌํํ๋ ๊ฒ์ ์ด๋ ต๋ค.
- ๋ผ์ด๋ ๋ก๋น(RR) ์ค์ผ์ค๋ง์ CPU๋ฅผ ์๊ฐ ํ ๋น๋ ๋์ ํ๋ก์ธ์ค์ ํ ๋นํ๋ค. ํ๋ก์ธ์ค๊ฐ ์๊ฐ ํ ๋น๋์ด ๋ง๋ฃ๋๊ธฐ ์ ์ CPU๋ฅผ ํฌ๊ธฐํ์ง ์์ผ๋ฉด ํ๋ก์ธ์ค๊ฐ ์ ์ ๋๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์๊ฐ ํ ๋น๋ ๋์ ์คํ๋๋๋ก ์ค์ผ์ค ๋๋ค.
- ์ฐ์ ์์ ์ค์ผ์ค๋ง์ ๊ฐ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ๋ฐฐ์ ํ๊ณ CPU๋ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ํ๋ก์ธ์ค์ ํ ๋น๋๋ค. ์ฐ์ ์์๊ฐ ๋์ผํ ํ๋ก์ธ์ค๋ FCFS ์์๋ก ๋๋ RR ์ค์ผ์ค๋ง์ ์ฌ์ฉํ์ฌ ์ค์ผ์ค ํ ์ ์๋ค.
'ComputerScience ๐ > ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[OS] ๊ต์ฐฉ ์ํ(Deadlocks) (0) | 2022.03.10 |
---|---|
[OS] ์์ฌํ๋ ์ฒ ํ์๋ค ๋ฌธ์ (The Dining-Philosophers Problem) (0) | 2022.03.02 |
[OS] ํ๋ก์ธ์ค ๋๊ธฐํ(Process Synchronization) (0) | 2022.02.24 |
[OS] ์ค๋ ๋ ํ(thread pool) (0) | 2022.02.14 |
[OS] ์ค๋ ๋์ ๋์์ฑ(Thread & Concurrency) (0) | 2022.02.14 |
[OS] IPC ์์คํ ์ ์ฌ๋ก(Examples of IPC Systems) (0) | 2022.02.10 |
๋๊ธ