2012-05-23 39 views
1

HPT - >最高優先級任務。
MPT - >中優先級任務
LPT - >低優先級任務我無法理解如何發生優先級倒置

這位朋友你好, ,我讀了很多網站的優先級反轉(例如http://www.embeddedheaven.com/priority-inversion-2.htm)。但我想知道,爲什麼HPT不能搶佔LPT? 如果您要閱讀第3.3節「無界反轉」,它說LPT是否已獲得資源,如果HPT已準備就緒,但由於LPT而被阻止的時間相同。但是如果MPT準備好了,它就會搶佔LPT並執行它自己。然後LPT必須等到MPT結束。一旦MPT結束,LPT就會恢復。一旦LPT完成,HPT開始。 所以我的問題是爲什麼HPT不能搶佔LPT或MPT?

+2

根據你鏈接到的文章,我並不感到驚訝,你無法理解它。 –

回答

7

維基百科的解釋也許是有點更容易理解比你所提供的鏈接:https://en.wikipedia.org/wiki/Priority_inversion

要回答你的問題稍微不同的話,會發生什麼情況大致按時間順序是

  1. LPT獲得[R
  2. MPT變爲可運行,從而搶佔LPT
  3. HPT變爲可運行,從而搶佔MPT
  4. HPT嘗試獲取R和塊
  5. 調度程序選擇可運行的最高優先級任務,即MPT。
  6. MPT運行無限(可能「永遠」),從而阻止LPT運行和釋放R,從而阻止HPT運行。
+0

我有一個問題。爲什麼HPT無法運行(從第5點開始)? –

+0

@RasmiRanjanNayak:因爲它被阻止等待R被釋放。 – janneb

1

預先制止(使這項工作變得CPU時間)是不夠的,如果低優先級任務擁有一些獨家資源。然後,優先級較高的任務將嘗試獲取資源(例如通過鎖定一個互斥鎖),這會阻止資源,直到資源完成較低優先級的任務。

因此,在較低prio任務運行時,較高prio任務結束阻塞(不運行)。

+0

可否請詳細說明一點.. –

+3

@unwind,這不是優先級倒置問題的核心,如果它只是等待LPT發佈它不會是一個問題,它會成爲一個問題,因爲許多MPT搶佔了LPT並繼續,因爲他們不需要上述資源。這可能會導致最低優先級的資源在數小時內阻止HPT。火星漫遊者幾乎失去了這個能力,減去了從範圍和引導負載進行調試的強大能力。 – Kortuk

1

優先倒置是無限期延遲共享資源的先發制人的形式。

當高優先級任務請求訪問當前分配給低優先級任務的共享資源時,會發生優先級反轉。高優先級任務必須被阻塞,直到低優先級任務釋放資源。

當低優先級任務被阻止由一個或多箇中等優先級任務執行時,此問題變得複雜。由於低優先級任務未執行,因此無法完成與資源的交互並釋放該資源。因此,高優先級任務被有效阻止由較低優先級任務執行。