操作系统死锁详解
一、死鎖的定義
死鎖是兩個或兩個以上的進程中的每一個都在等待其中另一個進程釋放資源而被封鎖,它們都無法向前推進,這種現(xiàn)象稱為死鎖。
二、產(chǎn)生死鎖的主要原因
(1) 因為系統(tǒng)資源不足。?
(2) 進程運行推進的順序不合適。?
(3) 資源分配不當(dāng)?shù)取?br />
如果系統(tǒng)資源充足,進程的資源請求都能夠得到滿足,死鎖出現(xiàn)的可能性就很低,否則就會因爭奪有限的資源而陷入死鎖。其次,進程運行推進順序與速度不同,也可能產(chǎn)生死鎖。
(1) 互斥條件:一個資源每次只能被一個進程使用。?
(2) 占有等待條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。?
(3) 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。?
(4) 循環(huán)等待條件:若干進程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。?
這四個條件是死鎖的必要條件,只要系統(tǒng)發(fā)生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發(fā)生死鎖。
四、解決死鎖的對策
(1)預(yù)防死鎖
①破壞互斥條件
允許一個資源可以由多個進程“同時”使用。
②破壞占有等待條件
常用的方法是預(yù)先靜態(tài)分配法,即在作業(yè)調(diào)度選擇作業(yè)時,僅當(dāng)作業(yè)所需要的全部資源都能滿足時,才調(diào)度它進入內(nèi)存運行。
③破壞非剝奪條件
常采用剝奪調(diào)度法,根據(jù)申請資源的優(yōu)先級別高低來剝奪占用的資源。
④破壞循環(huán)等待條件
系統(tǒng)給每類資源賦予一個編號,每一個進程按編號遞增的順序請求資源,釋放則相反
(2)避免死鎖
預(yù)防死鎖的幾種策略,會嚴重地損害系統(tǒng)性能。因此在避免死鎖時,要施加較弱的限制,從而獲得較滿意的系統(tǒng)性能。
由于在避免死鎖的策略中,允許進程動態(tài)地申請資源。因而,系統(tǒng)在進行資源分配之前預(yù)先計算資源分配的安全性。若此次分配不會導(dǎo)致系統(tǒng)進入不安全狀態(tài),則將資源分配給進程;否則,進程等待。
其中最具有代表性的避免死鎖算法是銀行家算法。?
(3)解決死鎖
常用的方法有兩種:撤銷法和剝奪法。
撤銷法是按照一定的次序逐漸地撤銷已死鎖的進程,直到獲得為消除死鎖需要的足夠資源為止。
剝奪法是從一些進程那里剝奪足夠數(shù)量的資源,并分給死鎖的進程,以便足以解開死鎖。
總結(jié)