목차
- 🤔 CPU 스케쥴러(Scheduler)란?
- 🖥 스케쥴러의 종류
- 🕛 단기 스케쥴러 (Short-Term Scheduler)
- 🕑 장기 스케쥴러 (Long-Term Scheduler)
- 🕗 중기 스케쥴러 (Midium-Term Scheduler)
- ⭐ 최신 OS의 스케쥴러
🤔 CPU 스케쥴러(Scheduler)란?
CPU는 한 번에 하나의 프로세스만 실행할 수 있습니다.
멀티 프로세서라는 개념이 도입되기도 하였지만, 우리가 실행하고자 하는 프로그램의 개수에 비하면 턱없이 부족한 숫자입니다.
그렇기 때문에 운영체제는 Time Sharing을 통해 하나의 CPU에 대해 여러 프로세스를 비동기적(Concurrent)으로 실행시킵니다.
또한, CPU를 어떻게 하면 가장 효율적으로 사용할 수 있을지 매 순간 고민합니다.
어떤 프로세스에게 CPU를 할당할 것인가?
어떤 프로세스를 CPU를 할당받을 수 있는 상태로 만들 것인가?
어떤 프로세스를 Swapping(swap-in · out) 할 것인가?
이러한 고민과 역할을 담당하는 것이 바로 CPU 스케쥴러입니다.
🖥 스케쥴러의 종류
CPU 스케쥴러의 종류는 크게 3가지 입니다.
- 단기 스케쥴러
- 장기 스케쥴러
- 중기 스케쥴러
3가지 스케쥴러에 대해 하나씩 살펴보도록 하겠습니다.
🕛 단기 스케쥴러 (Short-Term Scheduler)
Short-Term Scheduler는 다른 말로 CPU Scheduler라고도 합니다.
어떤 프로세스에게 CPU를 할당할 것인가?
단기 스케쥴러는 위와 같은 고민을 합니다.
즉, Ready 큐에서 CPU를 할당받기를 기다리고 있는 여러 프로세스가 있을 때, 어떤 프로세스가 CPU를 할당받을지 결정합니다.
Often the short-term scheduler executes at least once every 100 milliseconds.
단기 스케쥴러는 이름과 같이 짧은 시간(Short-Term)에 굉장히 빈번하게 실행됩니다.
Time Sharing에 의해 Context Switch가 발생하며, 프로세스는 CPU를 계속해서 붙잡고 있을 수 없습니다.
그렇기 때문에, 단기 스케쥴러는 다음번 실행할 프로세스를 계속해서 결정해야 합니다.
정리하자면, Short-Term Scheduler는 Ready 상태의 프로세스를 Running 상태가 되도록 결정해주는 역할을 합니다.
실제로 Running 상태가 되도록 Context Switch를 수행하는 역할을 CPU Dispatcher가 수행합니다.
🕑 장기 스케쥴러 (Long-Term Scheduler)
Long-Term Scheduler는 다른 말로 Job Scheduler라고도 합니다.
어떤 프로세스를 지금 바로 CPU를 할당받아도 되는 상태로 만들 것인가?
장기 스케쥴러는 위와 같은 고민을 합니다.
New 상태의 프로세스가 여러 개가 있다면, 어떤 프로세스가 Ready 큐로 들어갈지 결정합니다.
이러한 고민을 하는 이유는 메모리 공간의 제약 때문입니다.
10개의 프로세스 중에 8개의 프로세스만 실행할 수 있는 공간이 있다면, 어떤 프로세스를 실행시킬 것인지 결정해야 합니다.
즉, New 상태에서 무작정 Ready 상태가 되는 것이 아닌, 장기 스케쥴러에 의해 결정되는 것입니다.
그렇기 때문에 장기 스케쥴러에 의해 DOM(Degree of Multiprogramming)이 증가합니다.
Degree of Multiprogramming은 현재 실행 중인 프로세스의 개수를 의미합니다.
프로세스는 크게 I/O bound process & CPU bound process로 나뉩니다.
장기 스케쥴러는 이 두 종류의 Good process mix를 지향합니다.
I/O bound process는 CPU의 사용보다는, 입출력 위주의 프로세스를 의미합니다.
CPU bound process는 입출력보다는 CPU burst가 긴 프로세스를 의미합니다.
만약 I/O bound process 위주로만 실행된다면, CPU의 Idle(유휴) 상태가 길어집니다.
때문에 일하는 시간보다 노는 시간이 많아지므로 CPU Utilization이 낮아집니다.
즉, CPU를 효율적으로 사용하지 못하는 문제가 발생합니다.
반대로 CPU bound process 위주로 실행한다면, 사용자와의 컴퓨터의 상호작용에 문제가 생깁니다.
그렇기 때문에 장기 스케쥴러는 New 상태의 프로세스들 중에서 이 둘의 비율이 적절하도록 고려하여 선택합니다.
정리하자면, Long-Term Scheduler는 I/O, CPU bound 프로세스의 비율을 고려하여 New 상태의 프로세스들 중에서 Ready 큐에 들어갈 프로세스를 결정하는 역할을 수행합니다.
🕗 중기 스케쥴러 (Midium-Term Scheduler)
Midium-Term Scheduler는 다른 말로 Swapper라고도 합니다.
어떤 프로세스를 Swapping(swap-in · out) 할 것인가?
중기 스케쥴러는 위와 같은 고민을 합니다.
Swap-out이란 현재 실행 중인 프로세스를 잠시 메모리에서 제거하고 Disk에 저장하는 작업을 의미합니다.
반대로, Swap-in이란 Disk에서 다시 프로세스 이미지를 가져와서 메모리에 올리는 작업을 의미합니다.
즉, Swapping은 현재 실행 중인 프로세스를 메모리에서 제거하고, 다시 메모리로 가져오는 작업을 의미합니다.
Swapping이 필요한 이유는 메모리 공간의 제약 때문입니다.
메모리 상에 너무 많은 프로세스가 올라가 있으면, 중기 스케쥴러는 이를 조절하기 위해 메모리에서 프로세스를 제거합니다.
즉, 장기 스케쥴러와 달리 Degree of Multiprogramming을 줄이는 역할을 수행합니다.
장기 스케쥴러는 프로세스의 우선순위가 낮거나, 오랫동안 활성화되지 않는 프로세스를 위주로 Swap-out을 진행합니다.
만약 메모리 공간이 여유롭다면 다시 프로세스를 Swap-in 합니다.
또는, Swap-out 한 프로세스를 처리해야 하는 이벤트가 발생한다면, 다른 프로세스를 Swap-out 하고 이벤트가 발생한 프로세스를 Swap-in 하는 과정을 거칩니다.
⭐ 최신 OS의 스케쥴러
최신 OS에는 장기 스케쥴러와 중기 스케쥴러가 존재하지 않습니다.
그렇기 때문에 단기 스케쥴러만 존재하며, 스케쥴러 자체를 CPU Scheduler라고 통칭합니다.
2가지의 스케쥴러가 사라진 이유는 메모리 공간 부족 문제를 VMM(Virtual Memory Management)를 통해 해결하였기 때문입니다.
VMM은 실제 물리적인 메모리 공간이 아닌, 가상의 메모리 공간을 의미합니다.
부족한 메모리 공간이 해결되었기 때문에, 메모리 공간을 크게 고려할 필요가 없어졌습니다.
때문에 프로세스를 메모리에 올리거나 내보내기를 결정하는 장기 스케쥴러, 중기 스케쥴러의 필요 또한 사라지게 되었습니다.
그러나 해당 개념을 알아야 하는 이유는, 이후에 공부할 Segment, Page라는 개념 때문입니다.
프로세스 자체를 Memory와 Disk 사이에서 Swapping 하는 것이 아닌, 하나의 프로세스를 특정 기준으로 쪼개어서 메모리 공간에 할당합니다.
이러한 개념들이 장기 및 중기 스케쥴러에 의해 비롯된 것이기 때문에, 현재에는 사라졌지만 알아둘 필요가 있습니다.
github : https://github.com/tmdgh1592
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 비연속할당(Noncontiguous allocation) - 세그먼테이션(Segmentation) (0) | 2023.01.06 |
---|---|
[운영체제] Contiguous Allocation의 문제점 - External Fragmentation(외부단편화) (1) | 2023.01.02 |
[운영체제] Address Binding - Compile, Load, Execution time binding (0) | 2022.12.30 |
[운영체제] 식사하는 철학자들 문제 (Dining philosophers problem) - Deadlock, Starvation (8) | 2022.11.30 |
[운영체제] 좀비(Zombie) 프로세스와 고아(Orphan) 프로세스 (0) | 2022.11.09 |