優先順序反轉

2021-09-17 01:52:04 字數 900 閱讀 9298

實時作業系統中,在訊號量使用過程中,則可能出現優先順序反轉的不合理情況。

1.優先順序翻轉出現場景

高優先順序的任務被低優先順序的任務阻塞,導致高優先順序任務得不到排程和執行。但是其他中等優先順序的任務卻能搶占到cpu資源。從現象看好像是中優先順序任務比高優先順序任務具有更高的優先權。

當系統高優先順序任務正在等待訊號量(此訊號量被乙個低優先順序任務持有)時,乙個介於高和低之間的中等優先順序任務進入可執行態,將搶占cpu資源,先執行了中等優先順序任務,此時高優先順序任務由於無法持有訊號量而無法執行,而持有該訊號量的任務由於優先順序很低導致無法繼續執行釋放訊號量讓高優先順序任務執行,由此出現了優先順序反轉的問題。

例如當前系統有3個任務和乙個訊號量:

任務a、任務b和任務c,其優先順序為a>b>c,訊號量為d.

(1)當前系統執行c,且c正持有訊號量d。

(2)當a進入就緒態時,由於優先順序高,則獲得cpu資源,a開始執行,c進入就緒。

(3)a執行中,需要訊號量d,此時由於d被c持有,於是a進入阻塞態,c回到執行態。

(4)當b進入就緒態時,由於優先順序比c高,因此c被搶占,b獲得cpu資源,進入執行態,c又回到就緒態。

此時a作為最高優先順序任務,不能執行,cpu被優先順序更低的b占有,如果此時還存在更多介於a與c之間的優先順序任務,則a將遲遲得不到執行,此為優先順序反轉。

解決方法:

(1)優先順序繼承

當高優先順序任務因低優先順序任務占用資源被阻塞時,將低優先順序任務的優先順序提公升到等待它所持有資源的最高優先順序任務的優先順序。

(2)優先順序天花板

將申請到某資源的任務的優先順序提公升到可能訪問該資源的所有任務中最高優先順序任務的優先順序,這個優先順序稱為該資源的優先順序。

二者的區別是,優先順序繼承只有發生阻塞時才會提高,而優先順序天花板不管是否發生阻塞,則都直接提公升。

優先順序反轉

1.優先順序反轉 priority inversion 由於多程序共享資源,具有最高優先權的程序被低優先順序程序阻塞,反而使具有中優先順序的程序先於高優先順序的程序執行,導致系統的崩潰。這就是所謂的優先順序反轉 priority inversion 2.產生原因 其實,優先順序反轉是在高優級 假設為...

優先順序反轉

優先順序反轉 priority inversion 指某同步資源被較低優先順序的程序 執行緒所擁有,較高優先順序的程序 執行緒競爭該同步資源時未獲得該資源,而使得較高優先順序程序 執行緒反而推遲被排程執行的現象。對基於優先順序排程的實時系統,優先順序高的程序 執行緒被優先排程是排程演算法首要考慮的因...

優先順序反轉 zz

定義 高優先級任務需要等待低優先級任務釋放資源,而低優先級任務又正在等待中等優先級任務的現象叫做優先級反轉。兩種經典的防止反轉的方法 優先級繼承策略 priority inheritance 繼承現有被阻塞任務的最高優先級作為其優先級,任務退出臨界區,恢復初始優先級。優先級天花板策略 priorit...