Starvation
특정 프로세스가 자원을 영원히 할당받지 못하고 무한히 대기하는 상태입니다.
발생 원인
우선순위가 낮은 프로세스가 있는데
높은 우선순위 프로세스가 계속 들어오면
→ 낮은 우선순위 프로세스는 영원히 실행 못함
발생하는 스케줄링
| 알고리즘 | 발생 이유 |
|---|---|
| SJF / SRTF | 짧은 작업이 계속 들어와 긴 작업이 밀림 |
| 우선순위 스케줄링 | 높은 우선순위가 계속 들어와 낮은 것이 밀림 |
Starvation vs Deadlock
| Starvation | Deadlock | |
|---|---|---|
| 원인 | 자원 배분 불공평 | 자원 순환 대기 |
| 실행 가능성 | 이론상 가능 (자원 있음) | 불가능 (서로 대기) |
| 해결 | 에이징(Aging) | 예방/회피/탐지 |
해결 방법 - 에이징 (Aging)
대기 시간이 길어질수록 우선순위를 점진적으로 높임
P1 (우선순위 10, 30분 대기)
→ 에이징 적용
→ 우선순위 10 → 7 → 4 → 1
→ 결국 실행됨 O
// 에이징 개념 (의사 코드)
while (waiting) {
waitTime++;
if (waitTime % 10 == 0) {
priority--; // 숫자 낮을수록 높은 우선순위
}
}
Starvation은 공평성(Fairness) 문제로, 에이징을 통해 오래 기다린 프로세스가 반드시 실행될 수 있도록 보장합니다.