우선순위 역전

From CS Wiki
Priority Inversion
주로 RTOS 프로세스 스케줄링에서, 공유자원 동기화 시 높은 우선순위 프로세스가 낮은 우선순위 프로세스로 인하여 수행이 지연되는 현상

예시[edit | edit source]

우선순위 역전.png

  • Task1은 Task3보다 우선순위가 높지만 먼저 실행된 Task3가 공유자원을 소유하고 있으므로 기다림
  • Task3보다 우선순위가 높고 Task1보단 낮은 Task2가 들어와 Task3보다 우선적으로 실행
  • Task3는 Task2의 작업이 끝난 후 다시 실행
  • Task3가 끝나서 공유 자원을 내 놓으면 Task1 실행
  • 결국 Task1은 우선순위가 가장 높음에도 가장 늦게 실행됨

해결법[edit | edit source]

우선순위 상속[edit | edit source]

  • 우선순위가 높은 프로세스의 공유자원을 가진 경우, 우선순위를 상속하여 높임
  • 우선순위가 더 높은 프로세스가 들어오지 않는 이상 우선적으로 작업을 끝내고 공유자원을 되돌려 줌
    • 위 예시에서 Task3는 Task1의 우선순위를 상속받아 Task2의 방해를 받지 않음
  • 다만, 여러개의 공유자원이 복잡하게 얽힌 경우 교착 상태 발생

우선순위 상한[edit | edit source]

우선순위 상속의 교착 상태 문제 해결
  • 프로세스가 공유자원을 소유하고 있는 동안 지정된 상한선으로 임시 상승
  • 상한선은 현재 대기중인 프로세스의 우선순위 최대값 보다 한 단계 낮게 설정
  • 대기 중인 모든 프로세스의 공유 자원과 우선순위를 예측할 수 있어야 함