리소스 공유 프로토콜 (Resource Sharing Protocols)우선순위 역전(특히 unbounded priority inversion) 을 완화·제거하는 우선순위 조작 규칙. PIP / PCP / IPCP 세 가지가 표준적으로 다뤄지며, VDX는 IPCP를 채택한다 (OSEK 리소스 참고).

PIP (Priority Inheritance Protocol)

상위 우선순위 태스크가 블로킹될 때, 블록당한 태스크의 우선순위를 블록시킨 태스크에 상속시킨다.

동작

  • 이 락 를 쥔 상태에서 를 요청하고 블록되면, 은 일시적으로 의 우선순위로 승격.
  • 승격된 은 중간 우선순위 에게 선점되지 않는다 → unbounded blocking 제거.
  • Unlock(S) 하면 원래 우선순위로 복원.

한계

문제설명
Chained Blocking중첩 락을 사용하면 블로킹이 여러 락에 걸쳐 연쇄적으로 발생
DeadlockPIP 자체는 circular wait을 막지 못함

PCP (Priority Ceiling Protocol)

System ceiling보다 높은 우선순위를 가진 태스크만 락을 획득할 수 있도록 제약한다. 블록이 발생하면 PIP처럼 우선순위를 상속시킨다.

핵심 구성

  • 각 락의 ceiling: 그 락을 사용할 가능성이 있는 태스크 중 최고 우선순위. 누가 어떤 락을 쓰는지 사전 정적 분석으로 안다.
  • System ceiling: 현재 잠겨 있는 락들의 ceiling 중 최고값.
  • 획득 규칙: 태스크의 우선순위 > system ceiling 이어야 새 락 획득 가능.
  • 블록 시: PIP처럼 우선순위 상속.

성질

  • Unbounded priority inversion 제거
  • Deadlock 예방 — circular wait을 원천 차단
  • Chained blocking 제거 (최대 1회만 블록)

IPCP (Immediate Priority Ceiling Protocol)

락을 획득하는 순간 태스크의 우선순위를 락의 ceiling으로 즉시 끌어올린다.

PCP의 단순화 버전. 블록이 발생한 뒤에 상속하는 것이 아니라 선제적으로 우선순위를 올린다. 구현이 단순하고, 동일한 실시간 보장을 얻는다.

OSEK/VDX의 채택

OSEK OS 2.2.3 §8.5 “OSEK Priority Ceiling Protocol” 명세는 IPCP 동작을 정확히 기술한다.

  • 시스템 생성 시, 각 리소스에 ceiling priority가 정적 할당
  • ceiling priority는 그 리소스(및 연결 리소스)를 사용하는 모든 태스크의 최고 우선순위 이상
  • ceiling priority는 해당 리소스를 사용하지 않으면서 그 리소스를 사용하는 최고 우선순위 태스크보다 높은 태스크들의 최저 우선순위 미만
  • 태스크가 리소스를 요청할 때 현재 우선순위가 ceiling보다 낮으면, 즉시 ceiling으로 승격
  • 리소스를 해제하면 승격 이전 우선순위로 복원
  • 같은 리소스를 쓸 수 있는 다른 태스크들은 현재 실행 태스크보다 낮거나 같은 우선순위가 되므로 선점 불가
  • 해제 시점은 선점 가능한 태스크에 대한 재스케줄링 포인트

결과: OSEK는 태스크별 ceiling 계산 없이, 리소스의 정적 ceiling만으로 우선순위 역전과 데드락을 모두 방지한다.

세 프로토콜 비교

구분PIPPCPIPCP
승격 시점블록 발생 시블록 발생 시락 획득 즉시
Unbounded 차단OOO
데드락 예방XOO
Chained Blocking발생 가능제거 (≤1회)제거 (≤1회)
구현 복잡도낮음높음 (동적 ceiling)낮음 (정적 ceiling)
대표 채택연구/일부 RTOS이론적 최적OSEK/VDX, AUTOSAR

같이 보기