優先權倒置
優先權倒置,又稱優先權反轉、優先權逆轉、優先權翻轉,是一種不希望發生的任務排程狀態。在該種狀態下,一個高優先權任務間接被一個低優先權任務所搶先(preempted),使得兩個任務的相對優先權被倒置。
這往往出現在一個高優先權任務等待訪問一個被低優先權任務正在使用的臨界資源,從而阻塞了高優先權任務;同時,該低優先權任務被一個次高優先權的任務所搶先,從而無法及時地釋放該臨界資源。這種情況下,該次高優先權任務獲得執行權。
在多數個案,發生優先權倒置並不導致直接傷害──高優先權任務的延遲執行不被察覺,最終,低優先權任務釋放共用資源。雖然,亦存在很多情況優先權倒置會導致嚴重問題
舉例
在作業系統中,一般情況下,
- 行程分優先權,高優先權行程需要執行時可打斷現正在執行的低優先權行程;
- 普通的臨界資源使用方法,如果一個臨界資源被取得了,則其它想要取得此資源的程式被阻塞,直到此資源被釋放;
- 有三個行程(其優先權從高到低分別為T1、T2、T3),有一個臨界資源CS(T1與T3會用到)。這時,T3先執行,取得了臨界資源CS。然後T2打斷T3。接着T1打斷T2,但由於CS已被T3取得,因此T1被阻塞,這樣T2獲得時間片。直到T2執行完畢後,T3接着執行,其釋放CS後,T1才能取得CS並執行。這時,我們看T1與T2,雖然T1優先權比T2高,但實際上T2優先於T1執行。這稱之為優先權逆轉。
參閱
"Introduction to Priority Inversion" by Michael Barr(頁面存檔備份,存於互聯網檔案館)