進程死鎖,它是操作系統或系統軟件運行的一種狀態:在多任務系統下,當一個或多個進程等待系統資源,而資源又被進程本身或其他進程佔用時,就形成了死鎖。
產生死鎖的原因:
①系統資源不足;
②進程運行推進的順序不合適;
③資源分配不當等。
產生死鎖的四個必要條件:
①互斥條件:一個資源每次只能被一個進程使用;
②請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放;
③不剝奪條件:進程已獲得的資源,在未使用完之前,不能強行剝奪;
④循環等待條件:若干進程之間形成一種頭尾相連的循環等待資源關係。
避免死鎖的方法:
①有序的資源分配法;
②銀行家算法。
解決死鎖:
①進行系統的重新啓動(最簡單粗暴)
②撤銷進程,剝奪資源
銀行家算法
銀行家算法是一種最有代表性的避免死鎖的算法。
我們可以把操作系統看作是銀行家,操作系統管理的資源相當於銀行家管理的資金,進程向操作系統請求分配資源相當於用戶向銀行家貸款。操作系統按照銀行家制定的規則爲進程分配資源,當進程首次申請資源時,要測試該進程對資源的最大需求量,如果系統現存的資源可以滿足它的最大需求量則按當前的申請量分配資源,否則就推遲分配。當進程在執行中繼續申請資源時,先測試該進程已佔用的資源數與本次申請的資源數之和是否超過了該進程對資源的最大需求量。若超過則拒絕分配資源,若沒有超過則再測試系統現存的資源能否滿足該進程尚需的最大資源量,若能滿足則按當前的申請量分配資源,否則也要推遲分配。