操作系統2.4.1 死鎖的概念

一、什麼是死鎖?

多個進程因競爭資源而導致各進程都阻塞(相互等待)。

若無外力作用,這些進程都將無法向前推進。

 

二、進程死鎖、飢餓、死循環的區別(選擇題)

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

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

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

 

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

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

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

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

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

 

注意!發生死鎖時一定有循環等待,但是發生循環等待時未必是死鎖(循環等待是死鎖的必要不充分條件)。

比如哲學家進程中,如果5個哲學家都在等待對方放下筷子而進入了循環等待。此時有一個神祕的第六人,它手上有一根樹枝(可以替代筷子的資源),給其中一個哲學家他們就不會死鎖了。

即同類資源數大於1,則即使有循環等待,也未必會發生死鎖。如果系統中的每類資源只有1個,那麼循環等待就必然會導致死鎖了。

 

四、什麼時候會發生死鎖

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

2、進程推進順序非法。請求和釋放資源的順序不當,也同樣會導致死鎖。

例如,併發執行的進程P1,P2分別申請並佔有資源R1,R2,之後進程P1又緊接着申請資源R2,而進程P2又申請資源R1,兩者會因爲申請的資源被對方佔有而阻塞,從而發生死鎖

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

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

 

五、死鎖的處理策略

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

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

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

 


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