CPU 스케쥴링은 메모리 안에서 실행 준비된 process들에게 CPU의 사용을 할당시키는 방법이다.
스케쥴링의 결정 시점은 다음과 같이 프로세스의 상태 변화가 생길 때이다.
- running → waiting (interrupt)
- running → ready (time-out)
- waiting → ready (wake-up)
- running → Terminated
OS에서는 이 스케쥴링을 다음의 두 가지의 방식으로 나눈다.
🎈Non-preemptive 스케쥴링은 결정 시점 중, 위의 1번~4번의 상황에서만 스케쥴링이 발생한다.
🎈어떤 process가 CPU를 할당 받으면, 그 프로세스가 종료되거나 입출력 요구가 발생하여 자발적으로 중지될 때 까지 계속 실행되도록 보장한다.
🎈순서대로 처리되는 공정성이 있고, 다음에 처리해야 할 프로세스와 관계없이 응답 시간을 예상할 수 있다.
🎈다만, 만약 한 process가 오랜 시간동안 CPU를 할당받게 되면 다른 process들을 오래 대기시킬 수 있으므로 처리율이 떨어질 수 있다는 단점이 있다.
🎈Preemptive 스케쥴링은 Non-preemptive 스케쥴링에 의해 스케쥴링되는 시점 빼고는 모두 다 Preemptive 스케쥴링이 발생한다.
🎈한 process가 CPU를 할당받고 있는 와중에도 강제로 다른 process에게 CPU할당을 넘길 수 있다. 따라서 공평하게 CPU할당을 부여할 수 있거나, 우선순위가 더 높은 process의 처리를 먼저 끝낼 수 있는 등의 장점이 있다.
다만 kernel mode에서의 process처리, 혹은 OS의 중요한 부분에서의 process처리 등에서 Preemptive 스케쥴링이 가능한지는 상황에 따라 고려되어야한다.
스케쥴링에는 스케쥴링 방식에 따른 알고리즘이 있다.
수업시간에는 다음의 5가지 알고리즘을 배웠다.
Non-preemptive Scheduling
- FCFS(First-Come-First-Served) - 선입선출 기준 처리
- SJF(Shortest-Job-First) - 프로세스당 총 소요시간 기준 처리
Preemptive Scheduling
- SRTF(Shortest-Remaining-Time-First) - 남은 소요시간이 짧은 것 기준 처리
- Priority - 우선순위 기준 처리
- RR(Round-Robin) - 모든 프로세스에 번갈아가면서 공평한 CPU할당 처리
또한 알고리즘이라면 성능을 측정할 수 있어야하는데, 스케쥴링 알고리즘을 평가할 수 있는 항목은 5가지 요소가 있다.
CPU utilization : CPU의 총 작동 시간
Throughput : 특정 시간동안 실행될 수 있는 프로세스의 개수
Turnaround time : 메모리에 들어가기 위해 기다리는 시간 + ready queue에서 기다리는 시간 + CPU 실행하는 시간 + I/O하는 시간
Waiting time : 프로세스가 ready queue에서 기다리는 시간의 총 합
Response time : 프로세스가 응답을 시작할 때까지 걸리는 시간