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 < HL先取得 semaphoreSH需要S,所以等待LreleaseM變成 runnable,preemptLL無法 releaseS,H被間接卡住
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。