[OS] CPU ์ค์ผ์ค๋ง
CPU and I/O Bursts in Program Execution
- CPU burst : CPU๋ฅผ ๊ฐ์ง๊ณ ๊ธฐ๊ณ์ด๋ฅผ ์คํํ๋ ๋จ๊ณ
- I/O burst : ์๊ฐ์ด ์ข ๊ฑธ๋ฆฌ๋ I/O ์์ ์ ํ๋ ๋จ๊ณ
CPU-burst Time์ ๋ถํฌ
ํ๋ก์ธ์ค์ ํน์ฑ ๋ถ๋ฅ
ํ๋ก์ธ์ค๋ ๊ทธ ํน์ฑ์ ๋ฐ๋ผ ๋ ๊ฐ์ง๋ก ๋๋
- I/O bound job : CPU๋ฅผ ์งง๊ฒ ์ฐ๋ ํ๋ก๊ทธ๋จ
- ์ฃผ๋ก ์ฌ๋ํ๊ณ interactionํ๋ ํ๋ก๊ทธ๋จ์ด ๋ง์ -> CPU๋ฅผ ๋นจ๋ฆฌ ์ค์ผํจ
- CPU๋ฅผ ์ก๊ณ ๊ณ์ฐํ๋ ์๊ฐ๋ณด๋ค I/O์ ๋ง์ ์๊ฐ์ด ํ์ํ job
- many short CPU bursts
- CPU bound job : CPU๋ฅผ ๊ธธ๊ฒ ์ฐ๋ ํ๋ก๊ทธ๋จ
- ๋ณต์กํ ๊ณ์ฐ์ ํ๋ ํ๋ก๊ทธ๋จ -> 5์ด ์๋ค๊ฐ CPU๋ฅผ ์ค๋ ๋ฌธ์ ๋์ง ์์
- ๊ณ์ฐ ์์ฃผ์ job
- few very long CPU bursts
์์คํ ์ ์ฌ๋ฌ ์ข ๋ฅ์ job(=process)์ด ์์ฌ ์๊ธฐ ๋๋ฌธ์ CPU ์ค์ผ์ค๋ง์ด ํ์ํจ
- Interactive job(= I/O bound job)์๊ฒ ์ ์ ํ response ์ ๊ณต ์๋ง
- CPU bound job๋ณด๋ค I/O bound job์๊ฒ CPU๋ฅผ ๋จผ์ ํ ๋น ํด์ค์ผํจ
-> CPU๋ฅผ ์งง๊ฒ ์ฐ๊ณ ๋๋ ค์ฃผ๊ธฐ ๋๋ฌธ์
- CPU bound job๋ณด๋ค I/O bound job์๊ฒ CPU๋ฅผ ๋จผ์ ํ ๋น ํด์ค์ผํจ
- CPU์ I/O ์ฅ์น ๋ฑ ์์คํ ์์์ ๊ณจ๊ณ ๋ฃจ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ
CPU Scheduler & Dispatcher
CPU Scheduler
- Ready ์ํ์ ํ๋ก์ธ์ค ์ค์์ ์ด๋ฒ์ CPU๋ฅผ ์ค ํ๋ก์ธ์ค๋ฅผ ๊ณ ๋ฆ
Dispatcher
- CPU์ ์ ์ด๊ถ์ CPU scheduler์ ์ํด ์ ํ๋ ํ๋ก์ธ์ค์๊ฒ ๋๊น
- ์ด ๊ณผ์ ์ context switch(๋ฌธ๋งฅ ๊ตํ)๋ผ๊ณ ํจ
CPU ์ค์ผ์ค๋ง์ด ํ์ํ ๊ฒฝ์ฐ๋ ํ๋ก์ธ์ค์๊ฒ ์๋์ ๊ฐ์ ์ํ ๋ณํ๊ฐ ์๋ ๊ฒฝ์ฐ
- Running -> Blocked (์: I/O ์์ฒญํ๋ ์์คํ ์ฝ)
- Running -> Ready (์: ํ ๋น์๊ฐ๋ง๋ฃ๋ก timer interrupt)
- Blocked -> Ready (์: I/O ์๋ฃํ ์ธํฐ๋ฝํธ)
- Terminate (์: ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋์์ ๋)
- 1, 4์์์ ์ค์ผ์ค๋ง์ nonpreemptive(= ๊ฐ์ ๋ก ๋นผ์์ง ์๊ณ ์์ง ๋ฐ๋ฉ)
- 2, 3์์์ ์ค์ผ์ค๋ง์ preemptive(= ๊ฐ์ ๋ก ๋นผ์์)
- CPU ์ค์ผ์ค๋ง์ ํฌ๊ฒ nonpreemptive์ preemptive๋ก ๊ตฌ๋ถ๋จ
Scheduling Criteria
- Performance Index(= Performance Measure, ์ฑ๋ฅ ์ฒ๋)
- CPU ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ ์ค์ ์ด๋ค๊ฒ ์ข์์ง ํ๋จํ ์ ์๋ ๋ฐฉ๋ฒ
- CPU utilization(์ด์ฉ๋ฅ )
- keep the CPU as busy as possible
- CPU ์ด์ฉ ์๊ฐ / ์ ์ฒด ์๊ฐ -> ๋์ ์๋ก ์ข์
- Throughput(์ฒ๋ฆฌ๋)
- of processes that complete their execution per time unit
- ์ฒ๋ฆฌ๋ / ๋จ์ ์๊ฐ -> ๋์ ์๋ก ์ข์
- Turnaround time(์์์๊ฐ, ๋ฐํ์๊ฐ)
- amount of time to execute a particular process
- CPU burst์ ๋ค์ด์์ I/O burst๋ก ๋๊ฐ ๋๊น์ง ์ ์ฒด ์๊ฐ
- CPU ์ฌ์ฉ ์๊ฐ + CPU ๊ธฐ๋ค๋ฆฐ ์๊ฐ(Ready queue์ ๊ธฐ๋ค๋ฆฐ ์๊ฐ)
- Waiting time(๋๊ธฐ ์๊ฐ)
- amount of time a process has been waiting in the ready queue
- CPU ๊ธฐ๋ค๋ฆฐ ์๊ฐ์ ํฉ
- CPU ์ป์๋ค๊ฐ ๋นผ์๊ฒผ๋ค๊ฐ ํ๋ฉด์ Ready queue์์ ๊ธฐ๋ค๋ฆฐ ์ด ์๊ฐ
- Response time(์๋ต ์๊ฐ)
- amount of time it takes from when a request was submitted until the first response is produced, not output (for time-sharing environment)
- ํ๋ก์ธ์ค๊ฐ ์ต์ด๋ก CPU๋ฅผ ์ป๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ
- Ready queue์์ ์ฒ์ CPU ์ป๊ธฐ๊น์ง์ ์๊ฐ
- ํ๋ก์ธ์ค๊ฐ ์ฒ์ ์์ํด์ ์ฒ์์ผ๋ก CPU ์ป์ ์๊ฐ์ ์๋
- ์๊ฐ์ ์งง์ ์๋ก ์ข์
Scheduling Algorithms
FCFS (Fist-Come First-Served)
CPU ์ฌ์ฉ์๊ฐ์ด ๊ธด ํ๋ก์ธ์ค๊ฐ ๋จผ์ ๋ค์ด์จ ๊ฒฝ์ฐ
CPU ์ฌ์ฉ์๊ฐ์ด ์งง์ ํ๋ก์ธ์ค๊ฐ ๋จผ์ ๋ค์ด์จ ๊ฒฝ์ฐ
- Convoy effect
- long process๊ฐ ๋จผ์ ๋์ฐฉํ๋ ๋ฐ๋์ short process๊ฐ ์ค๋ ๊ธฐ๋ค๋ ค์ผ ๋๋ ํ์
SJF (Shortest-Job-First)
- CPU burst time์ด ๊ฐ์ฅ ์งง์ ํ๋ก์ธ์ค๋ฅผ ์ ์ผ ๋จผ์ ์ค์ผ์ค
Two schemes:
1. Nonpreemptive
- ์ผ๋จ CPU๋ฅผ ์ก์ผ๋ฉด ์ด๋ฒ CPU burst๊ฐ ์๋ฃ๋ ๋๊น์ง CPU๋ฅผ ์ ์ (preemption) ๋นํ์ง ์์
2. Preemptive
- ํ์ฌ ์ํ์ค์ธ ํ๋ก์ธ์ค์ ๋จ์ burst time๋ณด๋ค ๋ ์งง์ CPU burst time์ ๊ฐ์ง๋ ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ๋ฉด CPU๋ฅผ ๋นผ์๊น
- ์ด ๋ฐฉ๋ฒ์ Shortest_Remaining_Time_First(SRTF)์ด๋ผ๊ณ ๋ ๋ถ๋ฆ
- ๋จ์ ์๊ฐ์ด ์ ์ผ ์งง์ ํ๋ก์ธ์ค์๊ฒ CPU๋ฅผ ์ค
- SJF is optimal -> SRTF
- ์ฃผ์ด์ง ํ๋ก์ธ์ค๋ค์ ๋ํด minimum average waiting time์ ๋ณด์ฅ
- ์ด๋ ํ CPU ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ ๋ณด๋ค SRTF๊ฐ ํ๊ท ๋๊ธฐ ์๊ฐ์ด ๊ฐ์ฅ ์งง์
Problem
- Starvation ํ์ ๋ฐ์
- CPU burst time์ ๋๊ฐ ์งง๊ฒ ์ฐ๊ณ ๊ธธ๊ฒ ์ฐ๋์ง ์ ์ ์์
Solution
- ์์ธก์ ํตํด ํด๊ฒฐํ ์ ์์
๋ค์๋ฒ CPU Burst Time์ ์์ธก
- ์ถ์ (estimate)๋ง์ด ๊ฐ๋ฅํจ
- ๊ณผ๊ฑฐ์ CPU burst time์ ์ด์ฉํด์ ์ถ์
Exponential Averaging
- ์ง์ CPU burst๋ฅผ ๋ง์ด ๋ฐ์ํ๊ณ ์์ ๊บผ๋ ์ ๊ฒ ๋ฐ์ํจ
Priority Scheduling
- a priority number(integer) is associated with each process
- highest priority(๋์ ์ฐ์ ์์)๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค์๊ฒ CPU ํ ๋น
- smallest integer = highest priority
- Preemptive
- nonpreemptive
- SJF๋ ์ผ์ข
์ priority scheduling
- priority = predicted next CPU burst time
Problem
- Starvation : low priority processes may never execute
Solution
- Aging : as time progresses increase the priority of the process
- ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ด ์ค๋๋ ํ๋ก์ธ์ค๋ ์ฐ์ ์์๋ฅผ ์ฌ๋ ค์ค
Round Robin (RR)
- ๊ฐ ํ๋ก์ธ์ค๋ ๋์ผํ ํฌ๊ธฐ์ ํ ๋น ์๊ฐ(time quantum)์ ๊ฐ์ง
(์ผ๋ฐ์ ์ผ๋ก 10~100 milliseconds) - ํ ๋น ์๊ฐ์ด ์ง๋๋ฉด ํ๋ก์ธ์ค๋ ์ ์ (preempted)๋นํ๊ณ ready queue์ ์ ์ผ ๋ค์ ๊ฐ์ ๋ค์ ์ค์ ์ฌ
- n ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ready queue์ ์๊ณ ํ ๋น ์๊ฐ์ด q time unit์ธ ๊ฒฝ์ฐ ๊ฐ ํ๋ก์ธ์ค๋
์ต๋ q time unit ๋จ์๋ก CPU ์๊ฐ์ 1/n์ ์ป์
-> ์ด๋ค ํ๋ก์ธ์ค๋ (n-1)q time unit ์ด์ ๊ธฐ๋ค๋ฆฌ์ง ์์ - Performance
- q large -> FCFS
- q small -> context switch ์ค๋ฒํค๋๊ฐ ์ปค์ง
Example: RR with Time Quantum = 20
- ์ผ๋ฐ์ ์ผ๋ก SJF๋ณด๋ค average turnarround time์ด ๊ธธ์ง๋ง response time์ ๋ ์งง์
Multilevel Queue
- CPU๋ ํ๋ ์ธ๋ฐ queue๊ฐ ์ฌ๋ฌ ๊ฐ ์
- Ready queue๋ฅผ ์ฌ๋ฌ ๊ฐ๋ก ๋ถํ
- forground(interactive) -> short job
- background(batch - no human interaction) -> long job
- ๊ฐ ํ๋ ๋
๋ฆฝ์ ์ธ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ง
- forground - RR
- background - FCFS
- ํ์ ๋ํ ์ค์ผ์ค๋ง์ด ํ์
- Fixed priority scheduling -> ์ฐ์ ์์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ
- serve all from foreground then from background
- possibility of starvation
- Time slice
- ๊ฐ ํ์ CPU time์ ์ ์ ํ ๋น์จ๋ก ํ ๋น
- ex) 80% to foreground in RR, 20% to background in FCFS
- Fixed priority scheduling -> ์ฐ์ ์์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ
Multilevel Feedback Queue
- ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก ์ด๋ ๊ฐ๋ฅ -> ์ฐ์ ์์ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ์์ด์ง(aging)์ ์ด์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์์
- Multilevel-feedback-queue scheduler๋ฅผ ์ ์ํ๋ ํ๋ผ๋ฏธํฐ๋ค
- Queue์ ์
- ๊ฐ ํ์ scheduling algorithm
- Process๋ฅผ ์์ ํ๋ก ๋ณด๋ด๋ ๊ธฐ์ค
- Process๋ฅผ ํ์ ํ๋ก ๋ด์ซ๋ ๊ธฐ์ค
- ํ๋ก์ธ์ค๊ฐ CPU ์๋น์ค๋ฅผ ๋ฐ์ผ๋ ค ํ ๋ ๋ค์ด๊ฐ ํ๋ฅผ ๊ฒฐ์ ํ๋ ๊ธฐ์ค
Example of Multilevel Feedback Queue
- Three queues:
- Q0 - time quantum 8 milliseconds
- Q1 - time quantum 16 milliseconds
- Q2 - FCFS
- Scheduling
- new job์ด queue Q0๋ก ๋ค์ด๊ฐ
- CPU๋ฅผ ์ก์์ ํ ๋น ์๊ฐ 8 milliseconds ๋์ ์ํ๋จ
- 8 milliseconds ๋์ ๋ค ๋๋ด์ง ๋ชปํ์ผ๋ฉด queue Q1์ผ๋ก ๋ด๋ ค๊ฐ
- Q1์ ์ค์์ ๊ธฐ๋ค๋ ธ๋ค๊ฐ CPU๋ฅผ ์ก์์ 16 ms ๋์ ์ํ๋จ
- 16 ms์ ๋๋ด์ง ๋ชปํ ๊ฒฝ์ฐ queue Q2๋ก ์ซ๊ฒจ๋จ
์ ๋ด์ฉ ๊น์ง๋ CPU๊ฐ 1๊ฐ ์๋ ํ๊ฒฝ์์์ ์ค์ผ์ค๋ง
๋ค์ ๋์ค๋ ์ค์ผ์ค๋ง์ ์ข ํน์ํ ๊ฒฝ์ฐ
Multiple-Processor Scheduling
- CPU๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ ์ค์ผ์ค๋ง์ ๋์ฑ ๋ณต์กํด์ง
- Homegeneous processor์ธ ๊ฒฝ์ฐ
- Queue์ ํ ์ค๋ก ์ธ์์ ๊ฐ ํ๋ก์ธ์๊ฐ ์์์ ๊บผ๋ด๊ฐ๊ฒ ํ ์ ์์
- ๋ฐ๋์ ํน์ ํ๋ก์ธ์์์ ์ํ๋์ด์ผ ํ๋ ํ๋ก์ธ์ค๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ฌธ์ ๊ฐ ๋ ๋ณต์กํด์ง
- Load sharing(= Load balacing)
- ์ผ๋ถ ํ๋ก์ธ์์ job์ด ๋ชฐ๋ฆฌ์ง ์๋๋ก ๋ถํ๋ฅผ ์ ์ ํ ๊ณต์ ํ๋ ๋ฉ์ปค๋์ฆ ํ์
- ๋ณ๊ฐ์ ํ๋ฅผ ๋๋ ๋ฐฉ๋ฒ vs ๊ณต๋ ํ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- Symmetric Multiprocessing (SMP)
- ๊ฐ ํ๋ก์ธ์๊ฐ ๊ฐ์ ์์์ ์ค์ผ์ค๋ง ๊ฒฐ์
- Asymmetric multiprocessing
- ํ๋์ ํ๋ก์ธ์๊ฐ ์์คํ ๋ฐ์ดํฐ์ ์ ๊ทผ๊ณผ ๊ณต์ ๋ฅผ ์ฑ ์์ง๊ณ ๋๋จธ์ง ํ๋ก์ธ์๋ ๊ฑฐ๊ธฐ์ ๋ฐ๋ฆ
Real-Time Scheduling
- Hard real-time systems
- Hard real-time task๋ ์ ํด์ง ์๊ฐ ์์ ๋ฐ๋์ ๋๋ด๋๋ก ์ค์ผ์ค๋งํด์ผ ํจ
- Soft real-time computing
- Soft real-time task๋ ์ผ๋ฐ ํ๋ก์ธ์ค์ ๋นํด ๋์ priority๋ฅผ ๊ฐ๋๋ก ํด์ผ ํจ
Thread Scheduling
- Local Scheduling
- User level thread์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์์ค์ thread library์ ์ํด ์ด๋ค thread๋ฅผ ์ค์ผ์คํ ์ง ๊ฒฐ์
- Global Scheduling
- Kernel level thread์ ๊ฒฝ์ฐ ์ผ๋ฐ ํ๋ก์ธ์ค์ ๋ง์ฐฌ ๊ฐ์ง๋ก ์ปค๋์ ๋จ๊ธฐ ์ค์ผ์ค๋ฌ๊ฐ ์ด๋ค thread๋ฅผ ์ค์ผ์คํ ์ง ๊ฒฐ์
Algorithm Evaluation
์๊ณ ๋ฆฌ์ฆ์ ํ๊ฐํ ์ ์๋ ๋ฐฉ๋ฒ
- Queueing models
- ํ๋ฅ ๋ถํฌ๋ก ์ฃผ์ด์ง๋ arrival rate์ service rate ๋ฑ์ ํตํด ๊ฐ์ข performance index ๊ฐ์ ๊ณ์ฐ
- Implementation (๊ตฌํ) & Measurement (์ฑ๋ฅ ์ธก์ )
- ์ค์ ์์คํ ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ์ฌ ์ค์ ์์ (workload)์ ๋ํด์ ์ฑ๋ฅ์ ์ธก์ ๋น๊ต
- ex) ๋ฆฌ๋ ์ค์ CPU ์ค์ผ์ค๋งํ๋ ์ฝ๋๋ฅผ ๋ด๊ฐ ์์ฑํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ฃ์ด์ ๊ฐ์ ํ๋์จ์ด ์กฐ๊ฑด์์ ์ด๋ค๊ฒ์ด ๋ ์ข์์ง ์ฑ๋ฅ์ ์ธก์ ๋น๊ต
- Simulation (๋ชจ์ ์คํ)
- ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ์ ํ๋ก๊ทธ๋จ์ผ๋ก ์์ฑ ํ trace๋ฅผ ์ ๋ ฅ์ผ๋ก ํ์ฌ ๊ฒฐ๊ณผ ๋น๊ต