우선순위 상속 설명
우선순위 상속은 공유 자원을 쥔 낮은 우선순위 태스크를 일시 승격시키는 동기화 기법이다. 대기 중인 최고 우선순위로 올려, 중간 우선순위 작업이 끼어드는 것을 막는다. 목적은 무한 우선순위 역전을 막는 것이다. 역전 자체를 없애지는 못한다. 우선순위 선점형 스케줄링은…
주요 장면
대본
우선순위 상속의 정의
우선순위 상속은 공유 자원을 쥔 낮은 우선순위 태스크를 일시 승격시키는 동기화 기법이다.
대기 중인 최고 우선순위로 올려, 중간 우선순위 작업이 끼어드는 것을 막는다.
목적은 무한 우선순위 역전을 막는 것이다. 역전 자체를 없애지는 못한다.
우선순위 역전 문제
우선순위 선점형 스케줄링은 높은 우선순위 작업이 항상 먼저 실행된다는 전제가 있다.
그런데 L이 자원 R을 잡은 채 H가 기다리면, 중간 작업 M이 L을 선점할 수 있다.
그러면 H는 M의 실행 시간만큼 더 기다리게 된다.
이를 우선순위 역전이라 부른다.
기본 우선순위와 유효 우선순위
상속의 핵심은 기본 우선순위와 유효 우선순위를 분리하는 것이다.
보유 태스크의 유효 우선순위는 대기 태스크 중 최고 우선순위로 올라간다.
단 기본 우선순위보다 높을 때만 올리며, 대기 큐가 비면 두 값은 같아진다.
기본 우선순위는 원본으로 남아 락 해제 후 복원에 쓰인다.
중첩 잠금과 PI 체인
중첩 잠금에서는 우선순위 승격이 한 단계에서 끝나지 않는다.
A가 R1을 기다리고, R1을 쥔 B가 다시 R2를 기다리면 승격은 B를 거쳐 C까지 이어진다.
이 연쇄를 PI 체인이라 부르며, 답안에는 중첩 잠금에서도 전파가 일어난다고 쓴다.
상한 프로토콜과의 비교
상한 프로토콜은 자원마다 상한값을 두고, 잠금 시 그 값까지 우선순위를 올린다.
상속은 대기 태스크가 실제로 생긴 뒤에 올리고, 상한은 락을 잡는 순간 올린다.
그래서 상한 프로토콜은 교착 상태를 막고 블로킹 시간을 설계 단계에서 계산하게 한다.
반면 상속은 대기 상황이 생길 때만 올리므로 불필요한 차단이 적다.
흔한 실수와 적용 사례
채점 포인트는 정의, 복원, 상한 프로토콜과의 차이를 쓰는지 여부다.
흔한 실수는 역전 제거와 혼동하기, 복원 빠뜨리기, 상속과 상한을 같은 기법으로 보기다.
상속을 지원하는 것은 뮤텍스이며, 세마포어는 소유 개념이 없어 상속을 적용할 수 없다.
적용 사례로 VxWorks, 리눅스, FreeRTOS, 애저 RTOS 등이 있다.
정리와 직접 풀기
정리하면 우선순위 상속은 대기 태스크가 생길 때만 보유자의 우선순위를 올린다.
목적은 무한 우선순위 역전을 막는 것이며, 자원 해제 시 원래 우선순위로 복원한다.
직접 풀어 보자.
정답은 대기 태스크가 생기고 기본 우선순위보다 높을 때다.