ZeroBase/CS

Convoy Effect, Starvation, Busy Wait

Red_Horse 2025. 9. 8. 09:06

운영체제의 프로세스 스케줄링에서 발생할 수 있는 주요 문제점들을 이해하는 것은 시스템 성능 최적화에 매우 중요합니다. 오늘은 Convoy Effect, Starvation, Busy Wait의 차이점과 각각의 해결 방안을 자세히 알아보겠습니다.

 

1. Convoy Effect (호위 효과)

 

 

몇 개의 시간이 오래 걸리는 프로세스로 인해 다른 프로세스들의 실행이 느려지는 현상

 

정의 및 특징

  • 전체적인 프로세스 성능 저하 야기
  • 평균 대기시간 증가
  • 주로 FCFS(First Come First Served) 알고리즘에서 발생

 

발생 시나리오

프로세스 대기열:
P1 (실행시간: 100초) → P2 (실행시간: 1초) → P3 (실행시간: 1초) → P4 (실행시간: 1초)

FCFS 스케줄링 결과:
시간: 0      100    101    102    103
     [  P1   ][ P2 ][P3 ][P4 ]

대기 시간:
- P1: 0초
- P2: 100초 (불필요하게 긴 대기)
- P3: 101초 (불필요하게 긴 대기)  
- P4: 102초 (불필요하게 긴 대기)

평균 대기시간: (0 + 100 + 101 + 102) / 4 = 75.75초

 

실생활 비유

마트에서 한 손님이 대량 구매를 하고 있을 때, 뒤에 있는 간단한 구매 고객들이 모두 오래 기다려야 하는 상황과 유사합니다.

해결책

  • SJF(Shortest Job First) 알고리즘 사용
  • Round Robin 스케줄링 적용
  • 우선순위 기반 스케줄링 도입

 

2. Starvation (기아 상태)

 

 

어떤 프로세스가 무기한으로 대기하며 CPU 소유권을 영원히 얻을 수 없는 현상

 

정의 및 특징

  • 프로세스가 아예 실행되지 않는 극단적 상황
  • 우선순위가 계속 밀려나는 현상
  • 주로 SJF 알고리즘이나 우선순위 스케줄링에서 발생

발생 메커니즘

프로세스 상황:
- P1: 실행시간 50초, 우선순위 낮음
- P2: 실행시간 1초, 우선순위 높음 (계속 도착)
- P3: 실행시간 2초, 우선순위 높음 (계속 도착)

SJF 스케줄링 결과:
시간: 0    1    3    4    6    7    9   ...
     [P2][P3][P2][P3][P2][P3][P2]...

결과: P1은 영원히 실행되지 않음 (Starvation 발생)

 

실생활 비유

응급실에서 중증 환자들이 계속 들어와 가벼운 증상의 환자가 무한정 대기하게 되는 상황과 비슷합니다.

해결책: Aging 기법

 

Aging : 실행되지 않은 프로세스의 우선순위를 시간이 지남에 따라 점진적으로 높여주는 기법

Aging 적용 예시:
초기 상태:
- P1: 우선순위 5 (낮음), 대기시간 0초
- P2: 우선순위 1 (높음), 대기시간 0초

10초 후:
- P1: 우선순위 3 (상승!), 대기시간 10초  
- P2: 우선순위 1, 대기시간 0초

20초 후:
- P1: 우선순위 1 (최고 우선순위 달성!), 대기시간 20초

 

3. Busy Wait (바쁜 대기)

 

 

프로세스나 스레드가 특정 조건을 만족할 때까지 지속적으로 확인하는 동기화 기술

 

정의 및 특징

  • 상호배제(Mutual Exclusion) 달성에 사용
  • 공유자원에 대한 동시 접근 방지
  • 지속적인 조건 확인으로 CPU 자원 소모

동작 방식

// Busy Wait 예시 (스핀락)
while (lock == 1) {
    // 아무것도 하지 않고 계속 확인
    // CPU를 계속 사용하면서 대기
}
lock = 1;  // 락 획득
// 임계 구역 실행
lock = 0;  // 락 해제
 

 1. 우선순위 역전 문제

상황:
- 고우선순위 프로세스 A: 락을 기다림 (Busy Wait)
- 저우선순위 프로세스 B: 락을 보유

문제: A가 계속 CPU를 점유하여 B가 실행되지 못함
결과: 락이 영원히 해제되지 않음
 
 

 2. CPU 자원 낭비

시나리오: 락 대기시간이 긴 경우

일반적인 대기:
시간: 0    10   20   30   40   50
     [대기]              [실행]
CPU 사용률: 0%           100%

Busy Wait:
시간: 0    10   20   30   40   50  
     [확인][확인][확인][확인][확인][실행]
CPU 사용률: 100% 100% 100% 100% 100% 100%
 
구분 장점 단점
Busy Wait • 즉시 응답 가능<br>
• 컨텍스트 스위칭 없음
• CPU 자원 낭비<br>
• 우선순위 역전 문제
Block & Wakeup • CPU 효율적 사용<br>
• 다른 프로세스 실행 가능
• 컨텍스트 스위칭 오버헤드<br>
• 응답 지연

적절한 사용 시기

  • 짧은 대기시간이 예상되는 경우
  • 멀티프로세서 환경에서 다른 CPU가 락을 빨리 해제할 경우
  • 실시간 시스템에서 즉각적인 응답이 필요한 경우

문제점 비교 요약

문제발생 조건 주요 영향 해결 방안
Convoy Effect FCFS + 긴 작업 먼저 평균 대기시간 증가 SJF, Round Robin
Starvation 우선순위 기반 스케줄링 특정 프로세스 무한 대기 Aging 기법
Busy Wait 동기화 대기 상황 CPU 자원 낭비 Block & Wakeup

 

심각도 수준

Starvation > Convoy Effect > Busy Wait
   (완전 차단)   (성능 저하)    (자원 낭비)
 

 대응 전략

 

 1. 스케줄링 정책 개선

  • 다단계 큐 스케줄링 적용
  • 동적 우선순위 조정 구현
  • 시간 할당량 최적화

 2. 동기화 메커니즘 선택

  • 짧은 대기: Spin Lock (Busy Wait)
  • 긴 대기: Mutex, Semaphore (Block & Wakeup)
  • 하이브리드: Adaptive Spin Lock

 3. 모니터링 및 튜닝

  • 대기시간 분석
  • CPU 사용률 모니터링
  • 프로세스 우선순위 재조정

'ZeroBase > CS' 카테고리의 다른 글

CHAR vs VARCHAR - 문자열 타입  (0) 2025.09.11
데이터베이스 기초 - 엔터티, 릴레이션, 속성  (0) 2025.09.11
메모리 할당 - 연속할당과 불연속할당  (0) 2025.09.08
캐시매핑  (0) 2025.09.08
캐시히트와 캐시미스  (0) 2025.09.04