🚦 CPU 스케줄링 알고리즘

2025. 11. 18. 17:16·Computer Science/Operating System

CPU 스케줄러는 CPU 스케줄링 알고리즘에 따라, 어떤 프로세스(의 스레드)에게 CPU를 할당할지 결정합니다. 프로그램이 실행될 때, CPU 스케줄링 알고리즘은 어떤 프로그램에 CPU 소유권을 줄 것인지 결정합니다. 이 알고리즘의 목표는 다음과 같습니다.

  • CPU 이용률은 높게
  • 처리량 (주어진 시간에 많은 일을 처리)은 많게
  • 대기 시간 (준비 큐에서 기다리는 시간)은 짧게
  • 응답 시간 (작업 요청 후 첫 반응까지의 시간)은 짧게

✋ 비선점형 방식(non-preemptive)

프로세스가 스스로 CPU 소유권을 포기할 때까지 (예: I/O 작업 요청) 기다리는 방식입니다. 운영체제가 강제로 프로세스를 중지시키지 않습니다. 따라서 문맥 교환(Context Switching)으로 인한 부하가 적습니다.

🚶➡️ FCFS(First Come, First Served)

가장 먼저 준비 큐(Ready Queue)에 도착한 순서대로 처리하는 알고리즘입니다. (일명 '선착순') 하지만 아주 긴 작업이 CPU를 독점하면, 그 뒤에 있는 짧은 작업들이 하염없이 기다려야 하는 '호위 효과(Convoy Effect)'라는 심각한 단점이 있습니다.

⚡ SJF(Shortest Job First)

실행 시간이 가장 짧을 것으로 예상되는 프로세스를 가장 먼저 실행하는 알고리즘입니다. 평균 대기 시간을 가장 짧게 만드는 최적의 알고리즘이지만, 실행 시간이 긴 프로세스는 자신보다 짧은 작업들에게 계속 밀려 영원히 실행되지 못하는 현상(기아 상태, starvation)이 일어날 수 있습니다.

현실적 한계: 실제로는 실행 시간을 미리 알 수 없기 때문에, 과거의 실행 시간을 토대로 추측해서 사용합니다.

👑 우선순위(Priority)

프로세스마다 '우선순위'라는 등급을 부여하고, 우선순위가 가장 높은 프로세스에게 CPU를 할당하는 알고리즘입니다. (SJF도 '실행 시간이 짧은 것'을 가장 높은 우선순위로 본다고 할 수 있습니다.)

단점: SJF와 마찬가지로, 우선순위가 낮은 프로세스는 기아 상태(starvation)에 빠질 수 있습니다.

해결책: 이를 보완하기 위해, 오래 기다린 프로세스의 우선순위를 점점 높여주는 '에이징(Aging)' 기법을 함께 사용하기도 합니다.


🚦 선점형 방식(preemptive)

현대 운영체제가 주로 쓰는 방식으로, 지금 사용하고 있는 프로세스를 (시간 만료, 우선순위 등) 알고리즘에 의해 강제로 중단시키고 다른 프로세스에 CPU 소유권을 할당하는 방식입니다.

🔄 라운드 로빈(RR, Round Robin)

현대 컴퓨터가 쓰는 대표적인 선점형 스케줄링 방법입니다. 각 프로세스는 '타임 슬라이스(q)'라는 동일한 할당 시간을 받습니다. 만약 그 시간 안에 작업이 끝나지 않으면, 프로세스는 준비 큐(Ready Queue)의 맨 뒤로 보내집니다. (모든 프로세스가 공평하게 돌아가며 기회를 얻음)

  • 예를 들어 q만큼의 할당 시간이 부여되었고 N개의 프로세스가 운영된다고 하면, (N-1) * q 시간이 지나면 자기 차례가 오게 됩니다.
  • 특징: 할당 시간(q)이 너무 크면 FCFS처럼 동작하고, 너무 짧으면 문맥 교환(Context Switching)이 잦아져 오버헤드(비용)가 커집니다.
  • 장점: 전체 작업 시간은 길어질 수 있지만, 평균 응답 시간은 짧아진다는 큰 장점이 있습니다. (짧은 작업들이 긴 작업 뒤에서 기다릴 필요가 없음)
  • 활용: 이 알고리즘은 로드밸런서에서 트래픽을 분산하는 알고리즘으로도 쓰입니다.

🔬 SRF(Shortest Remaining Time First)

(SJF는 비선점형이라 일단 시작하면 끝나야 합니다.) SRF는 현재 실행 중인 작업의 '남은 시간'보다 '더 짧은' 작업이 준비 큐에 새로 들어오면, 즉시 수행하던 프로세스를 중지(선점)하고 그 더 짧은 작업을 수행하는 알고리즘입니다.

📊 다단계 큐(Multilevel Queue)

우선순위별로 준비 큐(Ready Queue)를 여러 개 사용하는 방식입니다. 예를 들어, '실시간 작업 큐', '일반 작업 큐', '백그라운드 작업 큐' 등으로 나눕니다.

  • 각 큐는 서로 다른 스케줄링 알고리즘(예: 실시간 큐는 FCFS, 일반 큐는 라운드 로빈)을 적용할 수 있습니다.
  • 특징: 큐 간의 프로세스 이동이 안 된다는 규칙이 있어 스케줄링 부담이 적지만, 작업의 성격이 바뀌어도 큐를 옮길 수 없어 유연성이 떨어지는 특징이 있습니다.

1. 선점형 스케줄링과 비선점형 스케줄링의 차이에 대해 설명하세요.

선점형 스케줄링은 운영체제가 강제로 CPU를 빼앗아 다른 프로세스에 할당할 수 있는 방식으로, 라운드 로빈이 대표적입니다. 긴급한 작업을 빠르게 처리할 수 있어 현대 운영체제 대부분이 이 방식을 사용합니다. 반면 비선점형 스케줄링은 프로세스가 작업을 마치거나 대기 상태가 되기 전까지는 CPU를 놓지 않는 방식입니다. FCFS가 대표적이며, 문맥 교환 오버헤드는 적지만 긴급한 작업이 늦어질 수 있다는 단점이 있습니다.

'Computer Science > Operating System' 카테고리의 다른 글

🧵 프로세스와 스레드  (0) 2025.11.18
🗂️ 메모리 관리  (0) 2025.11.05
💾 메모리 계층  (0) 2025.11.05
🧱 컴퓨터의 요소  (0) 2025.11.05
🧑‍⚖️ 운영체제의 역할과 구조  (0) 2025.11.05
'Computer Science/Operating System' 카테고리의 다른 글
  • 🧵 프로세스와 스레드
  • 🗂️ 메모리 관리
  • 💾 메모리 계층
  • 🧱 컴퓨터의 요소
TECHNING
TECHNING
Hi! I'm techning
  • TECHNING
    TECHNING
    TECHNING
    • 분류 전체보기 (54)
      • Computer Science (45)
        • Design Pattern (11)
        • Programming Paradigm (4)
        • Network (15)
        • Operating System (6)
        • Database (6)
        • Data Structure (3)
      • Algorithm (5)
        • Python (3)
        • Java (1)
      • IT Insight (4)
  • hELLO· Designed By정상우.v4.10.4
TECHNING
🚦 CPU 스케줄링 알고리즘
상단으로

티스토리툴바