[ 스케쥴러 ]
프로세스를 스케줄링하기 위한 Queue 에는 세 가지 종류가 존재한다.
- Job Queue : 현재 시스템 내에 있는 모든 프로세스의 집합
- Ready Queue : 현재 메모리 내에 있으면서 CPU 를 잡아서 실행되기를 기다리는 프로세스의 집합
- Device Queue : Device I/O 작업을 대기하고 있는 프로세스의 집합
각각의 Queue 에 프로세스들을 넣고 빼주는 스케줄러에도 크게 세 가지 종류가 존재한다.
장기스케줄러
Long-term Scheduler or Job Scheduler
메모리는 한정되어 있는데 많은 프로세스들이 한꺼번에 메모리에 올라올 경우, 대용량 메모리(일반적으로 디스크)에 임시로 저장된다. 이 pool 에 저장되어 있는 프로세스 중 어떤 프로세스에 메모리를 할당하여 ready queue 로 보낼지 결정하는 역할을 한다.
간단히 말해서 장기스케쥴러는 시스템의 다중 프로그래밍 정도를 결정한다.
- 메모리와 디스크 사이의 스케줄링을 담당.
- 프로세스에 memory(및 각종 리소스)를 할당(admit)
- degree of Multiprogramming 제어
(실행중인 프로세스의 수 제어) - 프로세스의 상태
new -> ready(in memory)
cf) 메모리에 프로그램이 너무 많이 올라가도, 너무 적게 올라가도 성능이 좋지 않은 것이다. 참고로 time sharing system 에서는 장기 스케줄러가 없다. 그냥 곧바로 메모리에 올라가 ready 상태가 된다.
단기스케줄러
Short-term Scheduler or CPU Scheduler
초기에 주 메모리에 많은 프로세스가 있을 때, 모든 프로세스가 준비 대기열에 있기 된다.
이 때 모든 프로세스 중에서 단일 프로세스를 선택하여 실행하고 이러한 결정을 수행한다.
- CPU 와 메모리 사이의 스케줄링을 담당.
- Ready Queue 에 존재하는 프로세스 중 어떤 프로세스를 running 시킬지 결정.
- 프로세스에 CPU 를 할당(scheduler dispatch)
- 프로세스의 상태
ready -> running -> waiting -> ready
디스패쳐
Dispatcher
디스패처는 스케쥴러 이후에 작동하는 특수한 프로그램이다. 스케쥴러가 프로세스를 선택하면 해당 프로세스를 원하는 상태 / 대기열로 가져가는 것이 Dispatcher이다. 단기스케쥴러에서 CPU를 선택한 후 CPU에 대한 프로세스 제어를 제공하는 모듈이다.
- Switching Context
- Switching to User mode
- Jumping to the proper location in the user program to restart that program
스케쥴러와 디스패쳐의 차이점
다양한 프로세스가 실행 대기중인 Ready Queue에서 상주하고 있는 상황을 고려해보자. CPU는 이러한 모든 프로세스를 동시에 실행할 수 없으므로 운영체제는 스케쥴링 알고리즘을 기반으로 특정 프로세스를 선택해야 한다. 따라서 다양한 프로세스 중에서 프로세스를 선택하는 이 절차는 Scheduler
에 의해 수행된다. 스케쥴러가 대기열에서 프로세스를 선택하면 Dispatcher
가 나타나고 Ready Queue
에서 해당 프로세스를 가져와 실행 중 상태로 이동하는 것은 Dispatcher
이다.
따라서 스케쥴러는 디스패처가 시간이 지남에 따라 CPU로 이동하는 순서가 지정된 프로세스 목록을 디스패처에게 제공하게 된다.
중기스케줄러
Medium-term scheduler or Swapper
대부분의 경우 실행중인 프로세스에는 CPU가 필요없는 I/O 작업이 필요하다. 따라서, I/O 작업이 필요한 프로세스를 실행하는 동안 운영체제는 해당 프로세스를 Ready Queue
에서 Blocked Queue
로 보낸다.
프로세스가 I/O 작업을 완료하면 다시 준비 대기열로 이동해야 하고 이러한 결정을 수행한다. (스와핑!)
- 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄 (swapping)
- 프로세스에게서 memory 를 deallocate
- degree of Multiprogramming 제어
- 현 시스템에서 메모리에 너무 많은 프로그램이 동시에 올라가는 것을 조절하는 스케줄러.
- 프로세스의 상태
ready -> suspended
Process state - suspended
Suspended(stopped) : 외부적인 이유로 프로세스의 수행이 정지된 상태로 메모리에서 내려간 상태를 의미한다. 프로세스 전부 디스크로 swap out 된다. blocked 상태는 다른 I/O 작업을 기다리는 상태이기 때문에 스스로 ready state 로 돌아갈 수 있지만 이 상태는 외부적인 이유로 suspending 되었기 때문에 스스로 돌아갈 수 없다.
'Computer Science > [ OS ]' 카테고리의 다른 글
[ OS ] 05. 동기와 비동기(Sync, Async) (0) | 2021.05.27 |
---|---|
[ OS ] 04. CPU Scheduler (0) | 2021.05.27 |
[ OS ] 02. 멀티스레드 (0) | 2021.05.26 |
[ OS ] 01. 프로세스간 통신 - IPC, RPC (0) | 2021.05.25 |
[ OS ] 00. 프로세스와 스레드의 차이 (0) | 2021.05.25 |