OS CPU 스케줄링 알고리즘 종류와 차이
한 줄 답변
CPU 스케줄링은 FCFS·SJF·Round Robin·Priority 방식으로 나뉘며, 현대 OS는 선점형 Round Robin 기반의 다단계 피드백 큐(MLFQ)를 주로 채택한다.
핵심 개념 정리
OS의 CPU 스케줄러는 준비 큐(Ready Queue)에 있는 프로세스 중 다음에 실행할 프로세스를 선택하는 핵심 모듈이다. 스케줄링 알고리즘의 선택은 처리량(Throughput), 평균 대기 시간(Waiting Time), 응답 시간(Response Time), 공정성(Fairness)에 직접 영향을 주며, 시스템 부하 특성에 따라 최적 알고리즘이 달라진다.
비선점형(Non-preemptive) 방식에서는 실행 중인 프로세스가 자발적으로 CPU를 반납하기 전까지 다른 프로세스가 개입할 수 없다. FCFS(First-Come-First-Served)는 도착 순서대로 실행하여 구현이 단순하다. 단점이 명확하다. 수행 시간이 긴 프로세스 뒤에 짧은 프로세스가 몰리는 호위 효과(Convoy Effect)가 발생하여 평균 대기 시간이 급격히 늘어난다. SJF(Shortest Job First)는 이론상 평균 대기 시간이 최소지만, CPU 버스트 시간을 사전에 예측하기 어렵고 긴 작업이 무한 대기 상태인 기아(Starvation)에 빠질 수 있다.
선점형(Preemptive) 방식의 대표는 Round Robin(RR)이다. 각 프로세스에 Time Quantum(타임 슬라이스)을 부여하고 초과 시 강제로 컨텍스트 스위칭이 발생한다. Time Quantum이 1ms 이하로 너무 짧으면 스위칭 오버헤드가 전체 CPU 시간을 잠식하고, 수백 ms 이상으로 길면 사실상 FCFS와 같아진다. 실무에서는 보통 10~100ms 범위로 설정한다.
Priority Scheduling은 각 프로세스에 우선순위를 부여하고 가장 높은 우선순위를 먼저 실행하는 방식이다. 기아 문제를 해결하기 위해 대기 시간이 길어질수록 우선순위를 점진적으로 올리는 에이징(Aging) 기법을 결합한다. Linux 커널의 CFS(Completely Fair Scheduler)는 각 프로세스의 가상 실행 시간(vruntime)을 레드-블랙 트리로 관리해 O(log n) 비용으로 다음 실행 프로세스를 선택하며, 커널 5.x 계열에서도 기본 스케줄러로 동작한다.
현대 범용 OS는 다단계 피드백 큐(MLFQ, Multilevel Feedback Queue)를 채택한다. CPU를 많이 소모할수록 낮은 우선순위 큐로 강등하고, I/O 대기 후 복귀하면 높은 큐로 승격하여 대화형 작업과 배치 작업 모두를 효율적으로 처리한다. MLFQ는 단일 알고리즘의 한계를 계층 구조로 극복한 설계다.
비교 정리
| 항목 | 선점형(Preemptive) | 비선점형(Non-preemptive) |
|---|---|---|
| CPU 강제 회수 | 타임아웃·우선순위 변경 시 실행 중 프로세스를 즉시 교체 | 프로세스가 스스로 반납하거나 종료해야만 전환 가능 |
| 응답 시간 | Time Quantum 단위로 교체되어 대화형 작업에 유리 | 앞선 작업이 끝나야 시작 가능해 응답 지연이 길어짐 |
| 컨텍스트 스위칭 비용 | 전환 빈도가 높아 캐시 미스·오버헤드 증가 | 전환 횟수 자체가 적어 CPU 효율이 상대적으로 높음 |
| 기아(Starvation) 위험 | Round Robin은 없음. Priority는 에이징(Aging)으로 해결 | SJF·Priority에서 낮은 우선순위 프로세스가 무한 대기 가능 |
| 대표 알고리즘 | Round Robin, SRTF, 선점형 Priority Scheduling | FCFS, SJF, 비선점형 Priority Scheduling |
면접에서 이렇게 답하세요
스케줄링 알고리즘을 설명할 때는 '선점형·비선점형 분류 → 각 알고리즘의 동작 원리 → 대표적인 문제점과 해결책' 순서로 답변하면 논리적 흐름이 분명해진다. 이름만 나열하는 데 그치지 말고 FCFS의 Convoy Effect, SJF의 Starvation, RR의 Time Quantum 트레이드오프처럼 각 알고리즘의 구체적 한계를 짚어야 한다. 'Linux CFS가 vruntime을 레드-블랙 트리로 관리한다'거나 '실제 서버 애플리케이션에서 스레드 우선순위를 조정해 응답 지연을 개선한 경험이 있다'는 식으로 기술 맥락을 추가하면 차별화된다. 현대 OS가 MLFQ를 선택한 이유까지 연결하면 깊이 있는 답변이 완성된다.
자주 묻는 추가 질문
Q. Starvation과 Deadlock은 어떻게 다른가요?
Starvation은 낮은 우선순위 프로세스가 CPU를 계속 할당받지 못하는 상태이고, Deadlock은 두 프로세스가 서로의 자원을 기다리며 모두 진행되지 못하는 상태다. 원인과 해결책이 전혀 다르다.
Q. Round Robin의 Time Quantum은 어떻게 결정하나요?
컨텍스트 스위칭 비용(보통 1ms 미만)의 10~100배인 10~100ms를 기준으로, CPU 집중 작업이 많으면 크게 대화형 작업이 많으면 작게 조정한다. 극단값은 각각 FCFS와 무한 오버헤드 문제를 유발한다.
Q. MLFQ가 단순 Round Robin보다 유리한 이유는 무엇인가요?
MLFQ는 I/O 집중 프로세스와 CPU 집중 프로세스를 다른 큐로 분리해 처리하므로, 단일 Time Quantum으로 모두 처리하는 RR보다 대화형 응답성과 배치 처리량을 동시에 최적화할 수 있다.
커뮤니티 하이라이트
“MLFQ와 Linux CFS의 vruntime까지 언급하면 확실히 눈에 띕니다. 알고리즘 이름만 나열하는 답변과의 체감 차이가 큽니다.”
“Time Quantum 트레이드오프를 꼬리질문으로 자주 받았어요. 10ms 기준 컨텍스트 스위칭 비용 논리를 미리 정리해두면 막히지 않습니다.”
32명의 개발자가 이 질문에 참여했습니다
관련 면접 질문
앱에서 직접 답변해보세요
매일 3개의 면접 질문에 답변하고,
다른 개발자들의 답변을 비교해보세요.