📌 장기스케줄러
✔ 역할
- 메모리는 한정되어 있는데 많은 프로세스들이 한꺼번에 메모리에 올라올 경우, 대용량 메모리(일반적으로 디스크)에 임시로 저장된다. 이 pool 에 저장되어 있는 프로세스 중 어떤 프로세스에 메모리를 할당하여 ready queue 로 보낼지 결정하는 역할을 한다.
- ex) 지금 수행해야 할 job이 10개이지만 메모리에는 6개의 job만 올릴수 있는 상황일때, 10개중 어떤 스케줄러를 선택할지 결정
✔ 특징
- 메모리와 디스크 사이의 스케줄링을 담당.
- 프로세스에 memory(및 각종 리소스)를 할당(admit)
- degree of Multiprogramming 제어
(실행중인 프로세스의 수 제어)
- 프로세스의 상태
- new -> ready(in memory)
- 가상 메모리의 발달로 time sharing system 에서는 장기 스케줄러가 없다.
- ex) 메모리 허용범위가 6개라면 10개 중 6개의 프로세스를 고르는게 아닌 실행 준비가 되면 메모리로 10개가 다올라온다.
📌 단기스케줄러
✔ 역할
- 실행이 준비된 프로세스들 중 하나를 선별해 CPU에게 할당
- ex)장기 스케줄러에 의해 6개의 job이 메모리에 있을때, 6개 중 실제 CPU가 수행할 프로세스를 결정
✔ 특징
- CPU 와 메모리 사이의 스케줄링을 담당.
- Ready Queue 에 존재하는 프로세스 중 어떤 프로세스를 running 시킬지 결정.
- 프로세스에 CPU 를 할당(scheduler dispatch)
- 프로세스의 상태
- ready -> running -> waiting -> ready
- ex) A라는 프로세스가 수행되었다가 사용자의 입력을 기다려야 하는 상황 -> 기다리는 동안 CPU가 수행할 프로세스를 B로 교체 -> 이후 사용자가 입력 완료 후에 B에서 다시 A로 교체
📌 중기스케줄러
✔ 역할
- 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄 (swapping)
- ex) 장기 스케줄러에 의해 10개 프로그램 중 6개를 올렸으나, 6개가 CPU가 감당하기엔 너무 많을때, 이 6개 중 어떤 프로세스를 내려 보낼지 결정
✔ 특징
- 프로세스에게서 memory 를 deallocate
- degree of Multiprogramming 제어
- 현 시스템에서 메모리에 너무 많은 프로그램이 동시에 올라가는 것을 조절하는 스케줄러.
- 우선순위가 낮거나 일정 시간 동안 활성화 되지 않았던 프로세스를 내림
- 이렇게 필요에 따라 프로세스를 내리고 (swapping out), 다시 올리고 (swapping in) 하는 과정을 Swapping이라고 함 -> 중기 스케줄러를 Swapper라고 부르기도 함
- 프로세스의 상태
- ready -> suspended
- Suspended(stopped) : 외부적인 이유로 프로세스의 수행이 정지된 상태로 메모리에서 내려간 상태를 의미한다. 프로세스 전부 디스크로 swap out 된다. blocked 상태는 다른 I/O 작업을 기다리는 상태이기 때문에 스스로 ready state 로 돌아갈 수 있지만 이 상태는 외부적인 이유로 suspending 되었기 때문에 스스로 돌아갈 수 없다.
🧩 References