為大家收集整理了《計算機軟考軟件設(shè)計師考試重點難點分析》供大家參考,希望對大家有所幫助!??!
死鎖(Deadlock)是指多個進(jìn)程在運行的過程中因爭奪資源而造成的一種僵局。當(dāng)進(jìn)程處于這種僵持狀態(tài)時,若無外力作用,它們都將無法再向前推進(jìn)。在軟件設(shè)計師的考試當(dāng)中,這個知識點的考查是以選擇題的形式出現(xiàn)的,考點主要有:死鎖的必要條件、解決死鎖的方法,最難高難度會考到“銀行家算法”。本文將介紹死鎖的相關(guān)知識,但不會具體講解“銀行家算法”,該算法將在本系列的下一篇文章中詳細(xì)說明。
1、死鎖發(fā)生的必要條件
死鎖的發(fā)生必須具備四個必要條件,這四個條件相互聯(lián)系、缺一不可。
轉(zhuǎn)播到騰訊微博
(1)互斥條件:指進(jìn)程對所分配到的資源進(jìn)行排他性使用,即在一段時間內(nèi)某資源只由一個進(jìn)程占用。如果此時還有其他進(jìn)程請求該資源,則請求者只能等待,直至占有該資源的進(jìn)程用完并釋放。
(2)請求和保持條件:指進(jìn)程已經(jīng)保持了至少一個資源,但又提出了新的資源請求,而該資源又已被其他進(jìn)程占有,此時請求進(jìn)程阻塞,但又對自己已獲得的其他資源保持不放。
(3)不剝奪條件:指進(jìn)程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
(4)環(huán)路等待條件:指在發(fā)生死鎖時,必然存在一個進(jìn)程--資源的環(huán)形鏈,即進(jìn)程集合{P0,P1,P2…Pn}中的P0正在等待一個P1占用的資源,P1正在等待P2占用的資源,……Pn正在等待已被P0占用的資源。
2、解決死鎖的策略
解決死鎖的策略通常有三種:死鎖預(yù)防、死鎖避免以及死鎖解除。前兩種方法是“事前措施”,而死鎖解除是“事后解決方案”。
(1)死鎖預(yù)防:“解鈴還需系鈴人”,隨便破壞導(dǎo)致死鎖這任意一個必要條件就可以預(yù)防死鎖。例如,要求用戶申請資源時一起申請所需要的全部資源,這就破壞了保持和等待條件;將資源分層,得到上一層資源后,才能夠申請下一層資源,它破壞了環(huán)路等待條件。預(yù)防通常會降低系統(tǒng)的效率。
(2)死鎖避免:避免是指進(jìn)程在每次申請資源時判斷這些操作是否安全,典型算法是“銀行家算法”(本系列文章的下一篇將詳細(xì)講解該問題)。但這種算法會增加系統(tǒng)的開銷。
(3)死鎖解除:該方法的思路很簡單,通過死鎖檢測判斷系統(tǒng)是否處于死鎖狀態(tài),若死鎖,則由系統(tǒng)強制剝奪部分進(jìn)程的資源,將資源強行分配給別的進(jìn)程。
3、判斷系統(tǒng)是否可能進(jìn)入死鎖狀態(tài)
從上面的死鎖解決方案來看,無論哪一種方式都不可避免的要增加系統(tǒng)的負(fù)擔(dān)。而同時一個系統(tǒng)是否有可進(jìn)入死鎖狀態(tài)受系統(tǒng)資源數(shù)量,需要使用該資源的進(jìn)程數(shù)量等因素影響。若系統(tǒng)本不可能引起死鎖,而我們采用了死鎖解決方案,是很不合理的。所以,考試中??嫉竭@樣的題型:給出系統(tǒng)的資源數(shù),以及需要使用該資源的進(jìn)程數(shù)量等參數(shù),讓考生判斷系統(tǒng)有無可能產(chǎn)生死鎖。下面我們以例題的方式來說明如何解決這類問題。
例題1:
系統(tǒng)有3個進(jìn)程:A、B、C。這3個進(jìn)程都需要5個系統(tǒng)資源。如果系統(tǒng)有多少個資源,則不可能發(fā)生死鎖。
解答:
在分析這個問題時,我們可以取一些簡單的數(shù)據(jù)代入試題進(jìn)行驗證、分析,以得到相應(yīng)的規(guī)律。
如:
(1)當(dāng)系統(tǒng)資源數(shù)量為9時,若給A與B分別分配了4個資源,C分配了1個資源,則系統(tǒng)中的每個進(jìn)程都存在資源不足的情況,而都不放手自己擁有的資源。不能正常運行完畢,發(fā)生死鎖。
(2)當(dāng)系統(tǒng)資源數(shù)量為12時,若給A、B、C各分配4個資源,則死鎖。
(3)當(dāng)系統(tǒng)資源數(shù)量為13時,無論如何分配,總有至少1個進(jìn)程能得到5個資源,得到5個資源的進(jìn)程可以正常運行完畢,而后將自己占用的資源分配給其它進(jìn)程,所以這樣能使所有進(jìn)程運行完畢。
從上面的嘗試,我們可以總結(jié)出一個規(guī)律:先給所有進(jìn)程分配他們所需要的資源數(shù)減1個資源,然后系統(tǒng)如果能再剩余1個資源,則系統(tǒng)不會發(fā)生死鎖。這樣解答本題變得非常容易。
(5-1)*3+1=13。
例題2:
一臺計算機有10臺磁帶機被m個進(jìn)程競爭,每個進(jìn)程最多需要三臺磁帶機,那么m至多為 時,系統(tǒng)沒有死鎖的危險。
A.3 B.4 C.5 D.6
解答
首先從m=6開始考察,首先每個進(jìn)程分配1臺,剩下的4臺只能分配給4個進(jìn)程,還有2個進(jìn)程沒有分配,如果已經(jīng)分配了2臺的4個進(jìn)程需要3臺的話,則系統(tǒng)就會死鎖。同樣,如果m=5,也會發(fā)生這種情況。當(dāng)m=4時,每個進(jìn)程可以分得2臺,還有2個進(jìn)程可分得3臺,則可正常運行,運行完畢后可釋放資源,從而不會死鎖。在解這道題時有些學(xué)員提出“如果按照答案m=4,則這4個進(jìn)程都是需要3臺磁帶機的話,共需要12臺磁帶機,這樣還不會死鎖?”。這種想法是錯誤的,因為并不是同時把所有進(jìn)程都分配給足夠的資源才能完成這些進(jìn)程,可以是一個進(jìn)程先執(zhí)行完,釋放完資源再執(zhí)行另一個進(jìn)程。
例如:4個進(jìn)程中,每個進(jìn)程分配2臺磁帶機,用去了8臺。剩下2臺,仍然可以滿足兩個進(jìn)程,直到他們完成,釋放他們暫用的磁帶機
死鎖(Deadlock)是指多個進(jìn)程在運行的過程中因爭奪資源而造成的一種僵局。當(dāng)進(jìn)程處于這種僵持狀態(tài)時,若無外力作用,它們都將無法再向前推進(jìn)。在軟件設(shè)計師的考試當(dāng)中,這個知識點的考查是以選擇題的形式出現(xiàn)的,考點主要有:死鎖的必要條件、解決死鎖的方法,最難高難度會考到“銀行家算法”。本文將介紹死鎖的相關(guān)知識,但不會具體講解“銀行家算法”,該算法將在本系列的下一篇文章中詳細(xì)說明。
1、死鎖發(fā)生的必要條件
死鎖的發(fā)生必須具備四個必要條件,這四個條件相互聯(lián)系、缺一不可。
轉(zhuǎn)播到騰訊微博
(1)互斥條件:指進(jìn)程對所分配到的資源進(jìn)行排他性使用,即在一段時間內(nèi)某資源只由一個進(jìn)程占用。如果此時還有其他進(jìn)程請求該資源,則請求者只能等待,直至占有該資源的進(jìn)程用完并釋放。
(2)請求和保持條件:指進(jìn)程已經(jīng)保持了至少一個資源,但又提出了新的資源請求,而該資源又已被其他進(jìn)程占有,此時請求進(jìn)程阻塞,但又對自己已獲得的其他資源保持不放。
(3)不剝奪條件:指進(jìn)程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
(4)環(huán)路等待條件:指在發(fā)生死鎖時,必然存在一個進(jìn)程--資源的環(huán)形鏈,即進(jìn)程集合{P0,P1,P2…Pn}中的P0正在等待一個P1占用的資源,P1正在等待P2占用的資源,……Pn正在等待已被P0占用的資源。
2、解決死鎖的策略
解決死鎖的策略通常有三種:死鎖預(yù)防、死鎖避免以及死鎖解除。前兩種方法是“事前措施”,而死鎖解除是“事后解決方案”。
(1)死鎖預(yù)防:“解鈴還需系鈴人”,隨便破壞導(dǎo)致死鎖這任意一個必要條件就可以預(yù)防死鎖。例如,要求用戶申請資源時一起申請所需要的全部資源,這就破壞了保持和等待條件;將資源分層,得到上一層資源后,才能夠申請下一層資源,它破壞了環(huán)路等待條件。預(yù)防通常會降低系統(tǒng)的效率。
(2)死鎖避免:避免是指進(jìn)程在每次申請資源時判斷這些操作是否安全,典型算法是“銀行家算法”(本系列文章的下一篇將詳細(xì)講解該問題)。但這種算法會增加系統(tǒng)的開銷。
(3)死鎖解除:該方法的思路很簡單,通過死鎖檢測判斷系統(tǒng)是否處于死鎖狀態(tài),若死鎖,則由系統(tǒng)強制剝奪部分進(jìn)程的資源,將資源強行分配給別的進(jìn)程。
3、判斷系統(tǒng)是否可能進(jìn)入死鎖狀態(tài)
從上面的死鎖解決方案來看,無論哪一種方式都不可避免的要增加系統(tǒng)的負(fù)擔(dān)。而同時一個系統(tǒng)是否有可進(jìn)入死鎖狀態(tài)受系統(tǒng)資源數(shù)量,需要使用該資源的進(jìn)程數(shù)量等因素影響。若系統(tǒng)本不可能引起死鎖,而我們采用了死鎖解決方案,是很不合理的。所以,考試中??嫉竭@樣的題型:給出系統(tǒng)的資源數(shù),以及需要使用該資源的進(jìn)程數(shù)量等參數(shù),讓考生判斷系統(tǒng)有無可能產(chǎn)生死鎖。下面我們以例題的方式來說明如何解決這類問題。
例題1:
系統(tǒng)有3個進(jìn)程:A、B、C。這3個進(jìn)程都需要5個系統(tǒng)資源。如果系統(tǒng)有多少個資源,則不可能發(fā)生死鎖。
解答:
在分析這個問題時,我們可以取一些簡單的數(shù)據(jù)代入試題進(jìn)行驗證、分析,以得到相應(yīng)的規(guī)律。
如:
(1)當(dāng)系統(tǒng)資源數(shù)量為9時,若給A與B分別分配了4個資源,C分配了1個資源,則系統(tǒng)中的每個進(jìn)程都存在資源不足的情況,而都不放手自己擁有的資源。不能正常運行完畢,發(fā)生死鎖。
(2)當(dāng)系統(tǒng)資源數(shù)量為12時,若給A、B、C各分配4個資源,則死鎖。
(3)當(dāng)系統(tǒng)資源數(shù)量為13時,無論如何分配,總有至少1個進(jìn)程能得到5個資源,得到5個資源的進(jìn)程可以正常運行完畢,而后將自己占用的資源分配給其它進(jìn)程,所以這樣能使所有進(jìn)程運行完畢。
從上面的嘗試,我們可以總結(jié)出一個規(guī)律:先給所有進(jìn)程分配他們所需要的資源數(shù)減1個資源,然后系統(tǒng)如果能再剩余1個資源,則系統(tǒng)不會發(fā)生死鎖。這樣解答本題變得非常容易。
(5-1)*3+1=13。
例題2:
一臺計算機有10臺磁帶機被m個進(jìn)程競爭,每個進(jìn)程最多需要三臺磁帶機,那么m至多為 時,系統(tǒng)沒有死鎖的危險。
A.3 B.4 C.5 D.6
解答
首先從m=6開始考察,首先每個進(jìn)程分配1臺,剩下的4臺只能分配給4個進(jìn)程,還有2個進(jìn)程沒有分配,如果已經(jīng)分配了2臺的4個進(jìn)程需要3臺的話,則系統(tǒng)就會死鎖。同樣,如果m=5,也會發(fā)生這種情況。當(dāng)m=4時,每個進(jìn)程可以分得2臺,還有2個進(jìn)程可分得3臺,則可正常運行,運行完畢后可釋放資源,從而不會死鎖。在解這道題時有些學(xué)員提出“如果按照答案m=4,則這4個進(jìn)程都是需要3臺磁帶機的話,共需要12臺磁帶機,這樣還不會死鎖?”。這種想法是錯誤的,因為并不是同時把所有進(jìn)程都分配給足夠的資源才能完成這些進(jìn)程,可以是一個進(jìn)程先執(zhí)行完,釋放完資源再執(zhí)行另一個進(jìn)程。
例如:4個進(jìn)程中,每個進(jìn)程分配2臺磁帶機,用去了8臺。剩下2臺,仍然可以滿足兩個進(jìn)程,直到他們完成,釋放他們暫用的磁帶機