操作系統(tǒng)死鎖產(chǎn)生原因
操作系統(tǒng)死鎖產(chǎn)生原因
操作系統(tǒng)中死鎖產(chǎn)生的原因一般有多種。具體是哪幾種呢?下面由學(xué)習(xí)啦小編為大家整理了操作系統(tǒng)的死鎖的相關(guān)知識(shí),希望對(duì)大家有幫助!
一、操作系統(tǒng)死鎖的概念
死鎖是指多個(gè)進(jìn)程在運(yùn)行過程中因爭奪資源造成的一種僵局。若無外力作用,它們都將無法推進(jìn)下去。此時(shí)稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖進(jìn)程。
二、操作系統(tǒng)死鎖產(chǎn)生的原因
原因1:競爭資源引起進(jìn)程死鎖
a.競爭不可剝奪資源
在系統(tǒng)中所配置的不可剝奪資源,由于它們的數(shù)量不能滿足諸進(jìn)程運(yùn)行的需要,會(huì)使進(jìn)程在運(yùn)行過程中,因爭奪這些資源而陷于僵局。例如,系統(tǒng)中只有一臺(tái)打印機(jī)R1和一臺(tái)磁帶機(jī)R2,可供進(jìn)程P1和P2共享。假定PI已占用了打印機(jī)R1,P2已占用了磁帶機(jī)R2,若P2繼續(xù)要求打印機(jī)R1,P2將阻塞;P1若又要求磁帶機(jī),P1也將阻塞。于是,在P1和P2之間就形成了僵局,兩個(gè)進(jìn)程都在等待對(duì)方釋放自己所需要的資源,但是它們又都因不能繼續(xù)獲得自己所需要的資源而不能繼續(xù)推進(jìn),從而也不能釋放自己所占有的資源,以致進(jìn)入死鎖狀態(tài)。
b.競爭臨時(shí)資源
上面所說的打印機(jī)資源屬于可順序重復(fù)使用型資源,稱為永久資源。還有一種所謂的臨時(shí)資源,這是指由一個(gè)進(jìn)程產(chǎn)生,被另一個(gè)進(jìn)程使用,短時(shí)間后便無用的資源,故也稱為消耗性資源,如硬件中斷、信號(hào)、消息、緩沖區(qū)內(nèi)的消息等,它也可能引起死鎖。例如,SI,S2,S3是臨時(shí)性資源,進(jìn)程P1產(chǎn)生消息S1,又要求從P3接收消息S3;進(jìn)程P3產(chǎn)生消息S3,又要求從進(jìn)程P2處接收消息S2;進(jìn)程P2產(chǎn)生消息S2,又要求從P1處接收產(chǎn)生的消息S1。如果消息通信按如下順序進(jìn)行:
P1: ···Relese(S1);Request(S3); ···//P1先Relese(S1),在Request(S3)時(shí)阻塞
P2: ···Relese(S2);Request(S1); ···//P2順利執(zhí)行
P3: ···Relese(S3);Request(S2); ···//P3順利執(zhí)行,P3執(zhí)行之后P1被喚起就緒-執(zhí)行
并不可能發(fā)生死鎖。但若改成下述的運(yùn)行順序:
P1: ···Request(S3);Relese(S1);···//P1在Request(S3)時(shí)發(fā)生阻塞,不執(zhí)行Relese(S1)
P2: ···Request(S1);Relese(S2); ···//P2在Request(S1)時(shí)發(fā)生阻塞,不執(zhí)行Relese(S2)
P3: ···Request(S2);Relese(S3); ···//同上。故發(fā)生死鎖
原因2:進(jìn)程推進(jìn)順序不當(dāng)引起死鎖
由于進(jìn)程在運(yùn)行中具有異步性特征,這可能使P1和P2兩個(gè)進(jìn)程按下述兩種順序向前推進(jìn)。
當(dāng)進(jìn)程P1和P2并發(fā)執(zhí)行時(shí),如果按照下述順序推進(jìn):
P1:Request(R1);
P1:Request(R2);
P1: Relese(R1);
P1: Relese(R2);
P2:Request(R2);
P2:Request(R1);
P2: Relese(R2);
P2: Relese(R1);
這兩個(gè)進(jìn)程便可順利完成,這種不會(huì)引起進(jìn)程死鎖的推進(jìn)順序是合法的。
但若P1保持了資源R1,P2保持了資源R2,系統(tǒng)處于不安全狀態(tài),因?yàn)檫@兩個(gè)進(jìn)程再向前推進(jìn),便可能發(fā)生死鎖。
參考資料:可剝奪資源和不可剝奪資源
系統(tǒng)中的資源可以分為兩類,一類是可剝奪資源,是指某進(jìn)程在獲得這類資源后,該資源可以再被其他進(jìn)程或系統(tǒng)剝奪。例如,優(yōu)先權(quán)高的進(jìn)程可以剝奪優(yōu)先權(quán)低的進(jìn)程的處理機(jī)。又如,內(nèi)存區(qū)可由存儲(chǔ)器管理程序,把一個(gè)進(jìn)程從一個(gè)存儲(chǔ)區(qū)移到另一個(gè)存儲(chǔ)區(qū),此即剝奪了該進(jìn)程原來占有的存儲(chǔ)區(qū),甚至可將一進(jìn)程從內(nèi)存調(diào)到外存上,可見, CPU和主存均屬于可剝奪性資源。另一類資源是不可剝奪資源,當(dāng)系統(tǒng)把這類資源分配給某進(jìn)程后,再不能強(qiáng)行收回,只能在進(jìn)程用完后自行釋放,如磁帶機(jī)、打印機(jī)等。