優先權倒置
優先權倒置,又稱優先權反轉、優先權逆轉、優先權翻轉,是一種不希望發生的任務調度狀態。在該種狀態下,一個高優先級任務間接被一個低優先級任務所搶先(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(頁面存檔備份,存於網際網路檔案館)