CPU 스케줄링은 프로세스가 작업을 수행할 때, 언제 어떤 프로세스에 CPU를 할당할지를 결정하는 작업입니다. 기본적으로 멀티프로그래밍과 시분할에 기반합니다. 메모리 내에 실행 준비된 프로세스 중 하나를 선택하여 CPU를 할당합니다. 한정된 CPU 및 I/O장치 등의 시스템 자원을 가지고 최고의 성능을 내야 하고, 따라서 자원을 언제 어떻게 할당할지를 결정하는 문제는 정말 중요합니다. CPU 스케줄링의 목표는 CPU를 최대로 활용하는 것, 즉 idle을 최소화 하는 것입니다.
일반적인 시스템에서는 다음과 같은 목적을 공통적으로 지닌다.
Batch System [일괄처리 시스템]
: 온라인처럼 일에 대한 요청이 발생했을 때, 즉각적으로 처리하는 것이 아닌 일정기간 또는 일정량을 모아뒀다가 한번에 처리하는 방식
Interactive System [대화형 시스템]
: 온라인과 같이 일에 대한 요청에 대해 즉각적으로 처리하여 응답을 받을 수 있는 시스템
Time Sharing System
: 각 프로세스에 CPU에 대한 일정시간을 할당하여 주어진 시간동안 프로그램을 수행할 수 있게하는 시스템
스케줄링은 OS가 강제적으로 CPU 사용을 중단시키는지 여부에 따라서 크게 두 가지로 나뉘는데, 강제할 경우를 선점형 스케줄링(preemptive scheduling), 강제하지 않는 경우 **비선점형 스케줄링(non-preemptive scheduling)**이라고 합니다.
스케줄링은 다음과 같은 때에 일어납니다.