所謂死鎖,是指多個(gè)進(jìn)程在運(yùn)行過(guò)程中因爭(zhēng)奪資源而造成的一種僵局,當(dāng)進(jìn)程處于這種僵持狀態(tài)時(shí),若無(wú)外力作用,它們都將無(wú)法再向前推進(jìn)。
系統(tǒng)中的資源可以分為兩類:可剝奪資源,是指某進(jìn)程在獲得這類資源后,該資源可以再被其他進(jìn)程或系統(tǒng)剝奪,CPU和主存均屬于可剝奪性資源;
不可剝奪資源,當(dāng)系統(tǒng)把這類資源分配給某進(jìn)程后,再不能強(qiáng)行收回,只能在進(jìn)程用完后自行釋放,如磁帶機(jī)、打印機(jī)等。
產(chǎn)生死鎖的原因:(1)競(jìng)爭(zhēng)資源產(chǎn)生死鎖中的競(jìng)爭(zhēng)資源之一指的是競(jìng)爭(zhēng)不可剝奪資源(例如:系統(tǒng)中只有一臺(tái)打印機(jī),可供進(jìn)程P1使用,假定P1已占用了打印機(jī),若P2繼續(xù)要求打印機(jī)打印將阻塞)產(chǎn)生死鎖中的競(jìng)爭(zhēng)資源另外一種資源指的是競(jìng)爭(zhēng)臨時(shí)資源(臨時(shí)資源包括硬件中斷、信號(hào)、消息、緩沖區(qū)內(nèi)的消息等),通常消息通信順序進(jìn)行不當(dāng),則會(huì)產(chǎn)生死鎖(2)進(jìn)程間推進(jìn)順序非法若P1保持了資源R1,P2保持了資源R2,系統(tǒng)處于不安全狀態(tài),因?yàn)檫@兩個(gè)進(jìn)程再向前推進(jìn),便可能發(fā)生死鎖。例如,當(dāng)P1運(yùn)行到P1:Request(R2)時(shí),將因R2已被P2占用而阻塞;當(dāng)P2運(yùn)行到P2:Request(R1)時(shí),也將因R1已被P1占用而阻塞,于是發(fā)生進(jìn)程死鎖產(chǎn)生死鎖的必要條件:互斥條件:進(jìn)程要求對(duì)所分配的資源進(jìn)行排它性控制,即在一段時(shí)間內(nèi)某資源僅為一進(jìn)程所占用。
請(qǐng)求和保持條件:當(dāng)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放。
不剝奪條件:進(jìn)程已獲得的資源在未使用完之前,不能剝奪,只能在使用完時(shí)由自己釋放。
環(huán)路等待條件:在發(fā)生死鎖時(shí),必然存在一個(gè)進(jìn)程——資源的環(huán)形鏈。
預(yù)防死鎖的方法:資源一次性分配:一次性分配所有資源,這樣就不會(huì)再有請(qǐng)求了(破壞請(qǐng)求條件)
只要有一個(gè)資源得不到分配,也不給這個(gè)進(jìn)程分配其他的資源(破壞請(qǐng)保持條件)
可剝奪資源:即當(dāng)某進(jìn)程獲得了部分資源,但得不到其它資源,則釋放已占有的資源(破壞不可剝奪條件)
資源有序分配法:系統(tǒng)給每類資源賦予一個(gè)編號(hào),每一個(gè)進(jìn)程按編號(hào)遞增的順序請(qǐng)求資源,釋放則相反(破壞環(huán)路等待條件)