CS/운영체제

스케줄링?

Geisha 2025. 1. 14. 00:43

 

 

CPU 스케줄링은 단순히 이론적인 지식을 넘어,
안정적이고 효율적인 서버 환경을 구축하고 최적화된 애플리케이션을 개발하는 데 중요한 역할을 한다.

백엔드 개발자는 서버에서 발생하는 프로세스와 스레드의 관리를 이해해야 하며,
이는 동시성 문제를 해결하고 응답 속도를 최적화하기 위한 첫걸음이다.
예를 들어, 요청이 많아지는 상황에서 적절한 스케줄링 알고리즘을 이해하고 활용하면
CPU 자원을 효율적으로 배분하여 서비스 품질을 유지할 수 있다.

CPU 스케줄링을 이해하는 것은 단순히 백엔드 개발의 지식을 넓히는 것을 넘어,
실질적인 성능 최적화와 안정적인 서비스 제공의 기반을 마련하는 데 있어 필수적인 요소다.
그렇기에 개발자가 목표라면 스케줄링을 알아야 한다.


스케줄링

스케줄링운영체제가 CPU와 같은 시스템 자원을 효율적으로 할당하기 위해 작업이나 프로세스의 실행 순서를 결정하는 과정이다. 스케줄링의 주요 목표는 공정성, 효율성, 응답 시간 최소화, 대기 시간 최소화, CPU 이용률 최대화다.

 

 

스케줄링 큐

스케줄링 큐운영체제에서 프로세스가 실행되기 전 또는 실행 중에 관리되는 대기열을 의미한다. 프로세스는 상태(Ready, Waiting, Running 등)에 따라 다른 큐에 배치되며, 운영체제는 이 큐를 기반으로 스케줄링을 수행하여 CPU 자원을 적절히 할당한다.

 

 

가장 공정한 CPU 스케줄링?

준비 큐 (Ready Queue)

  • 준비 큐는 CPU를 할당받을 준비가 된 프로세스가 대기하는 큐입니다.
  • 이 큐에 있는 프로세스들은 실행 상태로 전환될 수 있으며, CPU 스케줄러가 여기서 프로세스를 선택해 실행합니다.

특징

  1. 상태: Ready (대기 중이지만 실행 준비 완료)
  2. 프로세스는 CPU를 할당받기 전까지 준비 큐에 머무릅니다.
  3. 선점형 스케줄링(예: SRT)일 경우, CPU에서 선점된 프로세스가 다시 준비 큐로 이동합니다.

사용 예시

  • 사용자가 요청한 작업(프로세스)이 CPU 실행을 대기하는 상태.
  • 예: 다운로드 작업이 시작되기 전 대기 상태로 준비 큐에서 대기.

대기 큐 (Waiting Queue)

  • 대기 큐는 특정 이벤트(예: I/O 작업 완료, 자원 확보 등)를 기다리는 프로세스가 대기하는 큐입니다.
  • 이 큐에 있는 프로세스들은 대기 중인 이벤트가 발생하면 다시 준비 큐로 이동합니다.

특징

  1. 상태: Waiting (I/O 대기 또는 특정 이벤트 대기)
  2. 대기 큐는 I/O 디바이스마다 별도로 존재할 수 있습니다.
  3. 대기 중인 이벤트가 발생하면 준비 큐로 전환됩니다.

사용 예시

  • 파일 읽기/쓰기 작업 중 디스크에서 데이터를 읽는 동안 해당 프로세스가 대기 큐에 들어갑니다.
  • 예: 네트워크 작업 요청으로 데이터 전송을 기다리는 프로세스.

가장 공정한 CPU 스케줄링?

입출력 작업이 많은 프로세스(=입출력 집중 프로세스)의 우선순위는 CPU 작업이 많은 프로세스 (=CPU 집중 프로세스)의 우선순위보다 높다.

 


 

프로세스 우선순위

프로세스 우선순위는 운영체제가 여러 프로세스를 효율적으로 관리하고 스케줄링할 수 있도록 각 프로세스에 부여하는 값이다. 우선순위는 프로세스가 CPU 자원을 얼마나 빨리 확보할 수 있을지를 결정한다. 이는 프로세스마다 존재하는 PCB에 기록된다.

프로세스 우선순위의 개념

  • 높은 우선순위를 가진 프로세스는 낮은 우선순위 프로세스보다 먼저 CPU를 할당받습니다.
  • 운영체제의 스케줄링 알고리즘에 따라 우선순위는 절대적이거나 상대적으로 작용할 수 있습니다.

 

스케줄링 알고리즘

선점형 스케줄링과 비선점형 스케줄링

 

