優先順序反轉及解決方案

2021-09-30 15:42:13 字數 901 閱讀 9598

原文:

1. 優先順序反轉(priority inversion)

由於多程序共享資源,具有最高優先權的程序被低優先順序程序阻塞,反而使具有中優先順序的程序先於高優先順序的程序執行,導致系統的崩潰。這就是所謂的優先順序反轉(priority inversion)。

2. 產生原因

其實,優先順序反轉是在高優級(假設為a)的任務要訪問乙個被低優先順序任務(假設為c)占有的資源時,被阻塞.而此時又有優先順序高於占有資源的任務(c)而低於被阻塞的任務(a)的優先順序的任務(假設為b)時,於是,占有資源的任務就被掛起(占有的資源仍為它占有),因為占有資源的任務優先順序很低,所以,它可能一直被另外的任務掛起.而它占有的資源也就一直不能釋放,這樣,引起任務a一直沒辦法執行.而比它優先低的任務卻可以執行.

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

3. 解決方案 ( 優先順序繼承 / 優先順序天花板 )

目前解決優先順序反轉有許多種方法。其中普遍使用的有2種方法:一種被稱作優先順序繼承(priority inheritance);另一種被稱作優先順序極限(priority ceilings)。

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

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

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

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

a 和b的區別:

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

uC OS優先順序反轉及解決

1 uc os ii的執行機制 在嵌入式系統的應用中,實時性是乙個重要的指標,而優先順序翻轉是影響系統實時性的重要問題。本文著重分析優先順序翻轉問題的產生和影響,以及在uc os ii中的解決方案。uc os ii採用基於固定優先順序的佔先式排程方式,是乙個實時 多工的作業系統。系統中的每個任務具有...

優先順序反轉及解決辦法

上次去華為面試,被問及優先順序反轉及解決辦法,雖然以前有所了解,但好長時間沒用了,回答時竟然具體卡殼,真是汗顏。所以今天有必要再次理順一下優先順序反轉的相關知識。1 什麼是優先順序反轉 簡單從字面上來說,就是低優先順序的任務先於高優先順序的任務執行了,優先順序搞反了。那在什麼情況下會生這種情況呢?假...

優先順序反轉及解決辦法

上次去華為面試,被問及優先順序反轉及解決辦法,雖然以前有所了解,但好長時間沒用了,回答時竟然具體卡殼,真是汗顏。所以今天有必要再次理順一下優先順序反轉的相關知識。1 什麼是優先順序反轉 簡單從字面上來說,就是低優先順序的任務先於高優先順序的任務執行了,優先順序搞反了。那在什麼情況下會生這種情況呢?假...