科普系統(tǒng)進(jìn)程死鎖產(chǎn)生的原因
今天來(lái)聊聊一篇關(guān)于系統(tǒng)進(jìn)程死鎖產(chǎn)生的原因的文章,現(xiàn)在就為大家來(lái)簡(jiǎn)單介紹下系統(tǒng)進(jìn)程死鎖產(chǎn)生的原因,希望對(duì)各位小伙伴們有所幫助。
1.有限資源的競(jìng)爭(zhēng)引起進(jìn)程死鎖
當(dāng)系統(tǒng)中為多個(gè)進(jìn)程所共享的資源不能同?悸?闥?塹男棖笫?引起它們對(duì)資源的競(jìng)爭(zhēng)而產(chǎn)生死鎖。在通常情況下,系統(tǒng)中的資源分為可剝奪、非剝奪和臨時(shí)性資源,不同類型的資源在發(fā)生死鎖時(shí)的處理方式不同。
(1)可剝奪資源如CPU和主存等,在系統(tǒng)中優(yōu)先權(quán)高的進(jìn)程可剝奪優(yōu)先權(quán)低的進(jìn)程對(duì)這些資源的占用。
(2)非剝奪資源如打印機(jī)、讀卡機(jī)和磁帶機(jī)等是屬于?妓承蛑馗詞褂玫淖試礎(chǔ)U飫嘧試吹奶氐閌牽?畢低嘲涯匙試捶峙涓?辰?毯螅?荒茉僨啃惺棧兀?荒茉誚?逃猛旰笞遠(yuǎn)?頭擰M?所示是多個(gè)進(jìn)程因爭(zhēng)奪非剝奪資源產(chǎn)生死鎖的典型例子。具體地說(shuō),如果有一組進(jìn)程P1,P2,...,Pn,其中P1,P2,...,Pn分?e占有資源R1,R2,...,Rn,P1同時(shí)又申請(qǐng)資源R2,P2同時(shí)又申請(qǐng)資源R3,…,Pn-1同時(shí)又申請(qǐng)Rn,Pn占有資源Rn同時(shí)再申請(qǐng)資源R1。此時(shí),這組進(jìn)程都因資源得不到滿足而進(jìn)人了互相等待的阻塞狀態(tài),永遠(yuǎn)也不可能前進(jìn)并到達(dá)終點(diǎn),這時(shí)就說(shuō)系統(tǒng)中出現(xiàn)了死鎖現(xiàn)象,P1,P2,...,Pn這組進(jìn)程處于死鎖狀態(tài)。
(3)臨時(shí)性資源是指由進(jìn)程產(chǎn)生、使用后無(wú)用的資源。如進(jìn)程通信時(shí)使用的信件,如果對(duì)信件的發(fā)送和接收不加限制的話,則可能引起死鎖。如圖2所示,S1、S2和S3是臨時(shí)性資源,分別由進(jìn)程P1、P2和P3產(chǎn)生,進(jìn)程之間的通信情況是:P1要求從P3接收信件,P3要求從P2接收信件,P2要求從P1接收信件。而實(shí)際的操作過程是:進(jìn)程P1等待進(jìn)程P3的信件S3來(lái)到后再向進(jìn)程P2發(fā)送信件S1,P2又要等待P1的信件S1來(lái)到后再向P3發(fā)送信件S2,而P3也要等待P2的信件S2來(lái)到后才能發(fā)出信件S3。在這種情況下就形成了循環(huán)等待,發(fā)生死鎖。
由此可見,多個(gè)進(jìn)程競(jìng)爭(zhēng)使用資源,而系統(tǒng)提供的資源數(shù)不能完全滿足進(jìn)程的需求,所以資源不足是引起死鎖的主要原因。但需要注意的是,并不是多個(gè)進(jìn)程要求使用多個(gè)資源就一定會(huì)產(chǎn)生死鎖,上例還表明,進(jìn)程在運(yùn)行中對(duì)資源要求在時(shí)間上的沖突也是產(chǎn)生死鎖的一個(gè)原因。
2.進(jìn)程推進(jìn)的順序不當(dāng)引起死鎖
由于進(jìn)程的調(diào)度是獨(dú)立的,因此它們對(duì)資源的請(qǐng)求和釋放操作也存在多種序列,其中有些序列是不安全的,如上面提到的對(duì)臨時(shí)性資源的占用情況;而有些序列是安全的,例如進(jìn)程P1、P2都需要資源R1、R2,如果兩個(gè)進(jìn)程的推進(jìn)順序是,進(jìn)程P1占有資源R1,申請(qǐng)R2時(shí),進(jìn)程P2還未占有R2,這樣就不會(huì)發(fā)生死鎖。這說(shuō)明死鎖是一種與時(shí)間有關(guān)的錯(cuò)誤,它和各進(jìn)程推進(jìn)的速度以及對(duì)資源清求的順序有關(guān)。
相信通過系統(tǒng)進(jìn)程死鎖產(chǎn)生的原因這篇文章能幫到你,在和好朋友分享的時(shí)候,也歡迎感興趣小伙伴們一起來(lái)探討。
標(biāo)簽: 系統(tǒng)進(jìn)程死鎖產(chǎn)生的原因