死鎖的規範定義
如果乙個程序集合中的每個程序都在等待只能由該程序集合中的其他程序才能引發的事件,那麼,該程序集合就是死鎖的。
死鎖舉例
資源死鎖:
假如兩個程序都準備將掃瞄的檔案記錄到cd上,可用資源只有掃瞄器一台,cd燒錄機一台。a程序請求使用掃瞄器,並被授權使用,b程序首先請求使用cd燒錄機,也被授權使用。現在a要請求使用燒錄機,該請求在b釋放燒錄機前被拒絕,a處於阻塞狀態;而b在該情況下,非但不放棄燒錄機的使用權,還繼續請求使用掃瞄器。於是,a和b都處於阻塞狀態,並且一直處於這種狀態。
通訊死鎖:
a程序向b程序傳送請求資訊,然後阻塞直至b回覆。假如此時請求資訊丟失,a將阻塞以等待回覆,而b會阻塞等待乙個向其傳送命令的請求,因此發生死鎖。
活鎖:輪詢可用於進入臨界區或訪問資源。設想這樣的場景,程序a以r1,r2的順序請求資源,b以r2,r1的順序請求資源。假設a請求r1並得到了其使用權,此時,b也請求r2也得到了其使用權,a程序將會一直輪詢請求r2,b輪詢請求r1。雖然a和b都沒有處於阻塞狀態,但是a與b都將不會再有任何進展,從現象上看出現了死鎖,稱為活鎖。
可搶占資源與不可搶占資源
可搶占資源可以從擁有它的程序中搶占而不會產生***,如儲存器就是一類可搶占資源;不可搶占資源是指在不引起相關計算失敗的情況下,無法從占有它的程序處搶占過來。一般來說,死鎖和不可搶占資源有關。
資源死鎖的四個必要條件
互斥條件:每個資源要麼已經分配給乙個程序,要麼就是可用的
占有和等待條件:已經得到某個資源的程序可以再次請求新的資源
不可搶占條件:已經分配給乙個程序的資源不能強制性地被搶占,它只能被占有它的程序顯式釋放
環路等待條件:死鎖發生時,系統中一定有由兩個或者兩個以上的程序組成的一條環路,該環路中的每個程序都在等待著下乙個程序所占有的資源
死鎖檢測
(1)檢測資源分配圖中是否有環,有環則存在死鎖,此種方法適用於沒種資源型別乙個資源的情況。
(2)基於資源矩陣的檢測演算法,適用於沒種型別多個資源。
死鎖恢復的方法
(1)利用搶占恢復
(2)利用回滾恢復
(3)通過殺死程序恢復
死鎖預防
死鎖避免從本質上說是不可能的,因為它需要獲知未來的請求,而這些請求一般是不可知的。考慮死鎖產生的4個必要條件,只要破壞其中至少乙個,那麼死鎖將不會發生。
互斥條件:使用假離線技術
占有和等待條件:開始就請求全部資源
不可搶占條件:搶占資源
環路等待條件:對資源按序編號,按序請求
參考書籍《現代作業系統》
有關於死鎖的知識
1 打個比方,假設有 p1 和 p2 兩個程序,都需要 a 和 b 兩個資源,現在 p1 持有 a 等 待 b 資源,而 p2 持有 b 等待 a 資源,兩個都等待另乙個資源而不肯釋放資源,就 這樣無限等待中,這就形成死鎖,這也是死鎖的一種情況。給死鎖下個定義,如 果一組程序中每乙個程序都在等待僅由...
筆記 關於網路程式設計的知識整理
說起網路程式設計,首先得從計算機網路組成結構的開始講起。先回顧一下大學的計算機基礎知識,網路結構組成主要由 1 計算機系統和終端 計算機系統和終端提供的網路服務,通俗易懂的講就是網路基礎設施建設 2 通訊處理機 粗暴的解釋就是計算機網絡卡 3 通訊線路和通訊裝置 網線 雞毛無線 wifi 等 4 作...
整理關於物件屬性知識
訪問物件的屬性兩種方式 person.name或person name 什麼時候報屬性訪問值錯誤呢?查詢乙個不存在的屬性不會報錯,在物件自帶屬性 繼承屬性中均未找到查的屬性,返回undefined。但是當物件不存在時,要查不存在的物件的屬性就會報錯,null和undefined是沒有屬性的,要查他們...