다섯 살도 알 수 있게 · 시스템SW

우선순위 역전/상속이 뭐예요?

급한 일이 사소한 일 때문에 하염없이 기다리는 문제와, 사소한 일의 순위를 잠깐 올려 푸는 임시 처방 이야기예요.

리프트(한 번에 한 대만)급한데... 리프트가 비어야 해요H: 급한 손님 차L: 여유 있는 정기점검

급한 손님 차(H)가 리프트를 기다려요.지금은 여유 있는 정기점검(L)이 리프트를 쓰고 있어요.

저부터 잠깐만요!M(중간 우선순위)이 자꾸 끼어들어 L이 리프트를 못 비워요그 사이 H(급한 일)는 하염없이 기다려요 — 우선순위 역전

중간 우선순위 일(M)이 자꾸 끼어들어, L이 리프트를 못 비워요.그 사이 급한 일(H)은 하염없이 기다려요 — 이게 우선순위 역전이에요.

리프트 쓰는 동안은 L을 H만큼 급하게 쳐줄게요우선순위 상속 = 리프트 쓰는 동안만 L의 순위를 H만큼 임시로 올리기그러면 M이 못 끼어들고, L이 금방 끝내 리프트를 비워줘요

우선순위 상속 = 리프트 쓰는 동안만 L의 순위를 H만큼 임시로 올리는 거예요.그러면 M이 못 끼어들고, L이 금방 끝내 리프트를 비워줘요.

공유 자원 확인모두가 기다리는 리프트
역전 알아채기급한 일이 중간 일 때문에 막힘
우선순위 임시로 올리기L을 H 수준으로 올려줘요
끝나면 되돌리기리프트를 비우면 원래 순위로
역전 발생LMLHL(여유)이 M에게 계속 밀려요H가 한참을 기다려요상속 적용LHL이 금방 끝나고, H가 바로 시작해요

시간선으로 보면 상속 전후 H가 기다리는 시간의 차이가 분명해요.상속을 적용하면 L이 금방 끝나고, H가 바로 시작해요.

상속 덕분에 H가 끝나는 시간을 예측할 수 있어요리프트가 여러 대면 어느 리프트를 먼저 잠글지 순서가 꼬여요상속은 리프트 한 대짜리 역전엔 잘 듣지만, 만능 해결책은 아니에요

우선순위 상속도 만능은 아니에요.공유 자원이 여러 개거나 겹치면, 더 정교한 방식(우선순위 천장)이 필요해요.

한 줄로

우선순위 역전은 급한 일(H)이 사소한 일(L)이 쥔 자원을 기다리다, 중간 일(M)에 밀려 하염없이 지연되는 문제이고, 우선순위 상속은 L이 자원을 쥔 동안만 L의 순위를 H만큼 올려 이를 막는 처방이에요.

실시간 시스템에서 높은 우선순위 작업이 낮은 우선순위 작업이 점유한 공유 자원(뮤텍스 등)을 기다릴 때, 중간 우선순위 작업이 끼어들면 대기 시간이 예측 불가능하게 늘어나는 현상이 우선순위 역전이에요. 우선순위 상속 프로토콜은 자원을 쥔 낮은 우선순위 작업의 우선순위를 일시적으로 높여 중간 작업의 선점을 막아요. 자원이 여럿이거나 중첩되면 우선순위 천장 프로토콜 같은 더 정교한 기법이 쓰여요.

어른들은 이렇게 불러요

우선순위 역전
Priority Inversion
급한 일이 중간 일 때문에 하염없이 기다리는 것. 실시간 시스템의 대표적 함정이에요.
우선순위 상속
Priority Inheritance
자원을 쥔 동안만 낮은 순위를 임시로 올리기. 우선순위 역전을 막는 처방이에요.
공유 자원/임계구역
Shared Resource / Critical Section
한 번에 한 대만 쓰는 리프트. 역전이 일어나는 바로 그 지점이에요.
뮤텍스/락
Mutex / Lock
리프트를 쓰는 동안 거는 잠금. 공유 자원을 지키는 실제 도구예요.
우선순위 천장 프로토콜
Priority Ceiling Protocol
자원이 여럿일 때 쓰는 더 정교한 방식. 우선순위 상속의 확장판이에요.
실시간 시스템
Real-time System
마감 시간이 결과만큼 중요한 시스템. 우선순위 역전이 특히 치명적인 곳이에요.
데드락과 차이
Difference from Deadlock
데드락은 서로 영원히 묶이는 것. 교착상태는 이 분야의 다른 이야기예요. → 서로의 열쇠를 기다리며 멈춘 정비공장
스케줄링
Scheduling
누가 먼저 리프트를 쓸지 정하는 규칙. 우선순위 역전은 스케줄링의 부작용이에요. → 리프트에 누가 먼저 올라갈까
다음 이야기
정비소의 보이지 않는 운영자 →
다른 용어도 그림책으로 보고 싶다면 요청하기 →