優先級反轉及解決辦法

(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 優先級天花板

優先級天花板是指將申請某資源的任務的優先級提升到可能訪問該資源的所有任務中最高優先級任務的優先級.(這個優先級稱爲該資源的優先級天花板)

2.3 兩者的區別

優先級繼承:只有一個任務訪問資源時一切照舊,沒有區別,只有當高優先級任務因爲資源被低優先級佔有而被阻塞時,纔會提高佔有資源任務的優先級;而優先級天花板,不論是否發生阻塞,都提升,即誰先拿到資源,就將這個任務提升到該資源的天花板優先級。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章