2.20死鎖的概念

一,什麼是死鎖?

在併發環境下,各個進程因爲競爭資源而造成的一種互相等待對方手裏的資源,導致各個進程都堵塞,都無法向前推進的現象,就是死鎖。發送死鎖後無外力干涉,這些進程都無法向前推進

 

二,進程死鎖,飢餓,死循環的區別

死鎖:各個進程互相等待對方手中的資源,導致各個進程都堵塞無法向前推進的現象

飢餓:由於長期得不到想要的資源,某進程無法向前推進的現象。比如:短進程優先算法中,如果有源源不斷的短進程到來,則長進程就一直得不到處理機,從而發生長進程的飢餓

死循環:某進程執行過程中一直跳不出某個循環的現象。有時候是因爲程序邏輯bug,有時是程序員故意設計的

 

 

 

三,死鎖產生的四個必要條件:

1,互斥條件:只有對必須互斥使用的資源的爭搶纔會導致死鎖(如哲學家的筷子,打印機設備)。像內存,揚聲器這樣可以同時讓多個進程使用的資源不會發生死鎖(因爲進程不需要阻塞等待這種資源)

2,不剝奪條件:進程所獲得的資源在未使用完之前,不能由其他進程強行奪走,只能主動釋放

3,請求和保持條件:進程已經持有了至少一個資源,但右提出了新資源請求,而該資源又被其他進程佔有,此時請求進程被阻塞,但又對自己的資源不放。

4,循環等待條件:存在一種進程資源的循環等待鏈,鏈中的每一個進程已獲得的資源同時被下一個進程請求

 

5注意:發生死鎖時一定有循環等待,但是發生循環等待時未必是死鎖(循環等待是死鎖的必要不充分條件)。比如哲學家進程中,如果5個哲學家都在等待對方放下筷子二進入了循環等待,此時有一個神祕的第六人,它手上有一根樹枝(可以替代筷子的資源),給其中一個哲學家他們就不會死鎖了,即同類資源數大於1,則及時有循環等待,也未必發生死鎖。如果系統中的沒類資源只有1,那麼循環等待就是死鎖發生的充要條件。

 

四,什麼時候會發生死鎖

 

1,對系統資源的競爭:各個進程對不可剝奪的資源(如打印機)的競爭可能引起死鎖,對可剝奪的資源(CPU)的競爭是不會引起死鎖的

2,進程推進順序非法:請求和釋放資源的順序不當,也同樣會導致死鎖。例如,併發執行的進程P1,P2分別申請並佔有資源R1,R2,之後進程P1又緊接着申請資源R2,而進程P2又申請資源R1,兩者會因爲申請的資源被對方佔有二阻塞,從而發生死鎖

 

3,信號量的使用不當也會造成死鎖:如生產者-消費者進程中,如果實現互斥的P操作在 實現同步的P操作之前,就可能導致死鎖

總之,對不可剝奪資源的不合理分配,可能導致死鎖

 

五,死鎖的處理策略:

1,預防死鎖:破壞死鎖產生的四個必要條件的一個或幾個

2,避免死鎖:用某種方法防治系統進入不安全狀態,從而避免死鎖(銀行家算法)

3,死鎖的檢測和解除:允許死鎖發生,不過操作系統會負責檢測出死鎖的發生,然後採取某種措施解除死鎖

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章