CPU Scheduler

CorinBeom·2025년 5월 14일
0

CS

목록 보기
16/22

이전 PintOS 포스팅에서 CPU 스케줄러에 대해 간단히 언급한 적이 있었다.
이번 포스팅에서는 CPU 스케줄러가 정확히 무엇인지, 그리고 각 알고리즘이 어떤 방식으로 동작하는지 깊이 있게 알아보자.


CPU 스케줄러란?

실행 가능한 프로세스 중에서 어떤 프로세스에게 CPU를 할당할지를 결정하는 운영체제의 핵심 모듈입니다.

  • 멀티태스킹 환경에서는 CPU 스케줄러가 필수이다.

  • 제한된 CPU 자원을 효율적이고 공정하게 분배해준다 !

  • 사용자 경험(반응성)과 시스템 성능(처리량, 자원 활용도)에 큰 영향을 준다

언제 작동하는가? (스케줄링 시점)

CPU 스케줄러는 다음과 같은 상황에서 개입한다 :

  1. 현재 프로세스가 종료되었을 때
  2. 입출력 대기 등으로 Block 상태에 빠질 때
  3. 새로운 프로세스가 Ready 상태로 진입할 때
  4. 타이머 인터럽트(예: 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에서 사용하는 복합적이고 유연한 고급 스케줄러

profile
Before Sunrise

0개의 댓글