计算机操作系统——死锁
文章目錄
- 一、相關(guān)知識(shí)
- 1.可重用性資源和消耗性資源
- 2.可搶占性資源和不可搶占性資源
- 3.死鎖定義
- 二、死鎖產(chǎn)生的原因和必要條件
- 1.死鎖產(chǎn)生的原因
- 2.死鎖產(chǎn)生的必要條件
- 三、預(yù)防死鎖的方法
- 1.破壞“請(qǐng)求和保持”條件
- 2.破環(huán)“不可搶占”條件
- 3.破壞“循環(huán)等待”條件
一、相關(guān)知識(shí)
1.可重用性資源和消耗性資源
1)可重用性資源
可重用性資源是一種可供用戶重復(fù)使用多次的資源。具有如下性質(zhì):
(1)每一個(gè)可重用性資源中的單元只能分配給一個(gè)進(jìn)程使用,不允許多個(gè)進(jìn)程共享。
(2)進(jìn)程使用可重性資源的順序:①請(qǐng)求資源。如果請(qǐng)求失敗,請(qǐng)求進(jìn)程將會(huì)被阻塞或者循環(huán)等待。②使用資源③釋放資源
(3)系統(tǒng)中每一類可重用性資源中的單元數(shù)目都是相對(duì)固定的,進(jìn)程在運(yùn)行期間既不能創(chuàng)建也不能刪除它。
對(duì)資源的請(qǐng)求和釋放通常都是利用系統(tǒng)調(diào)用完成的。
2)可消耗性資源
可消耗性資源又被稱為臨時(shí)資源。是在進(jìn)程運(yùn)行期間由進(jìn)程動(dòng)態(tài)的創(chuàng)建和消耗的。具有如下性質(zhì):
(1)每一類可消耗性資源的單元數(shù)目在進(jìn)程運(yùn)行期間是可以不斷變化的,有時(shí)可以有許多,有時(shí)可以為0。
(2)進(jìn)程在運(yùn)行過(guò)程中,可以不斷的創(chuàng)造可消耗性資源的單元,將它們放入該資源類的緩沖區(qū)中,以增加該資源類的單元數(shù)目。
(3)進(jìn)程在運(yùn)行過(guò)程中,可以請(qǐng)求若干個(gè)可消耗性資源單元,用于進(jìn)程自己的消耗,不再將它們返回給該資源類中。
2.可搶占性資源和不可搶占性資源
1)可搶占性資源
對(duì)于可搶占性資源,進(jìn)程在獲得這類資源后,該資源可以再被其它進(jìn)程或者系統(tǒng)搶占。CPU和主存都屬于可搶占性資源,對(duì)于這類資源是不會(huì)引起死鎖的。
2)不可搶占性資源
對(duì)于不可搶占性資源,一旦系統(tǒng)把資源分配給該進(jìn)程后,就不能將它強(qiáng)行進(jìn)行回收,只能在進(jìn)程用完后自行釋放。
3.死鎖定義
如果一組進(jìn)程中的每一個(gè)進(jìn)程都在等待僅由改組進(jìn)程中的其他進(jìn)程才能引發(fā)的事件,那么改組進(jìn)程是死鎖的。
二、死鎖產(chǎn)生的原因和必要條件
1.死鎖產(chǎn)生的原因
死鎖的起因主要是因?yàn)槎鄠€(gè)進(jìn)程對(duì)資源的搶占,對(duì)不可搶占資源進(jìn)行爭(zhēng)奪會(huì)引起死鎖,對(duì)可消耗性資源進(jìn)行爭(zhēng)奪時(shí),也會(huì)引起死鎖。
(1)競(jìng)爭(zhēng)不可搶占性資源引起死鎖
如果有兩個(gè)進(jìn)程P1和P2,和兩個(gè)不可搶占性資源val1和val2,如果此時(shí)P1和P2分別擁有val1和val2而此時(shí)P1和P2在擁有現(xiàn)有資源情況下,又要去獲取對(duì)方擁有的資源,那么就會(huì)產(chǎn)生死鎖。
(2)競(jìng)爭(zhēng)可消耗資源引起死鎖
信號(hào)量本身就可以當(dāng)作一個(gè)可消耗資源。對(duì)于可消耗資源的競(jìng)爭(zhēng)一般來(lái)說(shuō)都會(huì)伴隨著生產(chǎn)者和消費(fèi)者,如果可消耗資源沒(méi)有辦法生產(chǎn)了,而進(jìn)程去搶占這個(gè)可消耗資源就會(huì)引起死鎖。
此外進(jìn)程推進(jìn)順序不當(dāng)也引起死鎖。而順序推進(jìn)不當(dāng)會(huì)造成以上所說(shuō)的兩種結(jié)果。
2.死鎖產(chǎn)生的必要條件
(1)互斥條件。即一個(gè)資源在某一段時(shí)間內(nèi)只能被一個(gè)進(jìn)程占用,如果此時(shí)有其他進(jìn)程請(qǐng)求該資源,則請(qǐng)求只能進(jìn)程只能等待,直至占有該資源的進(jìn)程用完釋放。
(2)請(qǐng)求和保持。進(jìn)程已經(jīng)擁有了至少一個(gè)資源,但是又提出新的資源請(qǐng)求,而該資源已經(jīng)被其他資源占用,此時(shí)請(qǐng)求被阻塞,但是對(duì)自己已經(jīng)獲得的資源保持不放。
(3)不可搶占條件。進(jìn)程已經(jīng)獲得的資源在未使用完之前不能被搶占,只能在進(jìn)程使用完時(shí)由自己釋放。
(4)循環(huán)和等待條件。發(fā)生死鎖時(shí),一定存在著一個(gè)進(jìn)程——資源的循環(huán)鏈。
三、預(yù)防死鎖的方法
互斥條件是非共享設(shè)備所必須的,不僅不能改變,還應(yīng)該加以保證。因此預(yù)防死鎖的三種方法就是破壞產(chǎn)生死鎖的必要條件中的后三個(gè),即請(qǐng)求與保持、不可搶占、循環(huán)等待。
1.破壞“請(qǐng)求和保持”條件
破壞該條件必須要滿足:當(dāng)一個(gè)進(jìn)程在請(qǐng)求資源時(shí),它不能持有不可搶占資源。達(dá)到該行為可以采用以下兩種方法中的任意一個(gè):
(1)所有進(jìn)程在開(kāi)始之前,一次性申請(qǐng)其在整個(gè)運(yùn)行過(guò)程中所需要的全部資源。也就是進(jìn)程運(yùn)行期間,不會(huì)再申請(qǐng)資源,破壞了請(qǐng)求條件。只要有一種資源不滿足進(jìn)程的要求,即使其他所需要的各資源都空閑也不分配給該進(jìn)程,而是讓該進(jìn)程等待。也就是說(shuō)該進(jìn)程在等待期間未占有任何資源,破壞了保持條件。
優(yōu)點(diǎn): 簡(jiǎn)單、安全。
缺點(diǎn):
①資源被嚴(yán)重浪費(fèi)。進(jìn)程在一開(kāi)始時(shí)就一次性占用整個(gè)運(yùn)行過(guò)程中所需要的資源,其中有些資源可能僅在運(yùn)行快結(jié)束時(shí)才使用,而這個(gè)進(jìn)程卻在整個(gè)運(yùn)行期間都在占用。
②進(jìn)程經(jīng)常會(huì)發(fā)生饑餓現(xiàn)象。因?yàn)閮H當(dāng)進(jìn)程在獲得了其所需的全部資源后才能開(kāi)始運(yùn)行,這樣就可能由于個(gè)別資源長(zhǎng)期被其他進(jìn)程占用,而導(dǎo)致等待該資源的進(jìn)程遲遲不能開(kāi)始運(yùn)行。
(2)允許一個(gè)進(jìn)程只獲得運(yùn)行初期所需要的資源后便開(kāi)始運(yùn)行,進(jìn)程運(yùn)行過(guò)程中再逐步釋放已分配給自己的、且已用完的全部資源,然后再請(qǐng)求新的所需資源。
這個(gè)方法比第一種方法好。因?yàn)檫@個(gè)主要點(diǎn)在于申請(qǐng)其他資源時(shí),首先將自己已經(jīng)用完的資源給釋放掉。但是這個(gè)還有一點(diǎn)就是,沒(méi)有提及自己占用但是沒(méi)有使用完的資源。自己占用但是還沒(méi)用完的資源不釋放的話,仍然有可能造成死鎖。這個(gè)可以用下面的“破壞不可搶占條件”解決。
2.破環(huán)“不可搶占”條件
當(dāng)一個(gè)已經(jīng)保持了某些不可被搶占資源的進(jìn)程,提出新的資源請(qǐng)求而不能得到滿足時(shí),它必須釋放已經(jīng)保持的所有資源。等以后需要時(shí)再重新申請(qǐng)。這意味著進(jìn)程所占有的資源會(huì)被暫時(shí)的釋放或者被搶占。從而破壞不可搶占條件。
缺點(diǎn):方法實(shí)現(xiàn)復(fù)雜,代價(jià)大。因?yàn)橐粋€(gè)資源的釋放可能意味著之前利用該資源做的事情可能會(huì)失效,后面需要重新做。
3.破壞“循環(huán)等待”條件
對(duì)系統(tǒng)所有資源類型進(jìn)行線性排序,并且賦予不同的序號(hào)。即規(guī)定程序必須按照一定的順序來(lái)請(qǐng)求資源。假設(shè)給每個(gè)資源設(shè)定一個(gè)序號(hào),規(guī)定每個(gè)進(jìn)程必須按照序號(hào)遞增的順序來(lái)請(qǐng)求資源,假設(shè)進(jìn)程a現(xiàn)在擁有序號(hào)3的資源,那么該進(jìn)程可以請(qǐng)求序號(hào)在3以后的資源,如果需要多個(gè)同類資源單元,則必須一起請(qǐng)求。如果該進(jìn)程想請(qǐng)求一個(gè)低序號(hào)的資源,必須先釋放所有具有相同或者更高序號(hào)的資源后,才能申請(qǐng)低序號(hào)的資源。
所以重點(diǎn)都在如何確定資源的序號(hào)。一般都是根據(jù)進(jìn)程需要的資源的先后順序來(lái)確定資源的序號(hào)。
總結(jié)
以上是生活随笔為你收集整理的计算机操作系统——死锁的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++——互斥量
- 下一篇: C++——异步操作(std::futur