BLOG記事用論壇

 找回密碼
 註冊
搜索
熱搜:
查看: 1097|回復: 0

7 Undesirable Effects - Priority inversion,Timing anomalies,Deadlock

[複製鏈接]
發表於 2023-5-14 02:13:42 | 顯示全部樓層 |閱讀模式

Priority inversion
"Priority inversion"(優先級倒置)是一種在多任務系統中可能發生的問題,當一個高優先級的任務被一個低優先級的任務所阻塞(blocked)時,就會發生優先級倒置。

這通常發生在當一個高優先級的任務試圖鎖定(lock)一個已經被一個低優先級的任務鎖定的資源時。在這種情況下,高優先級的任務必須等待低優先級的任務釋放該資源,此時高優先級的任務被阻塞。

這裡需要注意的是,一個低優先級的任務不會被高優先級的任務"阻塞"。因為在多任務系統中,當一個高優先級的任務準備好運行時,它可以中斷(preempt)正在運行的低優先級的任務。換句話說,一個高優先級的任務可以"推擠"(displace)低優先級的任務,但不會阻塞它們。

優先級倒置可能會破壞高優先級任務的可調度性(schedulability)。因為高優先級的任務可能需要在一個固定的時間內完成,但如果它們被低優先級的任務阻塞,那麼它們可能無法在截止時間前完成。這就是為什麼設計實時系統和調度策略時,需要考慮並儘量避免優先級倒置的問題。


Timing anomalies
"Timing anomalies"(時間異常)是一種在實時系統中可能發生的現象,當一個任務或工作比預期更早地完成時,理論上,所有其他任務的響應時間應該變早(或至少不變晚)。然而,在某些情況下,這可能不會發生,這就是所謂的"時間異常"。

這種現象可能由於多種因素引起,包括但不限於調度策略、資源共享以及硬體行為等。舉例來說,假設有兩個任務A和B,A的優先級高於B,且兩者都需要訪問同一個資源。如果A比預期早完成,那麼B可能會提前開始,並鎖定該資源。然後,如果此時有一個新的A任務到達,則它需要等待B釋放資源,這可能導致A的響應時間變長,即使原本的A任務比預期早完成。

總的來說,"時間異常"是一種反直覺的現象,它強調了在設計和分析實時系統時需要考慮的複雜性。


Deadlock
"Deadlock"(死鎖)是一種在多任務系統,包括實時系統中可能發生的嚴重錯誤。當一個或多個任務(tasks)在試圖獲得一組資源(resources)時,如果每個任務都在等待由其他任務持有的資源,並且這些任務都不會釋放它們已經持有的資源,那麼就會產生死鎖。

這種情況通常被描述為"圓形等待"(circular waiting),因為每個任務都在等待下一個任務所持有的資源,而這創建了一種循環的依賴關係。結果,所有涉及的任務都無法繼續進行,因為它們都在無限期地等待永遠不會變得可用的資源。

對於死鎖的處理,有兩種主要的策略:死鎖預防(deadlock prevention)和死鎖檢測與恢復(deadlock detection and recovery)。在實時系統中,通常更偏向於使用死鎖預防策略,因為一旦死鎖發生,可能會導致系統無法在規定時間內完成任務。

死鎖預防通常涉及對資源訪問的部分排序(partial order)的實施。這意味著系統強制任務按照某種預定的順序來獲取資源,從而防止圓形等待的情況發生。例如,我們可以將資源編號,並要求任務只能按照數字順序獲取資源。這樣,任務就不能在持有一個高編號的資源的同時,去嘗試獲得一個低編號的資源,從而防止了死鎖的發生。

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|綜合討論區

GMT+8, 2026-6-24 17:28 , Processed in 0.033263 second(s), 9 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表