이전 PintOS 포스팅에서 CPU 스케줄러에 대해 간단히 언급한 적이 있었다.
이번 포스팅에서는 CPU 스케줄러가 정확히 무엇인지, 그리고 각 알고리즘이 어떤 방식으로 동작하는지 깊이 있게 알아보자.
CPU 스케줄러란?
실행 가능한 프로세스 중에서 어떤 프로세스에게 CPU를 할당할지를 결정하는 운영체제의 핵심 모듈입니다.
-
멀티태스킹 환경에서는 CPU 스케줄러가 필수이다.
-
제한된 CPU 자원을 효율적이고 공정하게 분배해준다 !
-
사용자 경험(반응성)과 시스템 성능(처리량, 자원 활용도)에 큰 영향을 준다
언제 작동하는가? (스케줄링 시점)
CPU 스케줄러는 다음과 같은 상황에서 개입한다 :
- 현재 프로세스가 종료되었을 때
- 입출력 대기 등으로 Block 상태에 빠질 때
- 새로운 프로세스가 Ready 상태로 진입할 때
- 타이머 인터럽트(예: Time Slice 끝) 발생 시
이 중 1, 2는 CPU가 자동으로 비워지기 때문에 비선점(Non-Preemptive) 상황
3, 4는 현재 CPU를 강제로 뺏는 선점형(Preemptive) 상황이라고할 수 있다.
스케줄링의 목표
CPU 스케줄링은 단순히 "돌려 쓰자~" 가 아니라, 다양한 기준에 따라 최적화를 목표로 한다.
- CPU 이용률(CPU Utilization) 최대화
- 처리량(Throughput) 최대화
- 대기 시간(Waiting Time) 최소화
- 응답 시간(Response Time) 최소화
- 공정성(Fairness) 확보
💡 서버는 Throughput이 중요하고,
💡 실시간 시스템은 응답 시간이 핵심
선점형 스케줄링 VS 비선점형 스케줄링
선점형 스케줄링 (Preemptive Scheduling)
운영체제가 강제로 CPU를 빼앗아 다른 프로세스/스레드 에게 넘길 수 있음
특징 :
- 인터럽트 기반 → 더 높은 우선순위 작업이 생기면 즉시 전환 가능
- 반응성이 뛰어나다 (빠른 응답)
- 문맥 교환이 자주 발생함
대표 알고리즘

비선점형 스케줄링 (Non-Preemptive Scheduling)
한번 CPU를 잡은 프로세스는 스스로 CPU를 반환할 때 까지 계속 실행함
특징 :
- 다른 프로세스가 아무리 급해도 기다려야 함
- 문맥 교환 적음
- 응답 시간이 불확정적일 수 있다
대표 알고리즘

차이 정리 요약

언제 어떤 방식을 사용하는지 ?

주요 CPU 스케줄링 알고리즘
FCFS (First Come, First Served)
선착순으로 CPU를 할당하는 방식
가장 먼저 Ready Queue에 들어온 순서대로 실행한다 !
예시 :

실행 순서: P1 → P2 → P3
Gantt Chart: |--P1--|--P2--|--P3--|
장점 :
- 구현이 매우 간단함 !
- 공정성 있음 (먼저 온 순서대로 처리하니까)
단점 :
- Convoy Effect 발생 : 긴 작업이 앞에 있으면 뒤에 짧은 작업들이 오래 기다림
- 대기 시간 편차가 큼
SJF (Shortest Job First)
실행 시간이 가장 짧은 프로세스/스레드 에게 먼저 CPU를 할당하는 방식
예시 :

실행 순서: P2 → P3 → P1
Gantt Chart: |--P2--|--P3--|--P1--|
장점 :
단점 :
- 실행 시간을 미리 예측해야 함
- Starvation 문제 : 긴 작업이 계속 밀릴 수 있다
SRTF (Shortest Remaining Time First)
SJF의 선점형 버전. 실행 중인 프로세스/스레드 보다 남은 시간이 짧은 프로세스/스레드가 새로 도착하면 선점 발생
장점 :
- 응답 시간 및 대기 시간 평균을 더 줄일 수 있다
단점 :
- 구현이 복잡함
- 긴 작업 계속 밀릴 수 있음 (Starvation)
Priority Scheduling
우선순위(Priority)가 높은 프로세스에게 먼저 CPU를 할당
- 정수로 우선순위 부여
- 선점형 or 비선점형 모두 가능
장점 :
단점 :
- 낮은 우선순위 작업은 무한 대기(Starvation)
→ 해결: Aging 기법 (오래 기다리면 우선순위 점점 높여줌)
Round Robin (RR)
타임 슬라이스(Time Quantum)을 정해서, 프로세스/스레드 에게 CPU를 일정 시간씩 번갈아가며 제공
예시 :
- Time Quantum = 2
- 프로세스 순서대로 2초씩 CPU 사용 → 시간이 다 되면 뒤로 보냄
장점 :
- 반응성이 좋음 (인터렉티브 시스템에 적합)
- 공정성이 높다
단점 :
- Time Quantum 설정이 매우매우 중요하다 !
- 너무 짧으면 오버헤드가 큼
- 너무 길면 FCFS처럼 됨
MLFQ (Multi-Level Feedback Queue)
여러 개의 큐를 만들고, 우선순위 + 타임 슬라이스 + 동적 이동까지 지원하는 고급 스케줄링
주요 특징 :
- 프로세스가 큐 간에 이동 (Feedback)
- 새로 들어온 프로세스는 높은 우선순위 큐로
- 오래 실행되는 프로세스는 낮은 우선순위 큐로 이동
장점 :
- 다양한 워크로드에 유연하게 대응
- 실제 운영체제에서 많이 사용된다고 한다 (ex. Linux CFS, Windows scheduler에 응용)
단점 :
✏️ 마무리 정리
이 포스팅에서는 CPU 스케줄러의 개념부터
선점/비선점 스케줄링의 차이, 그리고 대표 알고리즘들까지 상세하게 살펴봤습니다.
📌 핵심만 다시 정리해보면:
- CPU 스케줄러는 멀티태스킹 환경에서 누가 CPU를 사용할지 결정하는 존재
- 선점형은 응답성이 중요할 때, 비선점형은 안정성과 예측성이 필요할 때 유리
- 각 알고리즘마다 장단점이 뚜렷하므로, 시스템 목적에 따라 선택이 달라짐
- MLFQ는 실제 OS에서 사용하는 복합적이고 유연한 고급 스케줄러
