一、概念
? ? ? ?死鎖是指在一個進程集合中的每個進程都在等待只能由該集合中的其他進程才能引起的事件,而無限期地僵持下去的局面。在多任務環境中,由于資源分配不當,導致兩個或多個進程在等待對方釋放資源時陷入無限等待的狀態,這就是死鎖。
二、產生因素
- 系統資源有限:當系統中多個進程共享資源時,如打印機、公用隊列等,其數目不足以滿足所有進程的需求,會引起進程對資源的競爭而產生死鎖。
- 并發進程間的推進順序不當:進程在運行過程中,請求和釋放資源的順序不當,也會產生進程死鎖。
- 資源分配策略:資源的分配策略也可能導致死鎖的發生,如資源的分配是否公平、是否遵循一定的順序等。
三、必要條件
? ? ? 產生死鎖必須同時滿足以下四個必要條件:
- 互斥條件:進程對所分配到的資源進行排他性使用,即在一段時間內某資源僅能被一個進程占用。如果此時還有其他進程請求該資源,那么請求的進程只能等待,直到占有資源的進程用畢釋放。
- 占有和等待條件:進程已經持有至少一個資源,但又提出了新的資源請求,而該資源已被其他進程占有,此時請求進程阻塞,但又對自己已獲得的資源保持不放。
- 不剝奪條件:進程所獲得的資源在未使用完畢之前,不能被其他進程強行剝奪,而只能由獲得該資源的進程自己釋放。
- 環路等待條件:在發生死鎖時,必然存在一個進程-資源的環形鏈,即進程集合中的進程形成一種頭尾相接的環形等待資源關系。
四、死鎖的處理策略
死鎖預防:
- 破壞互斥條件:允許資源同時被多個進程訪問,但這對于某些資源(如打印機)來說是不可能的。
- 破壞占有和等待條件:實行資源預先分配策略,即進程在運行前一次性向系統申請它所需要的全部資源,若所需全部資源得不到滿足,則不分配任何資源,此進程暫不運行。只有當系統能夠滿足當前進程所需的全部資源時,才一次性將所申請的資源全部分配給該進程。但是,這樣會導致資源利用率降低,并可能導致饑餓現象。
- 破壞不剝奪條件:當一個進程占有了一部分資源,在申請新的資源而得不到滿足時,必須釋放所有占有的資源以便讓其他進程使用。但這種方法實現起來比較困難,且可能導致工作失效、增加系統開銷。
- 破壞環路等待條件:采用資源有序分配法,對所有資源排序編號,所有進程對資源的請求必須嚴格按資源序號遞增的順序提出,即只有占用了小號資源才能申請大號資源。這種策略可以破壞環路等待條件,從而預防死鎖的發生。
死鎖避免:
? ? ? ?死鎖避免方法允許系統中同時存在死鎖的三個必要條件,即互斥、占有且等待和非搶占。每當進程提出資源申請時,系統分析滿足該資源請求時系統是否會發生死鎖,若不會發生則實施分配,否則拒絕分配。銀行家算法就是一種避免死鎖的方法,它模擬銀行家貸款的策略來分配系統資源,以確保系統始終處于安全狀態。死鎖檢測與解除:
? ? ? ?死鎖檢測和解除對資源分配不加任何限制,也不采取死鎖避免措施。系統定時運行一個“死鎖檢測”程序,如果檢測到系統發生了死鎖,再采取措施解除它。解除死鎖的方法包括立即結束所有進程的執行并重新啟動操作系統、剝奪陷于死鎖的進程占用的資源但不撤銷它直到死鎖解除、撤銷陷于死鎖的所有進程并解除死鎖繼續運行等。此外,還可以使用進程-資源分配圖來檢測系統是否處于死鎖狀態,并采取相應的措施來解除死鎖。
五、總結
? ? ? ?死鎖是操作系統中一個復雜且重要的問題。為了避免和解決死鎖問題,我們需要深入理解死鎖的產生原因和必要條件,并采取相應的預防、避免、檢測和解除策略。在實際應用中,我們需要根據系統的具體需求和特點選擇合適的策略來確保系統的穩定性和可靠性。
?結語?????
藝術并非模仿生活
而是生活在模仿藝術
!!!