簡體   English   中英

我不明白優先級反轉如何發生

[英]I cannot understand how priority inversion can occur

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?

Wikipedia的解釋也許比您提供的鏈接更容易理解: 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運行。

如果優先級較低的任務擁有一些獨占資源,則搶占(以便任務獲得CPU時間)是不夠的。 然后,較高優先級的任務將僅嘗試獲取資源(例如,通過鎖定互斥鎖),該資源將阻塞該資源,直到對資源進行較低優先級的任務為止。

因此,較高優先級的任務最終被阻塞(未運行),而較低優先級的任務開始運行。

優先級倒置是指擁有共享資源的先發高管無限期推遲的一種形式。

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

當低優先級任務被一個或多個中優先級任務阻止執行時,此問題變得復雜。 因為低優先級任務沒有執行,所以它無法完成與資源的交互並釋放該資源。 因此,通過低優先級任務有效地防止了高優先級任務執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM