프로세스를 스케줄링하기 위한 Queue에는 세 가지 종류가 존재한다.
각각의 Queue에 프로세스들을 넣고 빼주는 스케줄러에도 크게 아래 세 가지종류가 있다
장기 스케쥴러는 새로운 프로세스를 'ready 상태'로 가져온다.
장기 스케쥴러는 Degree of Multi-programming을 제어한다.
장기 스케쥴러가 IO와 CPU bound 프로세스 모두 신중한 선택을 하는 것은 중요하다. IO 바운드 작업의 경우 input과 output 동작에 더 많은 시간을 할애 하며 CPU 바운드 프로세스는 CPU에서 더 많은 시간을 할애한다. 작업 스케줄러는 IO 바운드와 CPU 바운드 사이에서 효율적인 균형 유지를 향상 시킨다.
단기 스케쥴러는 어느 한 프로세스를 running 시킬지 결정한다. 단기 스케줄러는 프로세스를 running 상태로 올리는 것이 아닌 어떤 프로세스를 선택하는 것인지에 대한 것만 관여한다.
CPU 스케줄러는 높은 burst time을 가지는 프로세스들로 인해 starvation(기아상태)가 발생하지 않도록 해야 한다.
Dispatcher는 단기 스케줄러가 선택한 프로세스를 CPU에 로드하는 역할을 한다 (Ready to Running State) 컨텍스트 전환은 디스패처에 의해서만 수행된다.
Dispatcher는 아래와 같은 작업을 한다.
1. Switching context
2. Switching to user mode
3. 새롭게 로드된 프로그램과 같이 적절한 위치로 이동시킨다
프로세스를 중단하거나 재시작하는 역할을 한다.
프로세스들을 메인 메모리부터 디스크나 다른 프로세스로 swapping을 하도록 한다.
I/O bound와 CPU bound 사이에서 균형을 유지시키는데 도움을 준다
degree of multiprogramming을 감소시킨다.
(출처 : https://velog.io/@ss-won/OS-CPU-Scheduler%EC%99%80-Dispatcher)