운영체제에서 Busy Waiting을 공부하는 중에, 우선 순위 역전 문제가 발생한다는 것을 학습하게 되었다.
우선 순위 역전이란 무엇일까?
다음과 같이 프로그램 3개가 존재한다고 하자.
T1: 1순위
T2: 2순위
T3: 3순위
T1 T2 T3 block block running T3 실행
Lock 변수 s를 세팅하고 사용을 함
T1 T2 T3 ready block running T1의 상태가 Ready로 변경
T1이 우선순위가 높으므로 T1 먼저 실행해야 함
T1 T2 T3 running block ready T1 실행
Lock 변수를 세팅하고 들어가려는데 T3가 이미 사용중
T1 T2 T3 ready block running T3 실행
T1 T2 T3 ready ready running T2의 상태가 Ready로 변경
T2가 우선순위가 높으므로 T2 먼저 실행해야 함
T1 T2 T3 ready running ready T2 실행
T1 T2 T3 ready block ready T2 실행 끝
T1 T2 T3 ready block running T3 재실행
T1 T2 T3 ready block block T3 실행 끝
T1 T2 T3 running block block T1 재실행
T1 실행 끝
결과적으로 T1이 T2에 밀렸음
T1은 T3가 Lock 변수 사용을 끝낼 때 까지 대기해야 한다.
이 때, 그냥 T3가 재실행 하는 것이 아니라, T1의 우선순위를 T3에게 준다.
그러면 T2가 Ready 상태가 되어도, T3는 T2 보다 우선순위가 높으므로 T3 먼저 실행한다.
T3는 종료 후 우선순위를 T1에게 반납한다.