韓丹 高占江
摘 要:計(jì)算機(jī)在運(yùn)行過程中,操作系統(tǒng)經(jīng)常會(huì)出現(xiàn)故障,死鎖問題是其中最為重要的一種。特別是在計(jì)算機(jī)資源使用最優(yōu)基礎(chǔ)下,死鎖問題的解決已經(jīng)迫在眉睫。計(jì)算機(jī)操作系統(tǒng)中的死鎖問題并不是憑空產(chǎn)生的,需要一些必要的條件,這些條件則是解決計(jì)算機(jī)死鎖問題的突破口。
關(guān)鍵詞:計(jì)算機(jī);死鎖問題;操作系統(tǒng)
死鎖就是一個(gè)不通狀態(tài),在計(jì)算機(jī)操作系統(tǒng)中發(fā)生死鎖情況,表示的是在多個(gè)進(jìn)程集合中,多個(gè)進(jìn)程都在等待事件的發(fā)生,而被等待發(fā)生的事件又在等待其它事件的發(fā)生,這樣進(jìn)程之間始終處于等待狀態(tài),無(wú)法順利執(zhí)行。這種不同的狀態(tài)會(huì)浪費(fèi)大量的資源,需要的資源得到不到應(yīng)用,不需要占用的資源無(wú)法被釋放,這將會(huì)對(duì)操作系統(tǒng)的運(yùn)行造成不良影響。
一、死鎖發(fā)生的原因
對(duì)死鎖的發(fā)生原因進(jìn)行總結(jié),可以總結(jié)為以下兩點(diǎn):1、計(jì)算機(jī)操作系統(tǒng)中的有限資源受到競(jìng)爭(zhēng)。2、進(jìn)程的推進(jìn)順序。
計(jì)算機(jī)操作系統(tǒng)供多個(gè)進(jìn)程并發(fā)執(zhí)行的共享資源無(wú)法滿足各個(gè)進(jìn)程在執(zhí)行時(shí)的具體需求,如果執(zhí)行的進(jìn)程的推進(jìn)非法,進(jìn)程在執(zhí)行過程中因?yàn)闀?huì)對(duì)資源進(jìn)行爭(zhēng)奪,最終將會(huì)導(dǎo)致系統(tǒng)發(fā)生死鎖。需要注意的是進(jìn)程通信以及其它的一些原因也有可能會(huì)導(dǎo)致進(jìn)程死鎖情況的發(fā)生,通過分析總結(jié),通常引起進(jìn)程死鎖的原因有以下幾點(diǎn):
1、資源競(jìng)爭(zhēng)引起的死鎖
因?yàn)楦?jìng)爭(zhēng)資源競(jìng)爭(zhēng)而引起的死鎖在計(jì)算機(jī)系統(tǒng)中會(huì)經(jīng)常發(fā)生,主要滿足死鎖的所有條件死鎖才會(huì)發(fā)生,缺少任意一個(gè)死鎖條件,死鎖都不會(huì)發(fā)生時(shí)。因此,也只有進(jìn)程在對(duì)死鎖進(jìn)行爭(zhēng)奪時(shí),死鎖現(xiàn)象才有可能發(fā)生。死鎖的發(fā)生還取決與進(jìn)程的推進(jìn)速度和資源的請(qǐng)求順序。
2、進(jìn)程通訊引起的死鎖
進(jìn)程相會(huì)等待對(duì)方所發(fā)來(lái)的消息,結(jié)果導(dǎo)致進(jìn)程無(wú)法前進(jìn),從而將會(huì)產(chǎn)生死鎖。例如,進(jìn)程A等待進(jìn)程B發(fā)來(lái)消息,而此時(shí)進(jìn)程B又在等待進(jìn)程C發(fā)來(lái)消息,進(jìn)程C又等待進(jìn)程A發(fā)來(lái)消息,通過分析可以看出進(jìn)程A、B、C并沒有對(duì)同一資展開競(jìng)爭(zhēng),而是由于等待對(duì)方所資源而進(jìn)入了死鎖狀態(tài)狀態(tài),此種類型的死鎖在以消息為執(zhí)行基礎(chǔ)的系統(tǒng)中比較常見。
3、其余類型的死鎖
在設(shè)計(jì)程序過程中,如果在設(shè)計(jì)上存在不合理情況,也會(huì)引起廣義死鎖。廣義死鎖比較常見的類型就是在程序應(yīng)用過程中存在數(shù)據(jù)結(jié)構(gòu)、變量等區(qū)域。在使用并發(fā)進(jìn)程時(shí),如果設(shè)計(jì)的程序存在不合理的情況,往往會(huì)錯(cuò)誤的任務(wù)資源被其它程序所占用,彼此都在等待對(duì)方使用后,再對(duì)資源加以應(yīng)用,結(jié)果發(fā)生死鎖。
二、計(jì)算機(jī)操作系統(tǒng)死鎖問題的解決
人們已經(jīng)意思到了操作系統(tǒng)中存在死鎖問題的嚴(yán)重性,因此要加強(qiáng)對(duì)其的分析,需要在充分了解其形成機(jī)制和具體內(nèi)涵后,對(duì)其構(gòu)成的因素進(jìn)行抑制和破壞,干擾死鎖的形成過程中,降低死鎖的發(fā)生幾率。通過對(duì)計(jì)算機(jī)操作系統(tǒng)和死鎖進(jìn)行詳細(xì)分析,進(jìn)行總結(jié),常用的解決死鎖的策略主要有以下幾方面。
(一)預(yù)防死鎖的發(fā)生
對(duì)死鎖的問題的處理應(yīng)當(dāng)以預(yù)防為主,通過合理的預(yù)防,避免死鎖現(xiàn)象的發(fā)生,從避免了不要的損失。通常來(lái)說(shuō),對(duì)死鎖的預(yù)防可以從以下幾個(gè)方面入手: 1、打破“不剝奪”,請(qǐng)求資源未得到滿足進(jìn)程要釋放自身所占有的資源,該方法在計(jì)算機(jī)操作系統(tǒng)中實(shí)現(xiàn)起來(lái)比較復(fù)雜,因此通常在主存和CPU中使用,該方法的主要缺點(diǎn)為需要對(duì)資源進(jìn)行反復(fù)的申請(qǐng)與釋放,整個(gè)系統(tǒng)的吞吐量將會(huì)降低。
2、打破“環(huán)路等待”,系統(tǒng)中的資源都擁有自己特定的編號(hào),并且每個(gè)進(jìn)程在運(yùn)行過程中對(duì)資源的請(qǐng)求都需要嚴(yán)格依據(jù)順序進(jìn)行。受動(dòng)態(tài)分配資源影響,該分配方式的資源使用率更高。其缺主要為:(1)進(jìn)程需要的資源如果與資源編號(hào)的順序不符,資源的利用率將會(huì)下降。(2)資源序號(hào)不宜頻繁發(fā)生變化。
3、打破“部分分配”,對(duì)經(jīng)常所要求的資源通過一次性分配完成,該方式的主要缺點(diǎn)被進(jìn)程所占用的資源的使用率很低,資源浪費(fèi)情況較為嚴(yán)重。
(二)死鎖的檢測(cè)與恢復(fù)
死鎖的檢測(cè)與恢復(fù)與預(yù)防死鎖相比更加主動(dòng)積極。通過上文的分析,可以發(fā)現(xiàn),死鎖的預(yù)防主要是采取一系列的限制策略,避免計(jì)算機(jī)操作系統(tǒng)在運(yùn)行過程中出現(xiàn)死鎖,通過限制死鎖發(fā)生所必須要存在的條件中的任意一個(gè)條件,避免死鎖的發(fā)生。
1、死鎖檢測(cè)
在計(jì)算機(jī)操作系統(tǒng)運(yùn)行過程中,只要存在可能,就向?qū)①Y源分配給申請(qǐng)資源的進(jìn)程。操作系統(tǒng)在運(yùn)行過程中會(huì)周期性的對(duì)進(jìn)程的運(yùn)行情況檢測(cè),查看是否存在“環(huán)鏈等待”情況,如果發(fā)現(xiàn)該情況也就說(shuō)明系統(tǒng)在運(yùn)行過程中出現(xiàn)了死鎖現(xiàn)象,則需要采取相應(yīng)的措施消除死鎖。
2、死鎖恢復(fù)
當(dāng)死鎖發(fā)生并且已經(jīng)被檢測(cè)到時(shí),可以采取以下措施接觸死鎖:(1)重新啟動(dòng),將所有死鎖進(jìn)程全部撤銷,不論是進(jìn)程是否參與了死鎖,這是解決死鎖最常用的一種方式。(2)終止進(jìn)程,通過對(duì)死鎖進(jìn)程的終止,將進(jìn)程所占用的資源全部收回,在具體撤銷過程中,可以分為逐步撤銷死鎖進(jìn)程和一次性撤銷死鎖進(jìn)程兩種不同的方式進(jìn)行。(3)進(jìn)程回退,回退進(jìn)程至前一個(gè)檢查點(diǎn),然后再一次啟動(dòng)進(jìn)程,此時(shí)原來(lái)的死鎖現(xiàn)象有可能會(huì)再一次發(fā)生,但是因?yàn)椴l(fā)處理通常存在不確定性,因此死鎖現(xiàn)象通常不會(huì)再次發(fā)生。(4)剝奪資源,針對(duì)死鎖進(jìn)程的部分資源和全部資源被一次性或多次額剝奪直到解決死鎖為止,在具體實(shí)施剝奪資源過程中,剝奪資源的方式和資源的特性有著一定關(guān)系。此外,在資源剝奪過程中還有可能會(huì)受到人工干預(yù)。
以上死鎖的恢復(fù)方法都會(huì)損失進(jìn)程已經(jīng)完成的開銷,因此撤銷進(jìn)程的次序上要考慮成本。因此,在程序的具體選擇過程中,應(yīng)當(dāng)依據(jù)下列優(yōu)先原則進(jìn)行:①處理時(shí)間最少的進(jìn)程。②處理運(yùn)輸工作量少的進(jìn)程。③剩余時(shí)間最長(zhǎng)的進(jìn)程。④獲取分配資源最少的進(jìn)程。⑤優(yōu)先級(jí)最先的進(jìn)程。依據(jù)上述有限有原則,對(duì)死鎖進(jìn)行恢復(fù),可以使操作系統(tǒng)運(yùn)行的經(jīng)濟(jì)性達(dá)到最優(yōu),符合人們的要求。
結(jié)束語(yǔ):
計(jì)算機(jī)操作系統(tǒng)在運(yùn)行過程中出現(xiàn)死鎖是避免不了的,因此應(yīng)當(dāng)采取合理的方式對(duì)死鎖進(jìn)行處理,使計(jì)算機(jī)中的資源的利用率能夠得到最大化。通過分析,不難發(fā)現(xiàn)計(jì)算機(jī)操作系統(tǒng)在運(yùn)行過程中出現(xiàn)死鎖現(xiàn)象需要滿足一定的條件,在對(duì)對(duì)死鎖問題分析與處理時(shí),需要從這些條件入手,更好的解決死鎖問題。
參考文獻(xiàn):
[1]張海鵬,李曦. 操作系統(tǒng)中的死鎖檢測(cè)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013,10:14-18.
[2]張君.操作系統(tǒng)中進(jìn)程死鎖的探討[J].電腦知識(shí)與技術(shù),2012,10:201-203.
[3]于平華,馬連喜,李欣,李曉麗. 計(jì)算機(jī)操作系統(tǒng)的安全問題與防范對(duì)策[J]. 計(jì)算機(jī)光盤軟件與應(yīng)用,2014,17:165-167.