우선순위 역전
From IT Wiki
- Priority Inversion
- 주로 RTOS 프로세스 스케줄링에서, 공유자원 동기화 시 높은 우선순위 프로세스가 낮은 우선순위 프로세스로 인하여 수행이 지연되는 현상
예시
- Task1은 Task3보다 우선순위가 높지만 먼저 실행된 Task3가 공유자원을 소유하고 있으므로 기다림
- Task3보다 우선순위가 높고 Task1보단 낮은 Task2가 들어와 Task3보다 우선적으로 실행
- Task3는 Task2의 작업이 끝난 후 다시 실행
- Task3가 끝나서 공유 자원을 내 놓으면 Task1 실행
- 결국 Task1은 우선순위가 가장 높음에도 가장 늦게 실행됨
해결법
우선순위 상속
- 우선순위가 높은 프로세스의 공유자원을 가진 경우, 우선순위를 상속하여 높임
- 우선순위가 더 높은 프로세스가 들어오지 않는 이상 우선적으로 작업을 끝내고 공유자원을 되돌려 줌
- 위 예시에서 Task3는 Task1의 우선순위를 상속받아 Task2의 방해를 받지 않음
- 다만, 여러개의 공유자원이 복잡하게 얽힌 경우 교착 상태 발생
우선순위 상한
- 우선순위 상속의 데드락 문제 해결
- 프로세스가 공유자원을 소유하고 있는 동안 지정된 상한선으로 임시 상승
- 상한선은 현재 대기중인 프로세스의 우선순위 최대값 보다 한 단계 낮게 설정
- 대기 중인 모든 프로세스의 공유 자원과 우선순위를 예측할 수 있어야 함