1. Turnaround time : 프로세스 A가 스케쥴링된 순간부터(T(arrival)) 프로세스 A가 실행종료되는 순간(T(completion)) 까지 걸리는 시간
2. Response time : 프로세스 A가 실행되는 순간부터(T(firstrun)) 프로세스 A가 실행종료되는 순간(T(completion)) 까지 걸리는 시간
3. Throughput: 특정 시간동안 실행완료 되는 프로세스의 수
4. Utilization: 특정 시간동안 자원이 얼마나 효율적으로 사용되고 있는가?
5. Fairness: 각각의 프로세스들이 스케쥴링되어 실행되는 빈도가 균일한가?
6. Predictability: response time과 turnaround time이 비교적 균일한가?
1. Preemptive Scheduling(선점형 스케쥴링) - 대부분의 OS가 채택하는 방식
- 어떤 프로세스가 time-slice를 소모해 time-out되거나, I/O Request가 발생하는 등의 상황이 발생했을 때 다른 프로세스에게 CPU를 양보한다.
- 특정 상황이 발생했을 때 기존 프로세스를 쫓아내고 CPU를 선점할 수 있으므로 선점형 스케쥴링이라고 한다.
2. Non-preemptive Scheduling(비선점형 스케쥴링)
- 어떤 프로세스가 CPU를 자발적으로 양보하거나(yield) 종료하지 않는 이상 CPU를 계속 사용
- Context-switch overhead는 비교적 낮으나, response time이 비교적 길고, priority inversion이 많이 발생한다. - Priority Inversion 나중에 다시 보기
📜 참고
CPU burst: CPU 실행이 발생되는 사이클
I/O burst: I/O wait이 발생되는 사이클
먼저 Ready Queue에 도착한 프로세스가 먼저 실행된다!
Non-preemptive Scheduling(비선점형 스케쥴링)에 해당한다.
자원 효율성이 높고, interactive한 시스템보단 batch 시스템(먼저 받은 작업부터 처리하는 시스템)에 유리하다.
단점: Convoy Effect(실행시간이 긴 작업이 먼저 도착했을 경우 실행시간이 짧은 작업의 대기시간이 지나치게 늘어나는 현상) => 평균 Response time의 증가
📢 FCFS Scheduling의 예시
P1, P2, P3 순으로 Ready queue에 도착했을 때,
각 프로세스의 Turnaround time은
P1 = 24, P2 = 24+3 = 27, P3 = 24 + 3 + 3 = 30이며,
평균 Turnaround time은 (24+27+30)/3 = 27이 되게 된다.
P2, P3, P1 순으로 Ready queue에 도착했을 때,
각 프로세스의 Turnaround time은
P1 = 3+3+24 = 30, P2 = 3, P3 = 3 + 3 = 6이며,
평균 Turnaround time은 (30+3+6)/3 = 13이 되게 된다.
FCFS Scheduling은 작업시간이 긴 프로세스가 맨 처음 도착했을 때, 평균 turnaround time이 매우 높은 걸 보일 때 최악의 효율성을 보임을 알 수 있다.
가장 실행시간이 짧은 (CPU burst 시간이 가장 짧은) 작업이 우선적으로 실행된다.
마찬가지로 Non-preemptive Scheduling(비선점형 스케쥴링)에 해당한다.
평균적인 Response time이 짧기 때문에 Ready queue에 저장해야 하는 프로세스의 개수도 비교적 작아 메모리 사용이 작다.
Starvation 현상 (비교적 실행시간이 긴 프로세스들은 실행시간이 짧은(우선순위가 높은) 프로세스에 밀려 하염없이 대기해야 하는 현상) -> aging (오래 기다린 프로세스들을 먼저 실행)을 통해 해결 가능
정확한 실행시간을 알 수 없기 때문에 기존의 실행시간 데이터 정보를 바탕으로 추측해야함.
기존에 실행됐던 실행정보를 바탕으로 실행시간을 estimate하며, 이 식에서 보면 가장 최근에 실행됐던 실행정보에 높은 가중치를 두는 것을 알 수 있다.
SJF의 변형이며, Preemptive Scheduling에 속한다. (남은 CPU burst 시간이 짧은 프로세스가 Ready queue에 도착하면 그 프로세스가 CPU를 선점)
높은 Context Switch overhead, Remaining time tracing overhead, Burst time estimation overhead 발생
📢 STCF Scheduling의 예시
T=1일때
T=2일때
FCFS, SJF, STCF Scheduling은 공통적으로 Turnaround time (Ready queue에 들어왔을 때부터 execution completion까지 걸리는 시간)을 고려한다.
📜 RR Scheduling은 Time slice가 매우 길면 FCFS(First Come, First Served) Scheduling과 유사하며, Time slice가 짧으면 CPU Sharing과 동일해진다.
📢 RR Scheduling의 예시 (Time Quantum = 4)
- CPU Burst time이 끝났거나, Time Slice를 전부 소모했을 때 프로세스는 CPU를 release한다.
- T= 14를 예로 들면, Time Slice를 소진하여 Timer interrupt가 발생하나, context switch overhead는 발생하지 않고 커널의 OS만 동작한 후 다시 P1을 실행한다.
- RR Scheduling은 Response time의 측면에서는 매우 효율적인 스케쥴링이나, Turnaround time (arrival-completion)의 측면에서는 매우 비효율적이다.