白話解釋「優先順序翻轉」。

2021-09-21 19:56:36 字數 893 閱讀 4014

優先順序翻**生的條件:

1、首先發生翻轉需要有三個任務,它們的優先順序分別是高、中、低。

2、低優先順序和高優先順序都需要take同乙個訊號量。

優先順序翻轉的過程:

1、低優先順序先take到訊號量。

2、低優先順序被中優先順序任務搶占。(然後低優先順序任務就只能等中優先順序任務執行完,再繼續執行之後,才能釋放訊號量了)

3、高優先順序需要take該訊號量了,但是由於中優先順序任務執行時間長,低優先順序任務又霸佔住訊號量不放,高優先順序無奈被阻塞了。(一般高優先順序任務都是要快速完成一些需要及時處理的事情,被阻塞可是大事)

這樣的現象就叫優先順序翻轉,因為高優先順序它無法搶占低的,不「高」了,當然就是翻轉了。

避免優先順序翻轉的辦法:

使用互斥訊號量,並且設定防優先順序翻轉引數(sem_inversion_safe )。

防止優先順序翻轉的原理:

改變在於上面的過程中的第1步,低優先順序take到該訊號量的時候,系統就搜尋該訊號量還可能被哪些任務使用,然後就把該低優先順序任務的優先順序調整到這些任務中最高的乙個那麼高。

這樣,起碼低優先順序執行到釋放訊號量,高優先順序也就立即能執行了,就不會出現中優先順序任務長時間執行使得高優先順序任務無休止等待的情況了。   

注意兩個前提條件:

1、訊號量持有時間盡可能短。(這是寫**過程中就要注意的,做到這一點,就可以保證高優先順序不用等低優先順序任務太久)

2、高優先順序任務執行非常快。(這也是任務設計的要求,高優先順序應該只處理那些緊急而且快速的事情。)

所以不會出現中優先順序搶占,但無法搶占而帶來問題。因為上述兩點決定了它們耽誤的時間非常短,不會對中優先順序造成影響。

優先順序翻轉

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...