Computer Science/[ OS ]

[ OS ] 09. 프로세스 동기화 - 우선순위 역전(Priority Inversion)과 상속(Inheritance)

kim.svadoz 2021. 5. 30. 10:17
반응형

Priority Inversion & Priority Inheritance

우선순위 역전우선순위 상속

이제 한번 progress(No Deadlock)하고, bounded-waiting(No Prioity Inversion)의 문제까지 해결해보자.

  • 데드락 : 두 개 이상의 프로세스가 영원히 기다려야 한다.
  • 우선순위 역전 : 높은 우선순위의 프로세스가 낮은 우선순위 프로세스에게 밀리는 현상
## 예시
예를 들어 집에서 우선순위가 가장 높은 아빠가 TV를 보기 위해 막내에게 나가라고 한다. 근데 막내가 리모컨을 들고 나가면, 자발적으로 리모컨을 내려 놓을 때까지 티비를 보지 못한다.
  • priority가 높음에도 불구하고 waiting queue에서 계속해서 기다리게 된다.
  • 이를 priority-Inheritance 프로토콜를 이용해서 해결할 수 있다.
    • 우선순위 (높음) A > B > C (낮음)
    • Priority Inversion의 상황과 다르게 A 쓰레드가 lock을 얻가 실패하는 경우 현재 해당 리소스 lock을 얻어 동작하는 스레드 C의 우선순위를 A 스레드와 같이 높은 우선순위로 상속시키면서, 그 보다 낮은 우선순위의 B 스레드에게 선점되지 않게 막는다.
    • 그렇게 제일 낮은 우선순위를 잠시동안 가장 높이고, 그다음에 자원을 반납하고 나면 다시 원래대로 우선순위를 되돌리는 프로세스이다.
    • 결국 A스레드는 보다 빠르게 공유된 S자원의 할당을 받아 처리할 수 있다.
    • 리눅스 커널은 RT Task들 사이에서 사용되며, RT Mutex API를 통해 구현되었다.
반응형