SJF

기술노트

📈 SJF 스케줄링 알고리즘

SJF (Shortest Job First)는 CPU 스케줄링 알고리즘의 한 종류로, 준비 큐(Ready Queue)에 있는 프로세스 중에서 실행 시간이 가장 짧은 것을 먼저 실행하는 방식입니다. 이 알고리즘의 주된 목표는 시스템의 평균 대기 시간을 최소화하는 것입니다.


✌️ 두 가지 방식: 비선점과 선점

SJF는 크게 두 가지 방식으로 나뉩니다.

1. 비선점 (Non-Preemptive) SJF

프로세스가 일단 CPU를 할당받으면, 자신의 실행 시간이 모두 끝날 때까지 다른 프로세스가 끼어들 수 없습니다. 현재 프로세스가 실행 중일 때 더 짧은 프로세스가 도착하더라도, 현재 작업이 끝날 때까지 기다려야 합니다.


2. 선점 (Preemptive) SJF

현재 실행 중인 프로세스의 '남은 실행 시간'보다 더 짧은 실행 시간을 가진 새로운 프로세스가 도착하면, 기존 프로세스를 중단하고 새로운 프로세스에게 CPU를 넘겨줍니다. 이 방식은 특별히 SRTF (Shortest Remaining Time First)라고도 불립니다.


👍 장점과 단점 👎

장점

  • 최적의 평균 대기 시간 : 주어진 프로세스들에 대해 평균 대기 시간을 최소화할 수 있는 가장 효율적인 알고리즘으로 증명되었습니다.

단점

  • 기아 현상 (Starvation) : 실행 시간이 긴 프로세스는 계속해서 들어오는 짧은 프로세스들에 밀려, 심한 경우 영원히 실행되지 못할 수 있습니다.
  • 실행 시간 예측의 어려움 : 가장 치명적인 단점으로, 프로세스가 얼마나 오래 실행될지를 미리 예측하는 것이 현실적으로 거의 불가능합니다.

💡 개발자 핵심 Point

  • SJF는 가장 짧은 작업을 먼저 처리하여, 시스템 전체의 평균 대기 시간을 줄이는 것을 목표로 하는 스케줄링 알고리즘입니다.
  • 비선점 방식은 작업이 끝나야 다음으로 넘어가고, 선점 방식(SRTF)은 더 짧은 작업이 오면 현재 작업을 중단하고 바로 교체합니다.
  • 이론적으로는 가장 효율적이지만, 실행 시간을 미리 알 수 없다는 현실적인 문제 때문에 실제 OS에서 그대로 사용하기는 어렵습니다.
  • 이 때문에 실제 시스템에서는 SJF의 컨셉을 응용하여, 과거의 실행 시간을 바탕으로 미래를 예측하는 방식으로 변형하여 사용하기도 합니다.