操作系統(tǒng)死鎖產(chǎn)生原因
操作系統(tǒng)死鎖產(chǎn)生原因
操作系統(tǒng)中死鎖產(chǎn)生的原因一般有多種。具體是哪幾種呢?下面由學(xué)習(xí)啦小編為大家整理了操作系統(tǒng)的死鎖的相關(guān)知識,希望對大家有幫助!
一、操作系統(tǒng)死鎖的概念
死鎖是指多個進程在運行過程中因爭奪資源造成的一種僵局。若無外力作用,它們都將無法推進下去。此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。
二、操作系統(tǒng)死鎖產(chǎn)生的原因
原因1:競爭資源引起進程死鎖
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ā)生死鎖
原因2:進程推進順序不當(dāng)引起死鎖
由于進程在運行中具有異步性特征,這可能使P1和P2兩個進程按下述兩種順序向前推進。
當(dāng)進程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ā)生死鎖。
參考資料:可剝奪資源和不可剝奪資源
系統(tǒng)中的資源可以分為兩類,一類是可剝奪資源,是指某進程在獲得這類資源后,該資源可以再被其他進程或系統(tǒng)剝奪。例如,優(yōu)先權(quán)高的進程可以剝奪優(yōu)先權(quán)低的進程的處理機。又如,內(nèi)存區(qū)可由存儲器管理程序,把一個進程從一個存儲區(qū)移到另一個存儲區(qū),此即剝奪了該進程原來占有的存儲區(qū),甚至可將一進程從內(nèi)存調(diào)到外存上,可見, CPU和主存均屬于可剝奪性資源。另一類資源是不可剝奪資源,當(dāng)系統(tǒng)把這類資源分配給某進程后,再不能強行收回,只能在進程用完后自行釋放,如磁帶機、打印機等。