[week 09] Pintos - priority

Woody Jo·2025년 7월 15일

kjungle

목록 보기
14/31
post-thumbnail

Pintos 1주차

priority inversion과 priority donation

문제 상황:

낮은 우선순위 스레드 A가 락 23을 가지고 있고, 높은 우선순위 32가 A를 기다릴 때:

  • 32는 23보다 우선순위가 높지만, 23가 락을 놓을 때까지 기다려야 하므로 → 우선순위 역전 (Priority Inversion) 문제가 발생
  • 해결: 32의 우선순위를 23에게 기부 (donate)해서 23가 먼저 실행되고 락을 놓게 함

스레드 B 작업을 실행하는 29는 우선순위가 32보다 낮음에도 불구하고,
실행할 수 있다.

이를 우선순위 역전(Priority Inversion) 문제라고 한다.

이를 해결 하기 위해 스레드 A 중 우선순위가 높은 32를 23에게 donate한다.

32를 donation 받은 23은 작업이 완료되면 waiting_list에 있던 32를 release 하고, ready_list로 옮긴다.


그럼 29, 32와 우선순위 중 더 높은 32가 정상 실행된다.

nested donation

T1, T2, T3 기존의 priority 값을 가진 thread들이 있고,
T4가 새로 추가되었고, 그 priority가 가장 큰 값을 가질 때

T4 -> T3 -> T2 -> T1
이렇게 순차적으로 전파하는 것을 nested donation(중첩 donation) 라고 한다.

말로는 그런데...이제 코드로 구현한다는 것이 참...

multiple donation

그림 처럼 A, B, C 모든 락이 T1이 보유하고 있다.

그래서, 우선 순위가 더 낮은 T1 스레드가 우선 순위가 더 높은 여러 스레드로부터 donation 받는 것을 말한다.

multiple donation의 문제점

  • 교착 상태(deadlock)
  • 성능 저하
  • 복잡성 증가

등이 발생할 수 있다고 한다.

전체적으로 간단하게 그림을 그려보고 흐름을 기억하기 위해 남긴다.

profile
developer

0개의 댓글