스케줄러
운영체제에서 어떠한 프로세스에게 CPU와 메모리 공간을 할당할 지를 결정하는 커널의 모듈.
프로세스 상태도에서 어떠한 프로세스를 어떠한 상황에서 자원을 할당하고 해제할 지를 결정해 주며,
각각의 프로세스가 어느 상태에 있고 어디로 이동할 지에 따라서 장기, 중기, 단기로 나뉜다.
장기 스케줄러
- new -> Ready 과정 조절.
- 현재 메모리에 너무 많은 프로세스가 올라가 있다면, 새 프로세스는 메모리(Ready Queue)가 아닌 디스크 영역에 임시로 저장된다.
- 현재 메모리 영역에 어느 정도의 프로세스 수(degree)가 존재하는 지를 확인하며,
여유가 생기면 디스크 영역에 존재하는 새 프로세스들 중 어떤 프로세스를 메모리 상(Ready Queue)에 등록 할 지 결정한다. - 디스크 -> 메모리 이동이기 때문에 속도가 느리며 일반적으로 수십 초 내지 수 분 단위로 가끔 호출된다.
- 시분할 시스템에서는 장기 스케줄러 없이 곧 바로 메모리에 올라가서 Ready 상태가 된다.
단기 스케줄러
- Ready -> Running -> Wait -> Ready 과정 조절.
- CPU 스케줄러로서 어떤 프로세스가 CPU를 할당 받을지를 미리 정한 다양한 스케줄링 알고리즘을 통해 결정한다. ( Context Switch )
- 매우 빈번하게 호출 되기 때문에 속도가 충분히 빨라야 한다.
중기 스케줄러
- Wait -> Suspended Wait -> Wait, Ready -> Suspended Ready -> Ready 과정 조절.
- 메모리 상에 프로세스가 너무 많이 올라가 부족할 때, 특정 메모리를 Swap out 하여 디스크 영역에 임시 저장 후 메모리에서 해제한다.
- 현재 메모리 영역에 어느 정도의 프로세스 수(degree)가 존재하는 지를 확인하며, Suspend 상태에 있는 프로세스를 메모리상에 적재하는 것을 결정한다. ( Swapping )
- Wait 상태에 있는 블럭된 프로세스는 I/O 작업이 완료되면 스스로 Reday 로 이동할 수 있지만, Suspended 상태에 있는 프로세스들은 중기 스케줄러를 통해서만 메모리상으로 swap in 할 수 있다.