優先順序反轉解決方案

劍西樓發表於2017-03-01

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的區別:
   
  優先順序繼承,只有當佔有資源的低優先順序的任務被阻塞時,才會提高佔有資源任務的優先順序,而優先順序天花板,不論是否發生阻塞,都提升.  

相關文章