優先級翻轉

優先級翻轉

  所謂優先級翻轉問題(priority inversion)即當一個高優先級任務通過信號量機制訪問共享資源時,該信號量已被一低優先級任務佔有,而這個低優先級任務在訪問共享資源時可能又被其它一些中等優先級任務搶先,因此造成高優先級任務被許多具有較低優先級任務阻塞,實時性難以得到保證。   
   例如:有優先級爲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 的原優先級。這種方法只在佔有資源的低優先級任務阻塞了高優先級任務時才動態的改變任務的優先級,如果過程較複雜, 則需要進行判斷。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章