對系統資源的競爭。各程序對不可剝奪的資源(如印表機)的競爭可能引起死鎖,對可剝奪的資 源(cpu)的競爭是不會引起死鎖的。
程序推進順序非法。請求和釋放資源的順序不當,也同樣會導致死鎖。例如,併發執行的程序p1、
p2 分別申請並占有了資源 r1、r2,之後程序p1又緊接著申請資源r2,而程序p2又申請資源r1, 兩者會因為申請的資源被對方占有而阻塞,從而發生死鎖。
訊號量的使用不當也會造成死鎖。如生產者-消費者問題中,如果實現互斥的p操作在實現同步的 p操作之前,就有可能導致死鎖。(可以把互斥訊號量、同步訊號量也看做是一種抽象的系統資 源)
預防死鎖。破壞死鎖產生的四個必要條件中的乙個或幾個。
避免死鎖。用某種方法防止系統進入不安全狀態,從而避免死鎖(銀行家演算法)
死鎖的檢測和解除。允許死鎖的發生,不過作業系統會負責檢測出死鎖的發生,然後採取某種措 施解除死鎖。
破壞互斥條件
互斥條件:只有對必須互斥使用的資源的爭搶才會導致死鎖。 如果把只能互斥使用的資源改造為允許共享使用,則系統不會進入死鎖狀態。比如:spooling技術。 作業系統可以採用 spooling 技術把獨佔裝置在邏輯上改造成共享裝置。比如,用spooling技術將打 印機改造為共享裝置…
該策略的缺點:並不是所有的資源都可以改造成可共享使用的資源。並且為了系統安全,很多地方 還必須保護這種互斥性。因此,很多時候都無法破壞互斥條件。
破壞不剝奪條件
不剝奪條件:程序所獲得的資源在未使用完之前,不能由其他程序強行奪走,只能主動釋放。
破壞不剝奪條件:
方案一:當某個程序請求新的資源得不到滿足時,它必須立即釋放保持的所有資源,待以後需要時 再重新申請。也就是說,即使某些資源尚未使用完,也需要主動釋放,從而破壞了不可剝奪條件。
方案二:當某個程序需要的資源被其他程序所占有的時候,可以由作業系統協助,將想要的資源強 行剝奪。這種方式一般需要考慮各程序的優先順序(比如:剝奪排程方式,就是將處理機資源強行剝 奪給優先順序更高的程序使用) 該策略的缺點:
實現起來比較複雜。
釋放已獲得的資源可能造成前一階段工作的失效。因此這種方法一般只適用於易儲存和恢復狀態 的資源,如cpu。
反覆地申請和釋放資源會增加系統開銷,降低系統吞吐量。
若採用方案一,意味著只要暫時得不到某個資源,之前獲得的那些資源就都需要放棄,以後再重 新申請。如果一直發生這樣的情況,就會導致程序飢餓。
破壞請求和保持條件
破壞迴圈等待條件
安全狀態定義:系統在分配資源時,能夠找到一條安全序列滿足各個程序的最大的資源的需求。
作業系統死鎖
作業系統死鎖,在作業系統課程當中屬於比較關注的乙個知識點,在這裡做個簡單的梳理。死鎖的四個必要條件 作業系統中有若干程序併發執行,它們不斷申請 使用 釋放系統資源,雖然系統的進 程協調 通訊機構會對它們進行控制,但也可能出現若干程序都相互等待對方釋放資源才能 繼續執行,否則就阻塞的情況。此時,若不借...
作業系統 死鎖
多執行緒以及多程序改善了系統資源的利用率並提高了系統 的處理能力。然而,併發執行也帶來了新的問題 死鎖。死鎖是指多個程序在執行過程中因爭奪資源而造成的一種僵局,當前程序處於這種狀態時,若無外力作用,它們都將無法再向前推進。關於死鎖的一些結論 競爭資源 當系統中供多個程序共享的資源如印表機 公用佇列等...
作業系統 死鎖
把需要排他性使用的物件稱為資源。資源可以是硬體也可以是軟體,比如印表機或者資料庫中的乙個加鎖記錄。資源可以分為兩類 可搶占資源和不可搶占資源。搶占這個詞,在程序和執行緒排程時就提到了這個概念,那時是程序或者執行緒可以搶占cpu,即搶占式排程。儲存器也可以搶占,如記憶體換頁。一般來說,可搶占資源不會引...