死鎖,是指多個程序在執行過程中因爭奪資源而造成的一種僵局,當程序處於這種僵持狀態時,若無外力作用,它們都將無法再向前推進。 如下圖所示:如果此時有乙個執行緒 a,已經持有了鎖 a,但是試圖獲取鎖 b,執行緒 b 持有鎖 b,而試圖獲取鎖 a,這種情況下就會產生死鎖。
由於系統中存在一些不可剝奪資源,而當兩個或兩個以上程序占有自身資源,並請求對方資源時,會導致每個程序都無法向前推進,這就是死鎖。
競爭資源
例如:系統中只有一台印表機,可供程序 a 使用,假定 a 已占用了印表機,若 b 繼續要求印表機列印將被阻塞。
系統中的資源可以分為兩類:
可剝奪資源:是指某程序在獲得這類資源後,該資源可以再被其他程序或系統剝奪,cpu 和主存均屬於可剝奪性資源;
不可剝奪資源,當系統把這類資源分配給某程序後,再不能強行收回,只能在程序用完後自行釋放,如磁帶機、印表機等。
程序推進順序不當
例如:程序 a 和 程序 b 互相等待對方的資料。
互斥條件:程序要求對所分配的資源進行排它性控制,即在一段時間內某資源僅為一程序所占用。
請求和保持條件:當程序因請求資源而阻塞時,對已獲得的資源保持不放。
不剝奪條件:程序已獲得的資源在未使用完之前,不能剝奪,只能在使用完時由自己釋放。
環路等待條件:在發生死鎖時,必然存在乙個程序–資源的環形鏈。
預防死鎖
避免死鎖
檢測死鎖
解除死鎖
破壞請求條件:一次性分配所有資源,這樣就不會再有請求了;
破壞請保持條件:只要有乙個資源得不到分配,也不給這個程序分配其他的資源:
破壞不可剝奪條件:當某程序獲得了部分資源,但得不到其它資源,則釋放已占有的資源;
破壞環路等待條件:系統給每類資源賦予乙個編號,每乙個程序按編號遞增的順序請求資源,釋放則相反。
銀行家演算法
當程序首次申請資源時,要測試該程序對資源的最大需求量,如果系統現存的資源可以滿足它的最大需求量則按當前的申請量分配資源,否則就推遲分配。
當程序在執行中繼續申請資源時,先測試該程序已占用的資源數與本次申請資源數之和是否超過了該程序對資源的最大需求量。若超過則拒絕分配資源。若沒超過則再測試系統現存的資源能否滿足該程序尚需的最大資源量,若滿足則按當前的申請量分配資源,否則也要推遲分配。
安全序列
是指系統能按某種程序推進順序(p1, p2, p3, …, pn),為每個程序 pi 分配其所需要的資源,直至滿足每個程序對資源的最大需求,使每個程序都可以順序地完成。這種推進順序就叫安全序列【銀行家演算法的核心就是找到乙個安全序列】。
系統安全狀態
如果系統能找到乙個安全序列,就稱系統處於安全狀態,否則,就稱系統處於不安全狀態。
資源剝奪:掛起某些死鎖程序,並搶占它的資源,將這些資源分配給其他死鎖程序(但應該防止被掛起的程序長時間得不到資源);
撤銷程序:強制撤銷部分、甚至全部死鎖程序並剝奪這些程序的資源(撤銷的原則可以按程序優先順序和撤銷程序代價的高低進行);
程序回退:讓乙個或多個程序回退到足以避免死鎖的地步。程序回退時自願釋放資源而不是被剝奪。要求系統保持程序的歷史資訊,設定還原點。
死鎖產生的原因和必要條件
死鎖產生的原因和必要條件1 產生死鎖的原因主要是 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資源分配不當等。2.產生死鎖的四個必要條件 1 互斥條件 乙個資源每次只能被乙個程序使用。2 請求與保持條件 乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。3 不剝奪條件 程序已獲得的資源...
死鎖的必要條件及避免
死鎖 是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。死鎖的原因 系統資源的競爭導致系統資源不足,以及資源分配不當,導致死鎖。程序在執行過程中,...
死鎖概念?產生死鎖必要條件?如何防止死鎖?
死鎖概念 所謂死鎖,是指兩個或者兩個以上執行緒在執行過程中,因爭奪資源而產生互相等待的現象,若無外力作用,他們都將無法推進下去,此時,稱系統處於死鎖。死鎖產生的四個必要條件 1 互斥條件 程序對所分配的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時,還有其它的程序請求該資源,則請...