CPU 스케줄링은 운영 체제가 여러 프로세스를 효율적으로 처리하기 위해 필수적이다. 프로그램은 I/O bound job와 CPU bound job이 섞여있다. I/O 바운드 작업은 CPU 사용이 적고 주로 I/O 작업을 기다리며, CPU 바운드 작업은 CPU를 많이 사용한다. 스케줄링을 통해 I/O 작업 대기 시간 동안 CPU 바운드 작업을 실행하면 자원을 효율적으로 활용할 수 있다. 이는 시스템의 응답 시간을 최적화하고, 특정 작업이 CPU를 독점하지 않도록 하여 모든 작업에 공정하게 자원을 분배한다. 결과적으로, 전체 시스템 성능을 향상시키고 사용자 경험을 개선하기 위해 CPU scheduling이 필요하다.
CPU 스케줄링이 필요한 경우는 프로세스에게 다음과 같은 상태 변화가 있는 경우이다
(nonpreemptive)
ex. I/O 요청하는 시스템 콜이 호출된 경우
(preemptive)
ex. 할당시간만료로 timer interrupt
(preemptive)
ex. I/O 완료 후 인터럽트
(nonpreemptive)
preemptive = 강제로 빼앗음
nonpreemptive = 강제로 빼앗지 않고 자진 반납