다중 프로그래밍의 목적은 프로세스의 CPU 이용을 최대화하여 사용되지 않는 CPU를 최소화하는 것이다. 프로세스 스케줄링이란 프로세스들을 적절한 CPU에 배치하는 것이며, 이를 수행하는 것이 프로세스 스케줄러이다.
프로세스들을 스케줄링하기 위해 스케줄링 큐(Scheduling Queues)라고 불리는 3개의 큐(Queue)를 사용하여 프로세스들을 관리한다.
- 잡 큐 : 프로세스가 시스템에 들어오면 놓여지는 큐로써 시스템 안의 모든 프로세스가 들어있다.
- 준비 완료 큐 : 주 메모리에 존재하며, 준비 완료 상태에서 CPU의 할당을 기다리는 프로세스들이 들어있다.
- 장치 큐 : 특정 입출력 장치를 대기하는 프로세스들이 들어있다.
프로세스들은 스케줄링 큐의 한 곳에 무조건 배치되어야 한다. 이는 스케줄러에 의해 적절한 큐로 배치된다. 스케줄러는 장기, 단기, 중기 3가지의 스케줄러가 존재한다.
1. 장기 스케줄러 or 잡 스케줄러(Long-term Scheduler or Job Scheduler)
어떤 프로세스를 준비 완료 큐에 넣을 것인지를 선택하는 스케줄러이다. 실행될 수 있는 프로세스보다 많은 프로세스들이 메모리에 올라오게 되면 이들을 대용량 메모리(전형적으로 디스크)에 저장한다. 저장되어 있는 프로세스들 중 하나를 선택하여 메모리를 할당하여 준비 완료 큐로 보내는 역할을 수행한다.
시스템에서 새로운 프로세스를 생성하는 간격이 길기 때문에 장기 스케줄러는 속도가 느리기 때문에 실행 빈도수가 굉장히 적다. 또한, 장기 스케줄러는 다중 프로그램의 정도(메모리에 있는 프로세스들의 수)를 제어한다.
시분할 시스템에서 사용되는 운영체제는 일반적으로 장기 스케줄러가 없으며, 모든 새로운 프로세스를 단기 스케줄러를 위하여 단순히 메모리에 넣는다.
2. 단기 스케줄러(Short-Term Scheduler) or CPU 스케줄러
어떤 프로세스에게 CPU를 할당해 줄 것인지를 선택하는 스케줄러이다. 준비 완료 큐에 존재하는 프로세스 중 하나를 선택하여 CPU를 할당시켜 실행 상태로 변경해 주는 역할을 수행한다.
단기 스케줄러는 매우 짧은 속도로 수행되기 때문에 실행 빈도수가 굉장히 많다.
3. 중기 스케줄러(Medium-Term Scheduler)
메모리에 적재된 프로세스 수를 관리하는 스케줄러이다. 장기 스케줄러가 없는 시분할 시스템에서 새로운 프로세스를 계속해서 단기 스케줄러에게 할당하면 결국 성능이 저하가 된다. 이를 해결하기 위해 중간 수준의 스케줄링을 도입하여 메모리에서 프로세스들을 제거함으로써 다중 프로그래밍의 정도를 조절한다.
메모리에서 제거한 프로세스의 내용 전부를 디스크의 스왑 영역에 저장한 뒤 후에 실행될 때 메모리로 불러와서 중단되었던 지점에서부터 실행을 재개하는 방식으로 프로세스의 수를 조절한다. 이러한 기법을 스와핑(Swapping)이라고 한다.
스와핑 기법은 스왑 아웃(Swap Out)과 스왑 인(Swap In) 두 가지 상태가 존재한다. 스왑 아웃은 메모리에서 디스크 영역으로 가는 상태이며 스왑 인은 디스크에서 메모리 영역으로 가는 상태이다.
중기 스케줄러가 도입되면서 프로세스의 상태에 중지(Suspend) 상태가 추가되었으며 중지 상태는 스왑 아웃, 외부적인 이유로 프로세스가 정지된 상태로 메모리에서 내려간 상태를 의미한다. 중지 상태는 중지 준비 상태(Ready Suspend)와 봉쇄 중지 상태(Blocked Suspend)가 있다.
중지 준비 상태는 준비 상태의 프로세스가 중기 스케줄러에 의해 디스크로 스왑 아웃된 상태로 메모리의 여유가 생기거나 준비 상태의 프로세스가 전혀 없을 경우 대기 상태의 프로세스를 보류 대기 상태로 만들고 메모리 공간이 확보되면 준비 상태로 바뀐다.
봉쇄 준비 상태는 봉쇄 상태의 프로세스가 중기 스케줄러에 의해 디스크로 스왑 아웃된 상태로 특별한 경우가 아니라면 중지 준비 상태로 바뀐다.
중지 상태가 추가된 프로세스의 상태도는 다음과 같다.
'Computer Science > 운영체제' 카테고리의 다른 글
Blocking / Non-Blocking & Synchronous / Asynchronous (0) | 2021.07.06 |
---|---|
프로세스 동기화(Process Synchronization)(2) (0) | 2021.07.05 |
프로세스 동기화(Process Synchronization)(1) (0) | 2021.07.05 |
CPU 스케줄링 (0) | 2021.07.05 |
프로세스(Process) vs 스레드(Thread) (0) | 2021.07.05 |
댓글