PE Notes · CA/OS
우선순위 역전
낮은 우선순위가 잠금을 쥔 채 높은 우선순위가 기다릴 때 중간 작업이 끼어드는 우선순위 역전을 가르고, 상속과 상한으로 푸는 길을 정리합니다.
우선순위 스케줄은 높은 일이 먼저 달려야 합니다. 공유 잠금이 끼면 그 약속이 뒤집힙니다. 은 낮은 작업이 를 가진 동안 높은 작업이 그 잠금을 기다리고, 중간 작업이 낮은 작업을 밀어내 높은 일이 끝없이 서는 현상입니다. 와 항공·차량 제어에서 기한이 깨지는 전형적인 구멍입니다.
세 작업이 어긋나는 순간
낮은 L이 임계구역에 들어가 잠금을 쥡니다. 높은 H가 같은 잠금을 요청하고 막힙니다. 중간 M은 그 잠금이 필요 없습니다. 스케줄러는 L보다 M을 올립니다. L이 잠금을 못 풀면 H는 M보다 아래에 서 있게 됩니다. 이름과 실제 실행 순서가 반대입니다.
| 단계 | 상태 |
|---|---|
| 1 | L이 잠금을 얻고 임계구역에 들어감 |
| 2 | H가 같은 잠금에서 차단 |
| 3 | M이 L을 선점하고 계속 달림 |
| 4 | H는 M이 끝나는 동안 대기 |
| 결과 | 실행 순서가 H < M 으로 보임 |
1997년 화성 착륙선의 제어기가 이 패턴으로 통신 기한을 놓치고 이 반복 리셋했습니다. 지상에서 상속 플래그를 켜 수습했습니다.
상속과 상한
은 H가 기다리기 시작하는 순간 L의 우선순위를 H까지 올립니다. M은 L을 밀지 못합니다. L이 잠금을 풀면 원래 값으로 돌아갑니다. 동적이라 표준에 가깝고, 구현은 조금 무겁습니다.
은 잠금에 미리 최고 사용자 우선순위를 붙입니다. L이 잠그는 즉시 그 상한으로 뜹니다. H가 나타나기 전에도 M이 끼지 못합니다. 순환 대기를 줄이는 부수 효과가 있고, 불필요하게 높이 뜨는 값이 대가입니다.
세마포어·뮤텍스 노트와 교착 조건, CPU 스케줄 노트가 같은 잠금 칸입니다. 답안은 L·M·H 시나리오와 상속·상한 두 줄을 한 장에 닫습니다.