死結迴避 (Deadlock Avoidance)
備註
本系列文章內容參考自經典教材 Operating System Concepts, 10th Edition (Silberschatz, Galvin, Gagne)。本文對應章節:Section 8.6 Deadlock Avoidance。
前幾節介紹了兩種主動防範死結的方式,並深入討論了其中一種:死結預防(Deadlock Prevention),透過結構性約束使四個必要條件中的至少一個在系統設計階段就被永久消除。然而,預防的代價是犧牲資源使用率,或讓程式設計的彈性受到顯著限制。
本節介紹另一種方式:死結迴避(Deadlock Avoidance)。迴避的思路截然不同。系統不從結構上消除死結的必要條件,而是在執行期間動態判斷每一次資源請求是否安全。它要求執行緒在進入系統前,事先聲明(Declare) 自己在整個執行過程中對每種資源可能需要的最大數量,OS 再根據這份額外資訊,在資源請求發生的當下決定是立即授予還是讓執行緒等待,確保系統永遠不會進入可能導致死結的狀態。
8.6.1 安全狀態 (Safe State)
安全狀態的定義
迴避演算法的一切判斷都以「安全狀態」為核心。在理解定義之前,先建立直覺:想像系統中有若干執行緒,每個執行緒的剩餘資源需求都已知。如果存在某種為每個執行緒分配資源的順序,使得每個執行緒都能在最終取得所需資源、完成任務並釋放資源,那麼系統就是安全的。
正式定義: 若系統可以依照某種順序依序為每個執行緒分配資源(直到達到其最大需求量)並讓其完成任務,而不發生死結,則稱系統處於安全狀態(Safe State)。