Priority Inversion

Introduction

Priority inversion 發生在 high-priority process 等 low-priority process 持有的 resource,但 low-priority process 又被 medium-priority process preempt。

結果是 medium-priority process 沒有直接拿 resource,卻間接讓 high-priority process 等更久。

How it happens?

假設 priority:

L < M < H
  1. L 先取得 semaphore S
  2. H 需要 S,所以等待 L release
  3. M 變成 runnable,preempt L
  4. L 無法 release SH 被間接卡住

Solution: Priority Inheritance

Priority inheritance 讓持有 resource 的 low-priority process 暫時繼承等待者的 high priority。

在上例中,L 暫時繼承 H 的 priority,使 M 不能 preempt 它;L release resource 後回到原 priority,H 繼續執行。

Priority inversion 對 real-time system 特別危險,因為 high-priority task 的 delay 可能造成 deadline miss。