優先權翻轉

優先權翻轉是當一個高優先權任務通過信號量機制訪問共享資源時,該信號量已被一低優先權任務占有,因此造成高優先權任務被許多具有較低優先權任務阻塞,實時性難以得到保證。

例如:有優先權為A、B和C三個任務,優先權A>B>C,任務A,B處於掛起狀態,等待某一事件發生,任務C正在運行,此時任務C開始使用某一共享資源S。在使用中,任務A等待事件到來,任務A轉為就緒態,因為它比任務C優先權高,所以立即執行。當任務A要使用共享資源S時,由於其正在被任務C使用,因此任務A被掛起,任務C開始運行。如果此時任務B等待事件到來,則任務B轉為就緒態。由於任務B優先權比任務C高,因此任務B開始運行,直到其運行完畢,任務C才開始運行。直到任務C釋放共享資源S後,任務A才得以執行。在這種情況下,優先權發生了翻轉,任務B先於任務A運行。
解決優先權翻轉問題有優先權天花板(priority ceiling)和優先權繼承(priority inheritance)兩種辦法。
優先權天花板是當任務申請某資源時, 把該任務的優先權提升到可訪問這個資源的所有任務中的最高優先權, 這個優先權稱為該資源的優先權天花板。這種方法簡單易行, 不必進行複雜的判斷, 不管任務是否阻塞了高優先權任務的運行, 只要任務訪問共享資源都會提升任務的優先權。
優先權繼承是當任務A 申請共享資源S 時, 如果S正在被任務C 使用,通過比較任務C 與自身的優先權,如發現任務C 的優先權小於自身的優先權, 則將任務C的優先權提升到自身的優先權, 任務C 釋放資源S 後,再恢復任務C 的原優先權。這種方法只在占有資源的低優先權任務阻塞了高優先權任務時才動態的改變任務的優先權,如果過程較複雜, 則需要進行判斷。

相關詞條

熱門詞條

聯絡我們