作業系統養成計劃之篇二:死鎖
博文開頭說點別的,風雨哈佛路小說原文中有這麼一段話:上帝賦予我平靜,讓我接受無法改變的事情,賦予我勇氣,讓我改變我能改變的事情,賦予我智慧,讓我發現事物的不同...莉絲默裡的精神!
死鎖的概念:該組的每一個程序都正在等待這一組的其他程序所佔有的資源而無法推進的錯誤現象!
在死鎖狀態下,所有的程序都在等待,沒有一個程序能引用任何事件將該組中的其他成員喚醒,因此,所有的程序永遠處於等待狀態。
死鎖產生的原因:
根本原因:系統資源不足;推進順序不當。
四個必要條件:
1、互斥條件
2、保持和等待條件
3、不剝奪條件
4、環路等待條件
死鎖的一般處理策略:
1、預防死鎖(設定一些限制條件,破壞產生死鎖的四個必要條件的一個或幾個)
2、避免死鎖(在資源的動態分配過程當中,用某種方法防止系統進入不安全狀態!即侯明明提到的銀行家演算法)
3、死鎖的檢測與解除(允許死鎖發生,通過檢測系統,發生死鎖後通過某種措施解除死鎖)
死鎖經典問題:
哲學家吃通心麵問題:
問題描述:設有5個哲學家,共享擁有五把椅子的圓桌,每人一把椅子,桌子上一共五根筷子,每人兩邊各放一把,哲學家飢餓時試圖取得兩把筷子就餐,
就餐應滿足如下條件:
1、每一個人只有拿到兩雙筷子才能就餐
2、如果筷子在他人手上,則必須等待他人就餐結束才可以拿取筷子
3、未拿到兩隻筷子絕不放下手中的筷子
問題分析:
五位哲學家對左右鄰居對中間筷子的訪問屬於互斥關係
一般思路方法PV操作如下:
semaphore chopstick[5]={1,1,1,1,1};//定義訊號量,筷子五隻
pi(){
do{
P(chopstic[i]);
P(chopstick[(i+1)%5]);
eat ;
V(chopstic[i]);
V(chopstick[(i+1)%5]);
Think;
}while(1);
}
這種演算法存在死鎖問題,當五個哲學家各拿一隻筷子,那麼大家都沒得吃了GG;可以增加一些限制條件從而避免死鎖,比如說,同時最多允許四個哲學家就餐;
後續增添哲學家吃麵問題例項程式碼!
Thanks for your reading.