우선 순위 역전

JUJU·2024년 3월 28일
0

운영체제에서 Busy Waiting을 공부하는 중에, 우선 순위 역전 문제가 발생한다는 것을 학습하게 되었다.
우선 순위 역전이란 무엇일까?

✏️ 우선 순위 역전

다음과 같이 프로그램 3개가 존재한다고 하자.

T1: 1순위
T2: 2순위
T3: 3순위


T1T2T3
blockblockrunning

T3 실행
Lock 변수 s를 세팅하고 사용을 함

T1T2T3
readyblockrunning

T1의 상태가 Ready로 변경

T1이 우선순위가 높으므로 T1 먼저 실행해야 함


T1T2T3
runningblockready

T1 실행
Lock 변수를 세팅하고 들어가려는데 T3가 이미 사용중


T1은 T3가 Lock 변수 사용을 끝낼 때 까지 대기해야 한다.
T1T2T3
readyblockrunning

T3 실행

T1T2T3
readyreadyrunning

T2의 상태가 Ready로 변경

T2가 우선순위가 높으므로 T2 먼저 실행해야 함

T1T2T3
readyrunningready

T2 실행

T1T2T3
readyblockready

T2 실행 끝

T1T2T3
readyblockrunning

T3 재실행

T1T2T3
readyblockblock

T3 실행 끝

T1T2T3
runningblockblock

T1 재실행

T1 실행 끝

결과적으로 T1이 T2에 밀렸음


해결방법 - 우선순위 상속

T1은 T3가 Lock 변수 사용을 끝낼 때 까지 대기해야 한다.

이 때, 그냥 T3가 재실행 하는 것이 아니라, T1의 우선순위를 T3에게 준다.
그러면 T2가 Ready 상태가 되어도, T3는 T2 보다 우선순위가 높으므로 T3 먼저 실행한다.

T3는 종료 후 우선순위를 T1에게 반납한다.

profile
개발자 지망생

0개의 댓글

관련 채용 정보