CPU Scheduling - hochan222/Everything-in-JavaScript GitHub Wiki
CPU and I/O Bursts in Program Execution
- ์ฌ๋ฌ ์ข
๋ฅ์ job(=process)๊ฐ ์์ฌ ์๊ธฐ ๋๋ฌธ์ CPU ์ค์ผ์ค๋ง์ด ํ์ํ๋ค
- interactive job์๊ฒ ์ ์ ํ response ์ ๊ณต ์๋ง
- CPU์ I/O ์ฅ์น ๋ฑ ์์คํ ์์์ ๊ณจ๊ณ ๋ฃจ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ
ํ๋ก์ธ์ค์ ํน์ฑ ๋ถ๋ฅ
- ํ๋ก์ธ์ค๋ ๊ทธ ํน์ฑ์ ๋ฐ๋ผ ๋ค์ ๋๊ฐ์ง๋ก ๋๋
- I/O bound process
- CPU๋ฅผ ์ก๊ณ ๊ณ์ฐํ๋ ์๊ฐ๋ณด๋ค I/O์ ๋ง์ ์๊ฐ์ด ํ์ํ job
- (many short CPU bursts)
- CPU-bound process
- ๊ณ์ฐ ์์ฃผ์ job
- (few very long CPU bursts)
- I/O bound process
CPU Scheduler & Dispatcher
-
CPU Scheduler
- Ready ์ํ์ ํ๋ก์ธ์ค ์ค์์ ์ด๋ฒ์ CPU๋ฅผ ์ค ํ๋ก์ธ์ค๋ฅผ ๊ณ ๋ฅธ๋ค.
-
Dispatcher
- CPU์ ์ ์ด๊ถ์ CPU scheduler์ ์ํด ์ ํ๋ ํ๋ก์ธ์ค์๊ฒ ๋๊ธด๋ค.
- ์ด ๊ณผ์ ์ context switch๋ผ๊ณ ํ๋ค.
-
CPU ์ค์ผ์ค๋ง์ด ํ์ํ ๊ฒฝ์ฐ๋ ํ๋ก์ธ์ค์๊ฒ ๋ค์๊ณผ ๊ฐ์ ์ํ ๋ณํ๊ฐ ์๋ ๊ฒฝ์ฐ์ด๋ค.
- 1: Running -> Blocked (์: I/O ์์ฒญํ๋ ์์คํ ์ฝ)
- 2: Running -> Ready (์: ํ ๋น์๊ฐ๋ง๋ฃ๋ก timer interrupt)
- 3: Blocked -> Ready (์: I/O ์๋ฃ ํ ์ธํฐ๋ฝํธ)
- 4: Terminate
1, 4์์์ ์ค์ผ์ค๋ง์ nonpreemptive(=๊ฐ์ ๋ก ๋บด์์ง ์๊ณ ์์ง ๋ฐ๋ฉ)
๋ค๋ฅธ๊ฑด ๊ฐ์ ๋ก ๋บ์ preemptive
Scheduling Criteria
- CPU utilization (์ด์ฉ๋ฃ)
- keep the CPU as busy as possible
- Throughput (์ฒ๋ฆฌ๋)
- of processes that complete their execution per time unit
- Turnaround time (์์์๊ฐ, ๋ฐํ์๊ฐ)
- amount of time to execute a particular process
- Waiting time (๋๊ธฐ์๊ฐ)
- amount of time a process has been waiting in the ready queue
- Response time (์๋ต ์๊ฐ) (์ต์ด CPU์ป๊ธฐ๊น์ง ์๊ฐ)
- amount of time it takes from when a request was submitted until the first response is produced, not output
Scheduling algorithm
- FCFS (First-Come First-Served)
- nonpreemptive
- Convoy effect
- SJF (Shortest-Job-First)
- ์ฃผ์ด์ง ํ๋ก์ธ์ค๋ค์ ๋ํด minimum average waiting time ๋ณด์ฅ
- Nonpreemptive
- ์ผ๋จ CPU๋ฅผ ์ก์ผ๋ฉด ์ด๋ฒ CPU burst๊ฐ ์๋ฃ๋ ๋๊น์ง CPU๋ฅผ ์ ์ ๋นํ์ง ์์
- Preemptive
- ํ์ฌ ์ํ์ค์ธ ํ๋ก์ธ์ค์ ๋จ์ burst time๋ณด๋ค ๋ ์งง์ CPU burst time์ ๊ฐ์ง๋ ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ๋ฉด CPU๋ฅผ ๋นผ์๊น
- ์ด ๋ฐฉ๋ฒ์ Shortest-Remaining-Time-First(SRTF)์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
- ๋ฌธ์
- long process starvation (์๊ฐ ๊ธด๊ฑฐ๋ ์์ ๋ชป ์ธ์ ์์)
- CPU burst time์ ๋ฏธ๋ฆฌ ์ ์ ์์
- ๊ณผ๊ฑฐ์ CPU burst time์ ์ด์ฉํด์ ์ถ์
- Priority Scheduling
- Preemptive
- Nonpreemptive
- ๋ฌธ์
- starvation ํน์ ํ๋ก์ธ์ค ์ฐจ๋ณ
- => aging ์ค๋ ๊ธฐ๋ฌ๋ฆฌ๊ฒ๋๋ฉด ์ฐ์ ์์๋ฅผ ๋์ฌ์ฃผ์.
- Round Robin (RR)
- ๊ฐ ํ๋ก์ธ์ค๋ ๋์ผํ ํฌ๊ธฐ์ ํ ๋น ์๊ฐ์ ๊ฐ์ง.
- ํ ๋น ์๊ฐ์ด ์ง๋๋ฉด ํ๋ก์ธ์ค๋ ์ ์ ๋นํ๊ณ ready queue์ ์ ์ผ ๋ค์ ๊ฐ์ ๋ค์ ์ค์ ์ ๋ค
- n๊ฐ์ ํ๋ก์ธ์ค๊ฐ ready queue์ ์๊ณ ํ ๋น ์๊ฐ์ด q time unit์ธ ๊ฒฝ์ฐ ๊ฐ ํ๋ก์ธ์ค๋ ์ต๋ q time unit ๋จ์๋ก CPU ์๊ฐ์ 1/n์ ์ป๋๋ค.
- Perfomance
- q large => FCFS
- q small => context switch ์ค๋ฒํค๋
- Multilevel Queue
- forground (interactive, RR)
- background (batch - no human interaction, FCFS)
- Multilevel Feedback Queue
- ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก ์ด๋ ๊ฐ๋ฅ
- ์์ด์ง์ ์ด์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์๋ค.
- Multiple -Processor Scheduling
- CPU๊ฐ ์ฌ๋ฌ๊ฐ์ธ ๊ฒฝ์ฐ ์ค์ผ์ค๋ง์ ๋์ฑ ๋ณต์กํด์ง
- Homogeneous processor์ธ ๊ฒฝ์ฐ
- Queue์ ํ์ค๋ก ์ธ์์ ๊ฐ ํ๋ก์ธ์๊ฐ ์์์ ๊บผ๋ด๊ฐ๊ฒ ํ ์ ์๋ค.
- Load sharing
- ์ผ๋ถ ํ๋ก์ธ์์ job์ด ๋ชฐ๋ฆฌ์ง ์๋๋ก ๋ถํ๋ฅผ ์ ์ ํ ๊ณต์ ํ๋ ๋ฉ์ปค๋์ฆ
- ๋ณ๊ฐ์ ํ๋ฅผ ๋๋ ๋ฐฉ๋ฒ vs ๊ณต๋ ํ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- symmetric Multiprocessing (SMP)
- ๊ฐ ํ๋ก์ธ์๊ฐ ๊ฐ์ ์์์ ์ค์ผ์ค๋ง ๊ฒฐ์
- Asymmetric multiprocessing
- ํ๋์ ํ๋ก์ธ์๊ฐ ์์คํ ๋ฐ์ดํฐ์ ์ ๊ทผ๊ณผ ๊ณต์ ๋ฅผ ์ฑ ์์ง๊ณ ๋๋จธ์ง ํ๋ก์ธ์๋ ๊ฑฐ๊ธฐ์ ๋ฐ๋ฆ
- Real-Time Scheduling
- Hard real-time Scheduling
- ๋ฐ๋์ ์ ํด์ง ์๊ฐ์์ ๋๋ด๋๋ก ์ค์ผ์ค๋ง ๋ผ์ผํจ
- Soft real-time Scheduling
- ์ผ๋ฐ ํ๋ก์ธ์ค์ ๋นํด ๋์ priority๋ฅผ ๊ฐ๊ฒํจ
- Hard real-time Scheduling
- Thread Scheduling
- Local Scheduling
- User level thread์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์์ค์ thread library์ ์ํด ์ด๋ค thread๋ฅผ ์ค์ผ์คํ ์ง ๊ฒฐ์
- ์ด์์ฒด์ ๋ thread์ ์กด์ฌ๋ฅผ ๋ชจ๋ฆ
- Global Scheduling
- Kernel level thread์ ๊ฒฝ์ฐ ์ผ๋ฐ ํ๋ก์ธ์ค์ ๋ง์ฐฌ ๊ฐ์ง๋ก ์ปค๋์ ๋จ๊ธฐ ์ค์ผ์ค๋ฌ๊ฐ ์ด๋ค thread๋ฅผ ์ค์ผ์คํ ์ง ๊ฒฐ์
- Local Scheduling
Algorithm Evaluation
- Queueing models
- Implementation(๊ตฌํ) & Measurement(์ฑ๋ฅ ์ธก์ )
- ์ค์ ์์คํ ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ์ฌ ์ค์ ์์ ์ ๋ํด์ ์ฑ๋ฅ์ ์ธก์ ๋น๊ต
- Simulation(๋ชจ์ ์คํ)
- ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ์ ํ๋ก๊ทธ๋จ์ผ๋ก ์์ฑํ trace๋ฅผ ์ ๋ ฅ์ผ๋ก ํ์ฌ ๊ฒฐ๊ณผ ๋น๊ต