操作系統(tǒng)為什么會出現(xiàn)死鎖
操作系統(tǒng)中死鎖很可能會導(dǎo)致進程堵塞,甚至電腦死機出現(xiàn),產(chǎn)生的原因一般有多種,那有沒有什么解決方法呢。具體是哪幾種呢?下面由學習啦小編為大家整理了操作系統(tǒng)的死鎖的相關(guān)知識,希望對大家有幫助!
一、操作系統(tǒng)死鎖的概念
死鎖是指多個進程在運行過程中因爭奪資源造成的一種僵局。若無外力作用,它們都將無法推進下去。此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。
二、操作系統(tǒng)死鎖產(chǎn)生的原因
原因1:進程推進順序不當引起死鎖
由于進程在運行中具有異步性特征,這可能使P1和P2兩個進程按下述兩種順序向前推進。
當進程P1和P2并發(fā)執(zhí)行時,如果按照下述順序推進:
P1:Request(R1);
P1:Request(R2);
P1: Relese(R1);
P1: Relese(R2);
P2:Request(R2);
P2:Request(R1);
P2: Relese(R2);
P2: Relese(R1);
這兩個進程便可順利完成,這種不會引起進程死鎖的推進順序是合法的。
但若P1保持了資源R1,P2保持了資源R2,系統(tǒng)處于不安全狀態(tài),因為這兩個進程再向前推進,便可能發(fā)生死鎖。
原因2:競爭資源引起進程死鎖
a.競爭不可剝奪資源
在系統(tǒng)中所配置的不可剝奪資源,由于它們的數(shù)量不能滿足諸進程運行的需要,會使進程在運行過程中,因爭奪這些資源而陷于僵局。例如,系統(tǒng)中只有一臺打印機R1和一臺磁帶機R2,可供進程P1和P2共享。假定PI已占用了打印機R1,P2已占用了磁帶機R2,若P2繼續(xù)要求打印機R1,P2將阻塞;P1若又要求磁帶機,P1也將阻塞。于是,在P1和P2之間就形成了僵局,兩個進程都在等待對方釋放自己所需要的資源,但是它們又都因不能繼續(xù)獲得自己所需要的資源而不能繼續(xù)推進,從而也不能釋放自己所占有的資源,以致進入死鎖狀態(tài)。
b.競爭臨時資源
上面所說的打印機資源屬于可順序重復(fù)使用型資源,稱為永久資源。還有一種所謂的臨時資源,這是指由一個進程產(chǎn)生,被另一個進程使用,短時間后便無用的資源,故也稱為消耗性資源,如硬件中斷、信號、消息、緩沖區(qū)內(nèi)的消息等,它也可能引起死鎖。例如,SI,S2,S3是臨時性資源,進程P1產(chǎn)生消息S1,又要求從P3接收消息S3;進程P3產(chǎn)生消息S3,又要求從進程P2處接收消息S2;進程P2產(chǎn)生消息S2,又要求從P1處接收產(chǎn)生的消息S1。如果消息通信按如下順序進行:
P1: ···Relese(S1);Request(S3); ···//P1先Relese(S1),在Request(S3)時阻塞
P2: ···Relese(S2);Request(S1); ···//P2順利執(zhí)行
P3: ···Relese(S3);Request(S2); ···//P3順利執(zhí)行,P3執(zhí)行之后P1被喚起就緒-執(zhí)行
并不可能發(fā)生死鎖。但若改成下述的運行順序:
P1: ···Request(S3);Relese(S1);···//P1在Request(S3)時發(fā)生阻塞,不執(zhí)行Relese(S1)
P2: ···Request(S1);Relese(S2); ···//P2在Request(S1)時發(fā)生阻塞,不執(zhí)行Relese(S2)
P3: ···Request(S2);Relese(S3); ···//同上。故發(fā)生死鎖
三、操作系統(tǒng)死鎖解決方法
(1) 使用協(xié)議以預(yù)防或避免死鎖,確保系統(tǒng)不會進入死鎖狀態(tài);
(2) 系統(tǒng)可進入死鎖狀態(tài),但可檢測死鎖狀態(tài),然后進行恢復(fù);
(3) 忽視該問題,而認為死鎖不可能在系統(tǒng)內(nèi)發(fā)生。 ——即應(yīng)用程序開發(fā)人員來處理死鎖問題