SJF
실행 시간이 가장 짧은 프로세스를 먼저 실행하는 비선점형 스케줄링 알고리즘입니다.
동작 방식
준비 큐에서 실행 시간이 가장 짧은 프로세스 선택
→ 완료될 때까지 CPU 점유 (비선점)
예시
| 프로세스 | 도착 시간 | 실행 시간 |
| P1 | 0ms | 7ms |
| P2 | 2ms | 4ms |
| P3 | 4ms | 1ms |
[FCFS 방식]
P1[───────]P2[────]P3[─]
0 7ms 11ms 12ms
평균 대기: (0 + 7 + 11) / 3 = 6ms
[SJF 방식]
P1 도착 시 혼자이므로 바로 실행
P1[───────]P3[─]P2[────]
0 7ms 8ms 12ms
평균 대기: (0 + 7 + 1) / 3 = 2.6ms ← 더 짧음
장단점
| 장점 | 단점 |
| 평균 대기 시간 최소화 | 실행 시간 예측 어려움 |
| 처리량 높음 | 긴 작업 기아(Starvation) 발생 |
기아(Starvation) 문제
짧은 작업이 계속 들어오면
→ 긴 작업은 영원히 실행되지 못함
해결: 에이징(Aging)
→ 오래 기다린 프로세스 우선순위를 점진적으로 높임
FCFS vs SJF vs SRTF
| FCFS | SJF | SRTF |
| 선점 여부 | X | X | O |
| 기준 | 도착 순서 | 전체 실행 시간 | 남은 실행 시간 |
| 평균 대기 시간 | 보통 | 최적에 가까움 | 최적 |
| 기아 발생 | X | O | O |
SJF는 평균 대기 시간을 최소화하지만 실행 시간을 미리 알기 어렵다는 현실적 한계가 있어, 과거 실행 시간을 기반으로 예측값을 사용하는 방식으로 보완합니다.