操作系统:优先级反转
(1)什么是優先級反轉
簡單從字面上來說,就是低優先級的任務先于高優先級的任務執行了,優先級搞反了。那在什么情況下會生這種情況呢?
假設三個任務準備執行,A,B,C,優先級依次是A>B>C;
首先:C處于運行狀態,獲得CPU正在執行,同時占有了某種資源;
其次:A進入就緒狀態,因為優先級比C高,所以獲得CPU,A轉為運行狀態;C進入就緒狀態;
第三:執行過程中需要使用資源,而這個資源又被等待中的C占有的,于是A進入阻塞狀態,C回到運行狀態;
第四:此時B進入就緒狀態,因為優先級比C高,B獲得CPU,進入運行狀態;C又回到就緒狀態;
第五:如果這時又出現B2,B3等任務,他們的優先級比C高,但比A低,那么就會出現高優先級任務的A不能執行,反而低優先級的B,B2,B3等任務可以執行的奇怪現象,而這就是優先反轉。
說白了就是,低優先級的任務占有高優先級的任務所需要的資源!某一時刻高、低優先級任務都在就緒,中間優先級由于沒有資源關聯,因此可以運行,這就出現了高優先級任務等待低優先級任務,也即是低優先級任務由于高優先級任務的執行!
(2)如何解決優先級反轉
高優先級任務A不能執行的原因是C霸占了資源,而C如果不能獲得CPU,不釋放資源,那A也只好一直等在那,所以解決優先級反轉的原則肯定就是讓C盡快執行,盡早把資源釋放了。基于這個原則產生了兩個方法:
2.1 優先級繼承
當發現高優先級的任務因為低優先級任務占用資源而阻塞時,就將低優先級任務的優先級提升到等待它所占有的資源的最高優先級任務的優先級。
2.2 優先級天花板
優先級天花板是指將申請某資源的任務的優先級提升到可能訪問該資源的所有任務中最高優先級任務的優先級.(這個優先級稱為該資源的優先級天花板)? ?其實這里也就是,將C的優先級提升到A的優先級
2.3 兩者的區別
優先級繼承:只有一個任務訪問資源時一切照舊,沒有區別,只有當高優先級任務因為資源被低優先級占有而被阻塞時,才會提高占有資源任務的優先級;而優先級天花板,不論是否發生阻塞,都提升,即誰先拿到資源,就將這個任務提升到該資源的天花板優先級。
?
總結
以上是生活随笔為你收集整理的操作系统:优先级反转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多线程:Executor、Sleep、D
- 下一篇: 多线程:中断(interrupt、int