優先順序翻轉問題

2022-07-29 20:09:17 字數 751 閱讀 5868

考慮一台計算機有兩個程序,h優先順序較高,l優先順序較低。

排程規則規定只要h處於就緒態它就可以執行。

在某一時刻,l處於臨界區中,此時h變到就緒態準備執行(例如,一條i/o操作結束)。現在h開

始忙等待,但由於當h就緒時l不會被排程,也就無法離開臨界區,所以h將永遠忙等待下去。

假定乙個程序中有三個執行緒thread1(高)、thread2(中)和thread3(低),考慮下圖的執**況。

當高優先順序任務正等待訊號量(此訊號量被乙個低優先順序任務擁有著)的時候,乙個介於兩個任務優先之間的中等優先順序任務開始執行——這就會導致乙個高優先順序任務在等待乙個低優先順序任務,而低優先順序任務卻無法執行類似死鎖的情形發生。

解決辦法就是提高占有資源任務的優先順序,讓它正常執行,然後釋放資源,以讓任務a能正常獲取資源而得以執行.

a. 優先順序繼承(priority inheritance)

優先順序繼承是指將低優先順序任務的優先順序提公升到等待它所占有的資源的最高優先順序任務的優先順序.當高優先順序任務由於等待資源而被阻塞時,此時資源的擁有者的優先順序將會自動被提公升.  

b. 優先順序天花板(priority ceilings)

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

a 和b的區別:

優先順序繼承,只有當占有資源的低優先順序的任務被阻塞時,才會提高占有資源任務的優先順序,而優先順序天花板,不論是否發生阻塞,都提公升.  

解決方法參考:

優先順序翻轉

ucos是乙個典型的按照優先順序排程的作業系統,優先順序高的任務先執行,優先順序低的任務後執行,然而在任務的排程過程中可能會出現優先順序翻轉的情況。在嵌入式系統的應用中,實時性是乙個重要的指標,而優先順序翻轉是影響系統實時性的重要問題。例如 有優先順序為a b和c三個任務,優先順序a b c,任務a...

優先順序翻轉

所謂優先順序翻轉問題 priority inversion 即當乙個高優先順序任務通過訊號量機制訪問共享資源時,該訊號量已被一低優先順序任務占有,而這個低優先順序任務在訪問共享資源時可能又被其它一些中等優先順序任務搶先,因此造成高優先順序任務被許多具有較低優先順序任務阻塞,實時性難以得到保證。例如 ...

FreeRTOS優先順序翻轉

舉例 高優先順序任務的任務函式 void high task void pvparameters 中等優先順序任務的任務函式 void middle task void pvparameters 低優先順序任務的任務函式 void low task void pvparameters xsemaph...