Foundry
운영체제
기초
핵심

CPU 스케줄링

FCFS, SJF, RR, Priority 스케줄링

CPU 스케줄링

준비 상태의 프로세스 중 어떤 것에 CPU를 할당할지 결정하는 정책

스케줄링 기준

지표설명목표
CPU 이용률CPU 사용 비율최대화
처리량단위 시간당 완료 수최대화
대기 시간Ready Queue 대기최소화
응답 시간첫 응답까지 시간최소화
반환 시간제출~완료 시간최소화

비선점 vs 선점

[비선점] CPU 자발적 반환
  프로세스가 끝나거나 I/O 할 때만 전환
  예: FCFS, SJF

[선점] 강제로 빼앗을 수 있음
  타임 슬라이스 만료, 높은 우선순위 도착
  예: Round Robin, SRTF, 멀티레벨

주요 알고리즘

[FCFS] 선착순
P1(24ms) P2(3ms) P3(3ms)
|---P1---24---|P2-27|P3-30|
평균 대기: (0+24+27)/3 = 17ms
→ Convoy Effect (긴 작업 뒤에 줄서기)

[SJF] 짧은 작업 우선
P2(3ms) P3(3ms) P1(24ms)
|P2-3|P3-6|---P1---30---|
평균 대기: (6+0+3)/3 = 3ms
→ 최적! 하지만 실행시간 예측 어려움

[RR] 라운드 로빈 (quantum=4ms)
|P1|P2|P3|P1|P1|P1|P1|P1|
→ 공정, 응답 시간 좋음
→ quantum 크면 FCFS, 작으면 오버헤드
알고리즘선점장점단점
FCFS비선점단순Convoy
SJF비선점최적 대기시간예측 어려움
SRTF선점SJF 선점형기아 가능
RR선점공정, 응답 좋음quantum 선택
Priority둘다중요도 반영기아
MLFQ선점적응형복잡

실무: MLFQ (멀티레벨 피드백 큐)

Queue 0 (높은 우선순위, quantum=8ms)
  ↓ 시간 초과 시 강등
Queue 1 (중간, quantum=16ms)
  ↓ 시간 초과 시 강등
Queue 2 (낮은, FCFS)

I/O 완료 → 최상위 큐로 승격
→ I/O 바운드 우대, CPU 바운드 점진적 강등

Linux CFS: 모든 프로세스에 공정한 CPU 시간 분배

면접에서 이렇게 나옵니다

Q.선점형과 비선점형 스케줄링의 차이는?

실행 중인 프로세스에게서 CPU 를 뺏을 수 있는지가 다릅니다.

항목선점형비선점형
CPU 회수강제로 뺏는다스스로 놓을 때까지 기다린다
응답성좋다나쁘다. 긴 작업 뒤에서 오래 기다린다
문맥 교환잦다적다
공유 자원중간에 뺏겨 일관성 문제가 생길 수 있다상대적으로 단순
라운드 로빈, 다단계 큐FCFS, 비선점 SJF

현대 범용 운영체제는 모두 선점형입니다. 비선점이면 무한 루프에 빠진 프로그램 하나가 시스템 전체를 멈추기 때문입니다.

비선점이 나은 곳도 있습니다. 처리량만 중요한 배치 시스템은 교환 비용이 없는 쪽이 유리합니다.

흔한 실수: 선점을 "우선순위가 높으면 뺏는다"로만 설명하는 것. 시간 할당량이 끝나도 뺏습니다. 우선순위와 무관하게 공평하게 나누는 것도 선점입니다.

Q.Round Robin의 타임 퀀텀이 성능에 미치는 영향은?

너무 크면 순서대로 처리하는 것과 같아지고, 너무 작으면 교환 비용이 실제 일을 잡아먹습니다.

퀀텀결과
매우 크다사실상 FCFS. 응답 시간이 나빠진다
적당하다응답성과 처리량이 균형을 이룬다
매우 작다문맥 교환이 폭증해 실제 작업 시간이 줄어든다

기준은 문맥 교환 비용과의 비율입니다. 교환에 10마이크로초가 든다면 퀀텀이 100마이크로초일 때 10%를 교환에 쓰는 셈입니다. 보통 대부분의 작업이 한 퀀텀 안에 끝나도록 잡습니다.

리눅스는 고정 퀀텀 대신 목표 지연 시간을 두고 실행 가능한 프로세스 수로 나누는 방식을 씁니다. 프로세스가 많아지면 각자의 몫이 자동으로 줄어듭니다.

흔한 실수: 퀀텀을 작게 할수록 공평하다고 답하는 것. 공평해지지만 전체 처리량이 떨어져 모두가 느려집니다.

Q.SJF가 최적인 이유와 실무에서 못 쓰는 이유는?

평균 대기 시간을 최소로 만드는 것이 증명돼 있습니다. 짧은 작업을 먼저 끝내면 뒤에서 기다리는 총 시간이 줄어듭니다.

A(10초), B(1초), C(1초) 세 작업으로 비교하면 이렇습니다.

실행 순서각자의 대기 시간합계
A, B, C0초, 10초, 11초21초
B, C, A0초, 1초, 2초3초

실무에서 못 쓰는 이유는 두 가지입니다.

이유내용
실행 시간을 미리 모른다각 요청이 얼마나 걸릴지 사전에 알 수 없다
기아짧은 작업이 계속 들어오면 긴 작업이 영원히 밀린다

첫 번째는 과거 실행 시간으로 추정해 완화할 수 있고, 두 번째는 기다린 시간만큼 우선순위를 올려주는 방식으로 막습니다.

흔한 실수: 기아만 말하고 실행 시간을 모른다는 점을 빼는 것. 후자가 더 근본적인 제약입니다.

Q.MLFQ 스케줄링을 설명해주세요.

우선순위가 다른 여러 큐를 두고, 관측된 행동에 따라 프로세스를 옮기는 방식입니다.

규칙내용
시작가장 높은 큐에서 시작한다
할당량을 다 쓰면한 단계 낮은 큐로 내린다
다 쓰기 전에 I/O 로 내려가면우선순위를 유지한다
주기적으로모두 최상위로 올린다

이 규칙이 만드는 효과는 실행 시간을 미리 몰라도 짧은 작업 우선과 비슷하게 동작한다는 것입니다. 짧은 작업은 끝나기 전에 큐를 내려갈 일이 없어 빨리 처리되고, 긴 작업은 자연히 아래로 내려갑니다.

네 번째 규칙이 기아를 막습니다. 아래에서 오래 기다린 프로세스도 주기적으로 위로 올라와 실행 기회를 얻습니다.

흔한 실수: 마지막 규칙을 빼고 답하는 것. 그것이 없으면 긴 작업이 최하위에 갇혀 영원히 밀립니다. 그리고 짧게 쓰고 내려가는 작업의 우선순위를 유지하는 것이 대화형 응답성을 지키는 핵심입니다.

먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.

더 깊이 공부하기

읽었으면 문제로 확인해보세요

운영체제 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.