Post

우선 순위 역전

Busy Waiting의 단점인 우선 순위 역전 문제란 무엇일까

우선 순위 역전

운영체제에서 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은 T3가 Lock 변수 사용을 끝낼 때 까지 대기해야 한다.

| 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에게 반납한다.

This post is licensed under CC BY 4.0 by the author.