스케줄러
![](https://velog.velcdn.com/images%2Fchullll%2Fpost%2Fcc02fcc8-8fb5-455c-a331-552f217b5970%2Fimage.png)
Job Queue : 현재 시스템 내에 있는 모든 프로세스들의 집합
Ready Queue : 현재 메모리 내에서 CPU 를 할당받아 실행되기를 기다리는 프로세스들의 집합
Device Queue : I/O 작업을 대기하고 있는 프로세스들의 집합
- 프로세스는 종료될 때 까지 수 많은 큐들을 돌아다닌다. OS 는 이 큐 안에 있는 프로세스 중 하나를 선택해야 하는데, 이 일을 스케줄러가 담당한다.
- 메인 메모리에 존재하면서 Ready 상태에서 Running 을 기다리는 프로세스들은 Ready Queue 에 위치하게 된다. 일반적으로 링크드 리스트로 구현되는데, 첫번째와 마지막 PCB를 가리키는 포인터를 포함한다.
단기 스케줄러
CPU
와 메모리
사이의 스케줄링을 담당한다.
- 상대적으로 실행 빈도가 잦다.
CPU
에게 필요한 데이터를 확보해주고 메모리
에 있는 프로세스 중 하나를 선택해 CPU
를 할당한다.
- 즉, Ready Queue 에 있는 프로세스 중 어떤 프로세스를
running
시킬지 결정한다.
- Ready Queue 에 있는 프로세스 중 먼저 도착한 프로세스에게 CPU 를 할당한다. (Scheduler dispatch)
- 프로세스 상태
- ready -> running -> waiting -> ready
장기 스케줄러
메모리
와 디스크
사이의 스케줄링을 담당한다.
- 상대적으로 호출되는 빈도가 적다.
- 많은 프로세스들이
메모리
로 올라오는 경우 디스크
에 임시로 저장한다. 이 디스크
의 프로세스들 중 어떤 프로세스를 메모리로 올릴지를 결정한다.
디스크
와 같은 저장 장치에 작업들을 저장해놓고 실행할 작업을 Job Queue 에서 꺼내 Ready Queue 를 통해 메인 메모리에 적재한다.
Degree of Multiprogramming
(몇 개의 프로그램을 메모리에 올릴 것인지) 제어
- 프로세스 상태
중기 스케줄러
- 여유 공간 마련을 위해
메모리
에서 프로세스들을 쫓아내는 작업을 한다.(=swapping)
- 쫓겨난 프로세스들은
suspended
상태가 된다.
- 즉, 프로세스에게서
메모리
를 deallocate
메모리
에 너무 많은 프로그램이 올라가는 것을 조절한다.
Degree of Multiprogramming
제어
- 프로세스 상태
- ready -> suspended
- 스스로 ready 상태로 돌아갈 수 없음
suspended(stopped) 상태
- 외부적인 이유로
메모리
에서 디스크
로 내려간 상태이다.
- 프로세스 전부 디스크로 swap out 된다. Blocked 상태는 I/O 작업을 기다리는 상태이기 때문에 스스로 Ready Queue로 돌아갈 수 있지만, Suspended 상태는 외부적인 이유로 Suspending 됐기 때문에 스스로 돌아갈 수 없다.
dispatcher
- CPU의 제어권을 CPU Scheduler 에 의해 선택된 프로세스에게 넘긴다.
- CPU 스케줄러 내부에 포함된 것으로, 단기 스케줄러가 선택한 프로세스에 실질적으로 프로세서를 할당하는 역할을 한다.
- 프로세스의 레지스터를 적재하고(context switching), 커널모드에서 사용자모드로 전환시켜주며, 프로세스가 다시 시작할 때 사용자 프로그램이 올바른 위치를 찾을 수 있도록 해준다.