操作系统(二十八)死锁的概念
生活随笔
收集整理的這篇文章主要介紹了
操作系统(二十八)死锁的概念
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2.4.1 死鎖的概念
??在并發環境下,各進程因競爭資源而造成的一種互相等待對方手里的資源,導致各進程都阻塞,都無法向前推進的現象,就是“死鎖”。通俗一點就是我有一個資源你也有一個資源,但我們還想要對方手里的資源,可對方還不放手,于是我們就都等對方放手,導致進程沒辦法推進,這就造成了死鎖。
目錄
2.4.1 死鎖的概念
2.4.1.1 死鎖、饑餓、死循環
2.4.1.2??死鎖產生的必要條件
2.4.1.3 死鎖發生的時機
2.4.1.4 處理死鎖的策略
2.4.1.1 死鎖、饑餓、死循環
??之前我們接觸過饑餓,還有在程序中出現的死循環,他們都會使進程沒有辦法繼續推進下去,下面來說明一下三者的區別。
| ? | 區別 |
| 死鎖 | 死鎖一定是“循環等待對方手里的資源”導致的,因此如果有死鎖現象,那至少有兩個或兩個以上的進程同時發生死鎖。另外,發生死鎖的進程一定處于阻塞態。 |
| 饑餓 | 可能只有一個進程發生饑餓。發生饑餓的進程既可能是阻塞態(如長期得不到需要的I/O設備),也可能是就緒態(長期得不到處理機) |
| 死循環 | 可能只有一個進程發生死循環。死循環的進程可以上處理機運行(可以是運行態),只不過無法像期待的那樣順利推進。死鎖和饑餓問題是由于操作系統分配資源的策略不合理導致的,而死循環是由代碼邏輯的錯誤導致的。死鎖和饑餓是管理者(操作系統)的問題,死循環是被管理者的問題。 |
2.4.1.2??死鎖產生的必要條件
? 互斥條件:只有對必須互斥使用的資源的爭搶才會導致死鎖(如哲學家的筷子、打印機設備)。像內存、揚聲器這樣可以同時讓多個進程使用的資源是不會導致死鎖的(因為進程不用阻塞等待這種資源)。
? 不剝奪條件:進程所獲得的資源在未使用完之前,不能由其他進程強行奪走,只能主動釋放。
? 請求和保持條件:進程已經保持了至少一個資源,但又提出了新的資源請求,而該資源又被其他進程占有,此時請求進程被阻塞,但又對自己已有的資源保持不放。 ? 循環等待條件:存在一種進程資源的循環等待鏈,鏈中的每一個進程已獲得的資源同時被下一個進程所請求。 在循環等待這里我們注意一下,死鎖一定會有循環等待但是循環等待卻不一定發生死鎖(系統中存在的所需資源數大于1)。2.4.1.3 死鎖發生的時機
- 對系統資源的競爭。各進程對不可剝奪的資源(如打印機)的競爭可能引起死鎖,對可剝奪的資源(CPU)的競爭是不會引起死鎖的。
- 進程推進順序非法。請求和釋放資源的順序不當,也同樣會導致死鎖。例如,并發執行的進程P1、P2 分別申請并占有了資源 R1、R2,之后進程P1又緊接著申請資源R2,而進程P2又申請資源R1,兩者會因為申請的資源被對方占有而阻塞,從而發生死鎖。
- ?信號量的使用不當也會造成死鎖。如生產者-消費者問題中,如果實現互斥的P操作在實現同步的P操作之前,就有可能導致死鎖。(可以把互斥信號量、同步信號量也看做是一種抽象的系統資源)
2.4.1.4 處理死鎖的策略
- 預防死鎖。破壞死鎖產生的四個必要條件中的一個或幾個。
- 避免死鎖。用某種方法防止系統進入不安全狀態,從而避免死鎖(銀行家算法)
- 死鎖的檢測和解除。允許死鎖的發生,不過操作系統會負責檢測出死鎖的發生,然后采取某種措施解除死鎖。
其中前兩條不允許死鎖的發生,而最后一條可以允許死鎖的發生。
總結
以上是生活随笔為你收集整理的操作系统(二十八)死锁的概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 母婴产业发展蓝皮书
- 下一篇: 2021中国新锐品牌发展研究:食品饮料行