우선순위 상속

실시간 컴퓨팅에서 우선순위 상속(priority inheritance), 우선순위 계승은 무한 우선순위 역전을 제거하는 방법이다. 이 컴퓨터 프로그래밍 방법을 사용하면, 프로세스 스케줄링 알고리즘은 프로세스 A의 우선순위를 A가 리소스 락을 가지고 있는 자원을 기다리는 다른 프로세스의 최대 우선순위로 증가시킨다(A의 원래 우선순위보다 높을 경우).

우선순위 상속 프로토콜의 기본 개념은 한 작업이 하나 이상의 고우선순위 작업을 막을 때, 원래의 우선순위 할당을 무시하고 상승된 우선순위 수준에서 임계 구역을 실행한다는 것이다. 임계 구역을 실행하고 락을 해제한 후, 프로세스는 원래 우선순위 수준으로 돌아간다.

예시
다음 세 가지 작업을 고려한다:

 작업 이름 우선순위 H 높음 M 중간 L 낮음

H와 L 모두 일부 공유 자원이 필요하다고 가정한다. 만약 L이 이 공유 자원을 획득하고(임계 구역 진입), H가 나중에 이를 요구하면, H는 L이 자원을 해제할 때까지(임계 구역 탈출) 블록된다. 우선순위 상속이 없으면, 프로세스 M이 임계 구역 동안 프로세스 L을 선점하여 완료를 지연시킬 수 있으며, 이는 사실상 낮은 우선순위 프로세스 M이 간접적으로 높은 우선순위 프로세스 H를 선점하게 만든다. 이것은 우선순위 역전 버그이다.

우선순위 상속을 사용하면, H가 공유 자원에서 블록될 때마다 L은 H의 높은 우선순위로 임계 구역을 실행할 것이다. 결과적으로 M은 L을 선점할 수 없게 되고 블록될 것이다. 즉, 높은 우선순위 작업 M은 낮은 우선순위 작업 L의 임계 구역이 실행될 때까지 기다려야 하는데, 이는 L이 H의 우선순위를 상속받았기 때문이다. L이 임계 구역을 벗어나면, 원래의 (낮은) 우선순위를 되찾고 H를 깨운다(H는 L에 의해 블록되었었다). H는 높은 우선순위를 가지고 L을 선점하고 완료될 때까지 실행한다. 이를 통해 M과 L은 순서대로 재개하여 우선순위 역전 없이 완료될 수 있다.

우선순위 상속을 지원하는 운영 체제
 ERIKA 엔터프라이즈
 FreeRTOS
 마이크로소프트 애저 RTOS, 이전 익스프레스 로직의 ThreadX
 리눅스
 VxWorks
 iRMX

 같이 보기 
 우선순위 상한 프로토콜

 각주 


 외부 링크 
 "Priority Inheritance: The Real Story" by Doug Locke
 "Against Priority Inheritance" by Victor Yodaiken
 "Implementing Concurrency Control With Priority Inheritance in Real-Time CORBA" by Steven Wohlever, Victor Fay Wolfe and Russell Johnston
 "Priority Inheritance Spin Locks for Multiprocessor Real-Time Systems" by Cai-Dong Wang, Hiroaki Takada and Ken Sakamura
 "Hardware Support for Priority Inheritance" by Bilge E. S. Akgul, Vincent J. Mooney, Henrik Thane and Pramote Kuacharoen

분류:동시성 제어
분류:실시간 컴퓨팅