| ① 任務(wù)task1要獲取task3占有的信號量,tast3繼承task1的優(yōu)先權(quán); |
圖2 采用優(yōu)先級繼承消除優(yōu)先級反轉(zhuǎn)
在優(yōu)先權(quán)極限方案中,系統(tǒng)把每一個臨界資源與1個極限優(yōu)先權(quán)相聯(lián)系。這個極限優(yōu)先權(quán)等于系統(tǒng)此時最高優(yōu)先權(quán)加1。當(dāng)1個任務(wù)進(jìn)入臨界區(qū)時,系統(tǒng)便把這個極限優(yōu)先權(quán)傳遞給這個任務(wù),使得這個任務(wù)的優(yōu)先權(quán)最高;當(dāng)這個任務(wù)退出臨界區(qū)后,系統(tǒng)立即把它的優(yōu)先權(quán)恢復(fù)正常,從而保證系統(tǒng)不會出現(xiàn)優(yōu)先權(quán)反轉(zhuǎn)的情況。如上例中,當(dāng)task3進(jìn)入臨界區(qū)時,立即把它的優(yōu)先權(quán)升高到極限優(yōu)先權(quán),保證task3此時能盡快退出臨界區(qū),進(jìn)而釋放其占有的信號量。當(dāng)高優(yōu)先級任務(wù)task1執(zhí)行的時候就不會出現(xiàn)其等待低優(yōu)先級任務(wù)task3釋放信號量而被阻塞的情況,從而保證不會出現(xiàn)上面所說的優(yōu)先級反轉(zhuǎn)。采用這種方案的另一個有利之處,是僅僅通過改變某個臨界資源的優(yōu)先級就可以使多個任務(wù)共享這個臨界資源,如下所示。
void TaskA(void){
...
SetTaskPriority(RES_X_PRIO);
// 訪問共享資源 X.
SetTaskPriority(TASK_A_PRIO);
...
}
以上就RTOS中優(yōu)先級反轉(zhuǎn)問題出現(xiàn)的原因以及解決方法進(jìn)行了詳細(xì)的說明。21世紀(jì)將是嵌入式系統(tǒng)的時代。從事嵌入式系統(tǒng)設(shè)計的人員深入了解RTOS的原理和內(nèi)部潛在的問題,如優(yōu)先級反轉(zhuǎn)等,將有助于開發(fā)出更加可靠的產(chǎn)品。