선점형 스케줄링 (Preemptive Scheduling)

  • CPU를 할당받은 프로세스가 실행 중이더라도, 더 높은 우선순위를 가진 프로세스가 등장하면 현재 프로세스를 중단하고 CPU를 강제로 할당.
  • 장점: 높은 우선순위의 프로세스가 빠르게 실행됨.
  • 단점: 문맥 전환(Context Switching)이 잦아 오버헤드 발생 가능.
  • 예시: SRT(Shortest Remaining Time), 우선순위 스케줄링(선점형), RR(Round Robin).

비선점형 스케줄링 (Non-Preemptive Scheduling)

  • CPU를 할당받은 프로세스가 작업을 완료하거나 스스로 종료 상태에 도달하기 전까지 다른 프로세스가 CPU를 빼앗을 수 없음.
  • 장점: 구현이 간단하며 오버헤드가 적음.
  • 단점: 긴 작업이 실행 중일 때 다른 프로세스가 기다려야 함.
  • 예시: FCFS(First Come First Serve), SJF(Shortest Job First), 우선순위 스케줄링(비선점형).

스케줄링 알고리즘의 종류

FCFS (First Come First Serve)

  • 프로세스가 도착한 순서대로 CPU를 할당.
  • 특징:
    • 비선점형 방식.
    • 간단하고 공정하나, 긴 작업이 먼저 도착하면 대기 시간이 길어짐.
    • 문제점: Convoy Effect(호위 효과) 발생 가능.
      긴 작업이 CPU를 점유하면 짧은 작업들이 길게 대기.
       

호위효과?

- 실행 시간이 긴 프로세스가 CPU를 점유하는 동안 실행 시간이 짧은 프로세스들이 길게 대기하게 되는 현상.


2. SJF (Shortest Job First)

  • 실행 시간이 가장 짧은 프로세스에 먼저 CPU를 할당.
  • 특징:
    • 비선점형 방식.
    • 평균 대기 시간을 최소화하지만, 실행 시간을 미리 알아야 구현 가능.
    • 문제점: 긴 작업은 무한정 대기할 수 있어 기아(Starvation)현상 발생 가능.

3. RR (Round Robin)

  • 각 프로세스에 동일한 시간(Time Quantum)을 할당하며, 순환하며 실행.
  • 특징:
    • 선점형 방식.
    • 응답 시간이 빠르고, 모든 프로세스가 공정하게 실행됨.
    • 문제점: Time Quantum이 너무 작으면 문맥 전환 비용이 커지고, 너무 크면 FCFS처럼 동작.

4. SRT (Shortest Remaining Time)

  • 실행 시간이 가장 짧게 남은 프로세스에 CPU를 할당.
  • 특징:
    • 선점형 방식.
    • SJF의 선점 버전으로, 더 짧은 작업이 도착하면 현재 작업을 중단.
    • 긴 작업이 계속 대기하는 기아 현상 발생 가능.

5. 우선순위 스케줄링 (Priority Scheduling)

  • 프로세스에 우선순위를 부여하고, 우선순위가 높은 프로세스부터 CPU를 할당.
  • 특징:
    • 선점형 및 비선점형으로 동작 가능.
    • 문제점:
      • 낮은 우선순위의 작업이 무한정 대기하는 기아 현상 발생 가능.
    • 해결책:
      • 에이징(Aging): 오래 대기한 프로세스의 우선순위를 점진적으로 높여 기아를 방지.

6. 다단계 큐 스케줄링 (Multilevel Queue Scheduling)

  • 프로세스를 우선순위 또는 작업 특성에 따라 여러 큐로 나누고, 각 큐는 독립적인 스케줄링 알고리즘을 실행하는 방식.
  • 특징:
    • 비선점형 방식.
    • 높은 우선순위 큐가 낮은 우선순위 큐보다 먼저 실행.
    • 큐마다 다른 스케줄링 알고리즘 사용 가능(FIFO, RR 등).
    • 프로세스는 큐를 이동하지 않음.
  • 문제점:
    • 낮은 우선순위 큐에서 기아 현상 발생 가능.

7. 다단계 피드백 큐 스케줄링 (Multilevel Feedback Queue Scheduling)

  • 다단계 큐 스케줄링의 개선된 방식으로, 프로세스가 실행 시간에 따라 큐를 이동할 수 있는 동적 스케줄링 방식입니다.
  • 특징:
    • 선점형 방식.
    • 짧은 작업에 빠른 응답을 제공하며, 긴 작업은 점진적으로 낮은 우선순위 큐에서 처리.
    • 오래 대기한 작업은 우선순위를 높여 기아 문제를 방지.
  • 문제점:
    • 문맥 전환(Context Switching)이 잦아 오버헤드 발생 가능.
    • 구현이 복잡.