優先順序反轉成因及解決辦法

來源:互聯網
上載者:User

  前兩天Marvell面試,被問到優先順序反轉是什麼東東,無奈只能表示不會,還好面試官非常地NICE,很耐心地告訴我這是什麼,還聊起NASA的火星探測器就因為優先順序反轉的原因出現過BUG, 我就一直點頭,還說回來會GOOGLE學習下

  Priority Inversion 優先順序反轉是嵌入式即時系統裡面的一個經典的問題。簡單描述一下這個問題:有三個優先順序不同的task,A,B,C; A的優先順序最高,B次之,C最低。其中A和C有共用的臨界區。如果C已進入臨界區,那麼A在進入進入臨界區之前,就會被阻塞。task B有可能打斷C而進入運行狀態,這樣C什麼時候從臨界區退出,就是一個未知的時間。A只有C從臨界區退出後才能被調度,A被阻塞的時間也是未知的。這樣,低優先順序的B先於高優先順序的A被調度,優先順序發生了逆轉。
這個問題在一般的作業系統裡面不是一個嚴重的問題,最多A被多阻塞了一段時間。但是,在即時系統裡面,如果一個任務在規定的時間裡面沒有被調度運行,系統就相當於失敗了,可能引發系統崩潰。
解決這個問題有兩種手段:
  1:Priority inheritance(優先順序繼承),如果一個高優先順序的task被阻塞,與它共用臨界區的低優先順序的task在進入臨界區後,優先順序就會繼承高優先順序task的優先順序,保證它不會被其他優先順序次高的任務打斷。從臨界區退出後,C的優先順序恢複正常。
  2:A priority ceiling(最高優先順序),給臨界區分配最高優先順序,如果一個task進入臨界區,就把臨界區的優先順序賦給它,已保證它不會被打斷。從臨界區退出後,task的優先順序恢複正常。

  即時作業系統的一個特點就是,一個即時任務,會在規定的時間內得到響應,並且在規定的時間內完成任務。所以,一切不可預知的動作都是有害的。

有興趣可以看看下面兩個連結:
http://en.wikipedia.org/wiki/Priority_inversion
http://www.embedded.com/story/OEG20020321S0023

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.