死鎖原因
產生死鎖的原因可歸結為如下兩點:
(1)競爭資源。當系統中供多個進程共享的資源如印表機、公用佇列等,其數目不足以滿足進程的需要時,會引起諸進程的競爭而產生死鎖。
(2)進程間推進順序非法。進程在運行過程中,請求和釋放資源的順序不當,也同樣會導致產生進程死鎖。
死鎖條件
1.互斥條件(Mutual exclusion):資源不能被共享,只能由一個進程使用。
2.請求與保持條件(Hold and wait):已經得到資源的進程可以再次申請新的資源。
3.非剝奪條件(No pre-emption):已經分配的資源不能從相應的進程中被強制地剝奪。
4.循環等待條件(Circular wait):系統中若干進程組成環路,該環路中每個進程都在等待相鄰進程正占用的資源。
預防死鎖
1、採用資源靜態分配策略,破壞"部分分配"條件;
2、允許進程剝奪使用其他進程占有的資源,從而破壞"不可剝奪"條件;
3、採用資源有序分配法,破壞"環路"條件。
死鎖的避免不嚴格地限制死鎖的必要條件的存在,而是系統在系統運行過程中小心地避免死鎖的最終發生。最著名的死鎖避免算法是銀行家算法。死鎖避免算法需要很大的系統開銷。