應(yīng)用的比較多的是死鎖的檢測和預(yù)防,死鎖產(chǎn)生的有下列四個條件:
1悟泵、互斥
2、占有且等待
3闪水、不可搶占
4糕非、環(huán)路等待
這四個條件都是死鎖發(fā)生所必須的條件,只要破壞這其中的某一個條件就行了
操作系統(tǒng)中有若干進(jìn)程并發(fā)執(zhí)行球榆, 它們不斷申請朽肥、使用、釋放系統(tǒng)資源持钉,雖然系統(tǒng)的進(jìn)
程協(xié)調(diào)衡招、通信機構(gòu)會對它們進(jìn)行控制,但也可能出現(xiàn)若干進(jìn)程都相互等待對方釋放資源才能
繼續(xù)運行每强,否則就阻塞的情況始腾。此時,若不借助外界因素空执, 誰也不能釋放資源浪箭, 誰也不能解
除阻塞狀態(tài)。根據(jù)這樣的情況脆烟,操作系統(tǒng)中的死鎖被定義為系統(tǒng)中兩個或者多個進(jìn)程無限期
地等待永遠(yuǎn)不會發(fā)生的條件山林,系統(tǒng)處于停滯狀態(tài),這就是死鎖邢羔。
產(chǎn)生死鎖的原因主要是:
(1) 因為系統(tǒng)資源不足。
(2) 進(jìn)程運行推進(jìn)的順序不合適桑孩。
(3) 資源分配不當(dāng)?shù)取?br>
如果系統(tǒng)資源充足拜鹤, 進(jìn)程的資源請求都能夠得到滿足,死鎖出現(xiàn)的可能性就很低流椒, 否則
就會因爭奪有限的資源而陷入死鎖敏簿。其次,進(jìn)程運行推進(jìn)順序與速度不同宣虾,也可能產(chǎn)生死鎖惯裕。
產(chǎn)生死鎖的四個必要條件:
(1) 互斥條件:一個資源每次只能被一個進(jìn)程使用。
(2) 請求與保持條件:一個進(jìn)程因請求資源而阻塞時绣硝,對已獲得的資源保持不放蜻势。
(3) 不剝奪條件:進(jìn)程已獲得的資源,在末使用完之前鹉胖,不能強行剝奪握玛。
(4) 循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系够傍。
這四個條件是死鎖的必要條件, 只要系統(tǒng)發(fā)生死鎖挠铲, 這些條件必然成立冕屯, 而只要上述條件之
一不滿足,就不會發(fā)生死鎖拂苹。
死鎖的解除與預(yù)防:
理解了死鎖的原因安聘, 尤其是產(chǎn)生死鎖的四個必要條件,就可以最大可能地避免瓢棒、預(yù)防和
解除死鎖浴韭。所以, 在系統(tǒng)設(shè)計音羞、進(jìn)程調(diào)度等方面注意如何不讓這四個必要條件成立囱桨, 如何確
定資源的合理分配算法, 避免進(jìn)程永久占據(jù)系統(tǒng)資源嗅绰。此外舍肠, 也要防止進(jìn)程在處于等待狀態(tài)
1/3頁
的情況下占用資源。因此窘面,對資源的分配要給予合理的規(guī)劃翠语。
死鎖的防止方法:如果有死鎖形成,則4個必要條件一定同時成立财边,于是肌括,只要采用的資源分配策略能使其中之一不成立,則就能防止死鎖的發(fā)生酣难。
(1)互斥條件
要使互斥使用資源的條件不成立谍夭,唯一的資源分配策略是允許進(jìn)程共享資源。
如“只讀文件”是一種很好的共享資源憨募。
要破壞“互斥使用資源”的條件經(jīng)常是行不通的紧索。如:打印機不能被多個進(jìn)程共享。對可共享的磁盤來說菜谣,任何時刻也只允許一個進(jìn)程啟動它珠漂。
(2)占有并等待條件
要是占有并等待資源的條件不成立,經(jīng)常使用兩種資源分配策略:靜態(tài)分配資源和釋放已占資源尾膊。
靜態(tài)分配資源策略(也稱為預(yù)分配資源)——要求每個進(jìn)程在開始執(zhí)行前就申請它所需要的全部資源媳危,僅當(dāng)系統(tǒng)能滿足進(jìn)程的資源申請要求且把資源分配給進(jìn)程后,該進(jìn)程才能開始執(zhí)行冈敛。
特點:靜態(tài)分配資源的策略實現(xiàn)簡單待笑,但降低了資源的利用率。
釋放已占資源策略——這種分配策略是僅當(dāng)進(jìn)程沒有占有資源時才允許它去申請資源莺债。如果進(jìn)程已占用了某些資源而又要再申請資源滋觉,則它應(yīng)先歸還所占的資源后再申請新資源签夭。
特點:仍會使進(jìn)程處于等待資源狀態(tài),但不會出現(xiàn)占有了部分資源再等待其它資源的現(xiàn)象椎侠。
(3)可搶奪條件
搶占式資源分配策略:要使不可搶占其它進(jìn)程占有的資源不成立第租,可以約定如下:如果一個進(jìn)程已經(jīng)占有了某些資源又要申請新資源,而新資源不能滿足必須等待時我纪,系統(tǒng)可以
2/3頁
搶奪該進(jìn)程已有的資源慎宾。具體做法如下:
一個進(jìn)程申請的資源尚未被占用,則系統(tǒng)可把資源分配給該進(jìn)程浅悉。
若進(jìn)程A申請的資源R已被進(jìn)程B占用趟据,則查看進(jìn)程B的狀態(tài)。如果進(jìn)程B處于等待另一個資源的狀態(tài)术健,那么就搶奪進(jìn)程B已占的資源R并把R分配給進(jìn)程A;如果進(jìn)程B不是處于等待資源狀態(tài)汹碱,則讓進(jìn)程A處于等待資源R的狀態(tài)。
一個等待資源的進(jìn)程只有再得到自己申請的新資源和所有被搶奪的老資源后才能繼續(xù)執(zhí)行荞估。
這種可搶奪的資源分配策略不是對所有資源都適用的咳促,它只適合于主存和處理器。
例如:對打印機勘伺、磁帶機等就不能采用搶奪的方式跪腹,否則會造成混亂。
(4)循環(huán)等待條件
按序分配資源——要使循環(huán)等待條件不成立可采用按序分配的資源分配策略飞醉。具體做法是把系統(tǒng)中所有資源排序冲茸,對每個資源確定一個編號,規(guī)定任何一個進(jìn)程申請兩個以上的資源時缅帘,總是先申請編號最小的資源轴术,再申請編號大的資源。