2008-09-20 105 views
0

我們有3個任務運行在不同的優先級上:A(120),B(110),C(100)。 A採用帶有反轉安全標誌的互斥信號量。 任務B執行一次semTake,導致任務A的優先級提高到110. 稍後,任務C執行一次semTake。任務A的優先級爲100.VxWorks如何處理優先級繼承?

此時,A釋放信號量,C抓取它。 我們注意到A的優先級沒有降低到原來的優先級120. 不應該立即恢復A的優先級?

回答

4

理想情況下,當繼承優先級爲 降低時,將以逐步方式完成。因爲導致優先級被提升的每個 相關性被刪除,所以繼承的優先級應該下降到最高剩餘相關性的優先級 。
例如:

任務A(100碰着高達80)具有兩個互斥(X & Y) 該任務B(PRI 90)和任務C(PRI 80)分別未決 對。當任務A放棄對任務C的互斥Y時,我們可能會認爲其優先級將降至90.當它最終放棄互斥X到任務B時,我們希望其優先級降至100.

在VxWorks中,優先級繼承不適用。
工作原理取決於您使用的VxWorks版本。

前的VxWorks 6.0

的優先級仍然「顛簸」,直到有互斥信號量 鎖的任務放棄其最後反演安全互斥 信號。

使用從上述中,當任務A放棄互斥ý 到任務C的例子中,它的優先級保持在80之後,它放棄互斥X到 任務B,那麼它的優先級將回落到100(90跳過)。

讓我們將曲線球#1投入混合。如果任務A在互斥量爲 Z時鎖定了這一切,但是沒有人正在等待Z?在那 的情況下,優先級將保持在80,直到Z被放棄 - 然後 它將回落到100.

爲什麼這樣呢?
這很簡單,並且對於大多數情況下,它足夠好 。但是,這意味着當「曲線球#1」進入 比賽時,比起 需要更長的時間優先級保持更高。

的VxWorks 6.0 +

的優先級現在 持續升高,直到有互斥 信號鎖的任務放棄了最後的反演安全互斥,要 貢獻提高優先級

這種改進避免了「曲線球#1」的問題 。它確實有其自身的侷限性。例如,如果在等待任務A放棄 信號量時任務B和/或任務C時間結束,則不會重新計算任務A的優先級 ,直到它放棄信號爲止。