死鎖(Deadlock)是指多個進程在運行的過程中因爭奪資源而造成的一種僵局。當進程處于這種僵持狀態(tài)時,若無外力作用,它們都將無法再向前推進。在軟件設計師的考試當中,這個知識點的考查是以選擇題的形式出現(xiàn)的,考點主要有:死鎖的必要條件、解決死鎖的方法,最難高難度會考到“銀行家算法”。本文將介紹死鎖的相關知識,但不會具體講解“銀行家算法”,該算法將在本系列的下一篇文章中詳細說明。
1、死鎖發(fā)生的必要條件
死鎖的發(fā)生必須具備四個必要條件,這四個條件相互聯(lián)系、缺一不可。
(1)互斥條件:指進程對所分配到的資源進行排他性使用,即在一段時間內某資源只由一個進程占用。如果此時還有其他進程請求該資源,則請求者只能等待,直至占有該資源的進程用完并釋放。
(2)請求和保持條件:指進程已經保持了至少一個資源,但又提出了新的資源請求,而該資源又已被其他進程占有,此時請求進程阻塞,但又對自己已獲得的其他資源保持不放。
(3)不剝奪條件:指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
(4)環(huán)路等待條件:指在發(fā)生死鎖時,必然存在一個進程--資源的環(huán)形鏈,即進程集合{P0,P1,P2…Pn}中的P0正在等待一個P1占用的資源,P1正在等待P2占用的資源,……Pn正在等待已被P0占用的資源。
2、解決死鎖的策略
解決死鎖的策略通常有三種:死鎖預防、死鎖避免以及死鎖解除。前兩種方法是“事前措施”,而死鎖解除是“事后解決方案”。
(1)死鎖預防:“解鈴還需系鈴人”,隨便破壞導致死鎖這任意一個必要條件就可以預防死鎖。例如,要求用戶申請資源時一起申請所需要的全部資源,這就破壞了保持和等待條件;將資源分層,得到上一層資源后,才能夠申請下一層資源,它破壞了環(huán)路等待條件。預防通常會降低系統(tǒng)的效率。
(2)死鎖避免:避免是指進程在每次申請資源時判斷這些操作是否安全,典型算法是“銀行家算法”(本系列文章的下一篇將詳細講解該問題)。但這種算法會增加系統(tǒng)的開銷。
(3)死鎖解除:該方法的思路很簡單,通過死鎖檢測判斷系統(tǒng)是否處于死鎖狀態(tài),若死鎖,則由系統(tǒng)強制剝奪部分進程的資源,將資源強行分配給別的進程。
相關推薦:2010年全國計算機軟考報名時間匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |