CPU 스케줄러는 어떤 프로세스에게 CPU를 줄 지 결정하는 운영체제 내의 코드다.(하드웨어x)
Dispatcher는 CPU 줄 프로세스 결정 후 그 프로세스에 CPU 제어권을 넘기는 코드다. 이 과정이 바로 문맥 교환(context switch)이다.
CPU 스케줄링은 프로세스의 상태 변화가 있는 경우 주로 필요하다. i/o 요청으로 프로세스가 running 에서 blocked로 바뀔 때, CPU를 쓰고 싶어 CPU를 빼앗는 경우, 또 타이머 인터럽트로 CPU를 넘겨주는 경우(running->ready) 등이다. 또 i/o 작업이 끝나고 인터럽트를 걸어 blocked가 ready로 바뀌는 경우 등이 있다. 또 어떤 프로세스가 종료되어 새로운 프로세스에 cpu를 넘기는 경우다.
i/o 작업이 끝나고 ready가 아닌 곧바로 CPU를 넘겨주는 경우는 해당 프로세스가 절대적 우선순위에 있는 경우다.
1,4번의 예시는 cpu 자진 반납의 경우(nonpreemtive)고, 2,3번 예시는 cpu를 강제로 뺏긴 경우(preemtive)다.