跳至內容

死結

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

這是本頁的一個歷史版本,由Tang891228對話 | 貢獻2018年10月12日 (五) 16:20 地區詞處理編輯。這可能和目前版本存在着巨大的差異。

P1、P2兩個process都需要資源才能繼續執行。P1擁有資源R2、還需要額外資源R1才能執行;P2擁有資源R1、還需要額外資源R2才能執行,兩邊都在互相等待而沒有任何一個可執行。

死-鎖(英語:Deadlock),又譯為死鎖,電腦科學名詞。當兩個以上的運算單元,雙方都在等待對方停止執行,以取得系統資源,但是沒有一方提前退出時,就稱為死結。在多工作業系統中,作業系統為了協調不同行程,能否取得系統資源時,為了讓系統運作,必須要解決這個問題。

這裏指的是行程死結,是個計算機技術名詞。它是作業系統或軟件執行的一種狀態:在多工系統下,當一個或多個行程等待系統資源,而資源又被行程本身或其他行程佔用時,就形成了死結。有個變種叫活結

簡介

例如,一個行程 p1佔用了顯示器,同時又必須使用印表機,而印表機被行程p2佔用,p2又必須使用顯示器,這樣就形成了死結。 因為p1必須等待p2釋出列表機才能夠完成工作並釋出螢幕,同時p2也必須等待p1釋出顯示器才能完成工作並釋出列表機,形成循環等待的死結。

死結的預防

如果系統中只有一個行程,當然不會產生死結。如果每個行程僅需求一種系統資源,也不會產生死結。不過這只是理想狀態,在現實中是可遇不可求的。

死結的四個條件是:

禁止搶佔 no preemption - 系統資源不能被強制從一個行程中退出

持有和等待 hold and wait - 一個行程可以在等待時持有系統資源

互斥 mutual exclusion - 只有一個行程能持有一個資源

迴圈等待 circular waiting - 一系列行程互相持有其他行程所需要的資源

死結只有在這四個條件同時滿足時出現。預防死結就是至少破壞這四個條件其中一項,即破壞「禁止搶佔」、破壞「持有等待」、破壞「資源互斥」和破壞「迴圈等待」。

死結的避免

我們也可以嘗試迴避死結。因為在理論上,死結總是可能產生的,所以作業系統嘗試監視所有行程,使其沒有死結。

死結的消除

最簡單的消除死結的辦法是重新啟動系統。更好的辦法是終止一個行程的執行。

同樣也可以把一個或多個行程轉返到先前的某個狀態。如果一個行程被多次轉返,遲遲不能佔用必需的系統資源,可能會導致行程飢餓英語Starvation (computer science)

參見

外部連結