(数据库系统概论|王珊)第十一章并发控制-第二、三、四节:封锁、封锁协议活锁和死锁
文章目錄
- 一:封鎖
- (1)概念
- (2)類型
- (3)控制方式
- 二:封鎖協(xié)議
- (1)概念
- (2)三級(jí)封鎖協(xié)議
- ①:一級(jí)封鎖協(xié)議
- ②:二級(jí)封鎖協(xié)議
- ③:三級(jí)封鎖協(xié)議
- 三:活鎖和死鎖
- (1)活鎖
- (2)死鎖
- A:概念
- B:死鎖產(chǎn)生的四個(gè)必要條件
- ①:互斥條件
- ②:不可剝奪條件
- ③:持有并等待條件
- ④:循環(huán)等待條件
- C:解決死鎖的方法
- 預(yù)防死鎖
- ①:破壞互斥條件
- ②:破壞不可剝奪條件
- ③:破壞持有并等待條件(對(duì)應(yīng)一次封鎖法)
- ④:破壞循環(huán)等待條件(對(duì)應(yīng)順序封鎖法)
- 死鎖檢測(cè)
- ①:超時(shí)法
- ②:等待圖法(資源分配圖)
- 死鎖解除
一:封鎖
(1)概念
封鎖:封鎖就是事務(wù)TTT在對(duì)某個(gè)數(shù)據(jù)對(duì)象(表、記錄等)操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖;加鎖后事務(wù)TTT對(duì)該數(shù)據(jù)對(duì)象就有了一定的控制,在事務(wù)TTT釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對(duì)象;DBMS通常提供了多種類型的封鎖,一個(gè)事務(wù)對(duì)某個(gè)數(shù)據(jù)對(duì)象加鎖后究竟擁有怎樣的控制是由封鎖的類型決定的
(2)類型
基本封鎖類型有如下兩種
- 排他鎖(XXX鎖):又稱為寫(xiě)鎖,若事務(wù)TTT對(duì)數(shù)據(jù)對(duì)象AAA加上XXX鎖,則只允許TTT讀取和修改AAA,其他任何事務(wù)都不能再對(duì)AAA加任何類型的鎖,直到TTT釋放AAA上的鎖
- 共享鎖(SSS鎖):又稱為讀鎖,若事務(wù)TTT對(duì)數(shù)據(jù)對(duì)象AAA加上SSS鎖,則其他事務(wù)只能再對(duì)AAA加SSS鎖,而不能加XXX鎖,直到TTT釋放AAA上的SSS鎖
,
(3)控制方式
排他鎖與共享鎖的控制方式可以用下圖所示的相容矩陣來(lái)表示
- 最左邊一列表示事務(wù)T1T_{1}T1?已經(jīng)獲得的數(shù)據(jù)對(duì)象上的鎖的類型,其中橫線表示沒(méi)有加鎖
- 最上面一行表示另一事務(wù)T2T_{2}T2?對(duì)同一數(shù)據(jù)對(duì)象發(fā)出的封鎖請(qǐng)求
- T2T_{2}T2?的封鎖請(qǐng)求能否被滿足用矩陣中的YYY和NNN表示。其中YYY表示事務(wù)T2T_{2}T2?的封鎖與T1T_{1}T1?已持有的鎖相容,封鎖請(qǐng)求可以滿足;NNN表示T2T_{2}T2?的封鎖請(qǐng)求與T1T_{1}T1?已持有的鎖沖突,請(qǐng)求被拒絕
二:封鎖協(xié)議
(1)概念
封鎖協(xié)議:是指在運(yùn)用XXX鎖和SSS鎖對(duì)數(shù)據(jù)對(duì)象加鎖時(shí)需要遵照的一些規(guī)則。例如,何時(shí)申請(qǐng)、持續(xù)時(shí)間、和何時(shí)釋放等。不同的封鎖協(xié)議,為并發(fā)操作的正確調(diào)度提供了一定的保證,所能達(dá)到的系統(tǒng)一致性級(jí)別也是不同的。常用的封鎖協(xié)議有
- 支持一致性維護(hù)的三級(jí)封鎖協(xié)議(本節(jié))
- 支持并行調(diào)度可串行化的兩段鎖協(xié)議/避免死鎖的協(xié)議
(2)三級(jí)封鎖協(xié)議
①:一級(jí)封鎖協(xié)議
一級(jí)封鎖協(xié)議:事務(wù)TTT在修改數(shù)據(jù)RRR之前必須先對(duì)其加XXX鎖,直到事務(wù)結(jié)束(COMMIT或ROLLBACK)才釋放
- 優(yōu)點(diǎn):可以防止丟失修改
- 缺點(diǎn):如果僅是讀數(shù)據(jù),是不需要加鎖的。所以它不能保證可重復(fù)讀和不讀臟數(shù)據(jù)
②:二級(jí)封鎖協(xié)議
二級(jí)封鎖協(xié)議:是指在一級(jí)封鎖協(xié)議基礎(chǔ)上增加事務(wù)TTT在讀取數(shù)據(jù)RRR之前必須先對(duì)其加SSS鎖,讀完后即可釋放SSS鎖
- 優(yōu)點(diǎn):可以方式丟失修改和讀臟數(shù)據(jù)
- 缺點(diǎn):不能保證可重復(fù)讀
③:三級(jí)封鎖協(xié)議
三級(jí)封鎖協(xié)議:是指在一級(jí)封鎖協(xié)議基礎(chǔ)上增加事務(wù)TTT在讀取數(shù)據(jù)RRR之前必須先對(duì)其加SSS鎖,直到事務(wù)結(jié)束才可以釋放SSS鎖
- 防止丟失修改和讀臟數(shù)據(jù),還防止了不可重復(fù)讀
總結(jié)
三:活鎖和死鎖
一個(gè)問(wèn)題的解決必然會(huì)導(dǎo)致另一個(gè)問(wèn)題的出現(xiàn)。封鎖技術(shù)可以有效地解決并發(fā)操作的一致性問(wèn)題,但是會(huì)帶來(lái)新的問(wèn)題
- 活鎖
- 死鎖
(1)活鎖
活鎖:事務(wù)T1T_{1}T1?封鎖數(shù)據(jù)RRR,事務(wù)T2T_{2}T2?又請(qǐng)求封鎖RRR,因此事務(wù)T2T_{2}T2?被迫等待。此時(shí),事務(wù)T3T_{3}T3?也請(qǐng)求封鎖RRR,因此事務(wù)T3T_{3}T3?也被迫等待。當(dāng)T1T_{1}T1?釋放RRR的封鎖后,系統(tǒng)卻首先批準(zhǔn)了T3T_{3}T3?的請(qǐng)求,T2T_{2}T2?只能繼續(xù)等待。然后,又有別的事務(wù)到來(lái),由于事務(wù)T2T_{2}T2?的優(yōu)先級(jí)可能較低,所以導(dǎo)致它長(zhǎng)時(shí)間得不到服務(wù),產(chǎn)生饑餓現(xiàn)象。這就是活鎖。避免活鎖可以廢除特權(quán),采用先來(lái)先服務(wù)算法
(2)死鎖
- 注意此部分在操作系統(tǒng)中屬于重點(diǎn)內(nèi)容,詳細(xì)了解請(qǐng)點(diǎn)擊跳轉(zhuǎn):【專欄必讀】王道考研408操作系統(tǒng)萬(wàn)字筆記(從學(xué)生角度輔助大家理解):各章節(jié)導(dǎo)航及思維導(dǎo)圖
A:概念
死鎖:兩個(gè)或兩個(gè)以上事務(wù)均處于等待狀態(tài),每個(gè)事務(wù)都在等待其中另一個(gè)事務(wù)封鎖的數(shù)據(jù),導(dǎo)致任何事務(wù)都不能向前推進(jìn)的現(xiàn)象
B:死鎖產(chǎn)生的四個(gè)必要條件
- 此部分內(nèi)容選自:(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第四節(jié)1:死鎖相關(guān)概念
①:互斥條件
互斥條件:是指只有對(duì)必須互斥使用的資源搶奪時(shí)才可能導(dǎo)致死鎖。比如打印機(jī)設(shè)備就可能導(dǎo)致互斥,但是像內(nèi)存、揚(yáng)聲器則不會(huì)
- 進(jìn)程A已經(jīng)獲得資源,進(jìn)程B只能等待
②:不可剝奪條件
不可剝奪條件:是指進(jìn)程所獲得的資源在未使用完之前,不能由其他進(jìn)程強(qiáng)行奪走,只能主動(dòng)釋放
③:持有并等待條件
持有并等待條件:是指進(jìn)程已經(jīng)至少保持了一個(gè)資源,但又提出了新的資源請(qǐng)求,但是該資源又被其他進(jìn)程占有,此時(shí)請(qǐng)求進(jìn)程被阻塞,但是對(duì)自己持有的資源保持不放
④:循環(huán)等待條件
循環(huán)剝奪條件:是指存在一種進(jìn)程資源的循環(huán)等待鏈,鏈中的每一個(gè)進(jìn)程已獲得的資源同時(shí)被下一個(gè)進(jìn)程所請(qǐng)求
C:解決死鎖的方法
解決死鎖主要有下面三種方法(每一種在對(duì)應(yīng)文章中都有詳細(xì)介紹,限于篇幅,這里只挑取重點(diǎn))
- (王道408考研操作系統(tǒng))第二章進(jìn)程管理-第四節(jié)2:死鎖處理策略之預(yù)防死鎖
- (王道408考研操作系統(tǒng))第二章進(jìn)程管理-第四節(jié)2:死鎖處理策略之避免死鎖(銀行家算法)
- (王道408考研操作系統(tǒng))第二章進(jìn)程管理-第四節(jié)3:死鎖處理策略之檢測(cè)和解除
預(yù)防死鎖
①:破壞互斥條件
- 互斥條件是指只有對(duì)必須互斥使用的資源搶奪時(shí)才可能導(dǎo)致死鎖。比如打印機(jī)設(shè)備就可能導(dǎo)致互斥,但是像內(nèi)存、揚(yáng)聲器則不會(huì)
破壞互斥條件:如果把只能互斥使用的資源改造為允許共享使用,則系統(tǒng)不會(huì)進(jìn)入死鎖狀態(tài)。但并不是所有資源都可以改造為成共享使用的資源的,而且為了系統(tǒng)安全性,很多地方也是禁止改造的,所以互斥條件一般無(wú)法破壞
②:破壞不可剝奪條件
- 不可剝奪條件是指進(jìn)程所獲得的資源在未使用完之前,不能由其他進(jìn)程強(qiáng)行奪走,只能主動(dòng)釋放
破壞不可剝奪條件:可以有以下兩種方案
- 方案一:當(dāng)某個(gè)進(jìn)程請(qǐng)求新的資源得不到滿足時(shí),它必須立即釋放保持的所有資源,待以后需要時(shí)再重新申請(qǐng)。 也就是說(shuō),即使某些資源尚未使用完,也需要主動(dòng)釋放
- 方案二:當(dāng)某個(gè)進(jìn)程需要的資源被其他進(jìn)程占有的時(shí)候,可以由操作系統(tǒng)協(xié)助,將想要的資源強(qiáng)行剝奪。 這種方式一般需要考慮各個(gè)進(jìn)程的優(yōu)先級(jí)
缺點(diǎn)
- 實(shí)現(xiàn)起來(lái)比較復(fù)雜
- 釋放已獲得的資源可能造成前一階段工作的失效,所以這種方法一般只適用于易保存和恢復(fù)狀態(tài)的資源,比如CPU
- 反復(fù)申請(qǐng)和釋放資源會(huì)增加系統(tǒng)開(kāi)銷,降低系統(tǒng)吞吐量
- 若采用方法一,意味著只要暫時(shí)得不到某個(gè)資源,之前獲得的那些資源都需要放棄,以后再重新申請(qǐng),容易導(dǎo)致進(jìn)程饑餓
③:破壞持有并等待條件(對(duì)應(yīng)一次封鎖法)
- 持有并等待條件:是指進(jìn)程已經(jīng)至少保持了一個(gè)資源,但又提出了新的資源請(qǐng)求,但是該資源又被其他進(jìn)程占有,此時(shí)請(qǐng)求進(jìn)程被阻塞,但是對(duì)自己持有的資源保持不放
破壞持有并等待條件:可以采用靜態(tài)分配方法。進(jìn)程在運(yùn)行前一次申請(qǐng)完它所需要的全部資源,在它的資源未得到滿足前,不允許投入運(yùn)行;一旦投入運(yùn)行,這些資源就一直歸它所有,該進(jìn)程不會(huì)再請(qǐng)求別的任何資源
缺點(diǎn)
- 有些資源可能只需要使用很短的時(shí)間,因此如果進(jìn)程的整個(gè)運(yùn)行期間都一直保持著所有資源,就會(huì)造成嚴(yán)重的資源浪費(fèi),資源利用率極低,并且該策略也有可能導(dǎo)致饑餓現(xiàn)象
④:破壞循環(huán)等待條件(對(duì)應(yīng)順序封鎖法)
- 循環(huán)剝奪條件:是指存在一種進(jìn)程資源的循環(huán)等待鏈,鏈中的每一個(gè)進(jìn)程已獲得的資源同時(shí)被下一個(gè)進(jìn)程所請(qǐng)求
破壞循環(huán)等待條件:可以采用順序資源分配方法。首先給系統(tǒng)中的資源進(jìn)行編號(hào),規(guī)定每個(gè)進(jìn)程必須按照編號(hào)遞增的順序請(qǐng)求資源,編號(hào)相同的資源(也就是同類資源)一次申請(qǐng)完
- 這是因?yàn)橐粋€(gè)進(jìn)程只有在已經(jīng)占有小編號(hào)資源的同時(shí),才有資格申請(qǐng)更大編號(hào)的資源。所以已經(jīng)持有大編號(hào)資源的進(jìn)程不可能逆向申請(qǐng)小編號(hào)的資源
缺點(diǎn)
- 不方便增加新的設(shè)備,因?yàn)?strong>可能需要重新分配所有的編號(hào)
- 進(jìn)程實(shí)際使用資源的順序可能和編號(hào)遞增順序不一致,造成資源浪費(fèi)
- 必須按規(guī)定次序申請(qǐng)資源,為用戶編程帶來(lái)了麻煩
死鎖檢測(cè)
①:超時(shí)法
超時(shí)法:如果一個(gè)事務(wù)的等待時(shí)間超過(guò)了規(guī)定的時(shí)限,就認(rèn)為發(fā)生了死鎖
- 優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單
- 缺點(diǎn):有可能誤判死鎖;時(shí)限標(biāo)準(zhǔn)難以把握
②:等待圖法(資源分配圖)
兩種結(jié)點(diǎn)
- 進(jìn)程結(jié)點(diǎn):對(duì)應(yīng)一個(gè)進(jìn)程
- 資源結(jié)點(diǎn):對(duì)應(yīng)一類資源,其數(shù)量可能有多個(gè)
兩種邊
- 進(jìn)程結(jié)點(diǎn)->資源結(jié)點(diǎn):進(jìn)程想要申請(qǐng)多少個(gè)資源,每條邊代表一個(gè)
- 資源結(jié)點(diǎn)->進(jìn)程結(jié)點(diǎn):表示已經(jīng)為進(jìn)程分配了多少個(gè)資源,每條邊代表一個(gè)
- 進(jìn)程P1P_{1}P1?已經(jīng)分得了兩個(gè)R1R_{1}R1?資源,又在請(qǐng)求一個(gè)R2R_{2}R2?資源;
- 進(jìn)程P2P_{2}P2?已經(jīng)分得了一個(gè)R1R_{1}R1?資源和一個(gè)R2R_{2}R2?資源,又在請(qǐng)求一個(gè)R1R_{1}R1?資源;
判斷是否發(fā)生死鎖:如果系統(tǒng)中的可用資源數(shù)目滿足進(jìn)程的需求,那么這個(gè)進(jìn)程暫時(shí)是不會(huì)被阻塞的,可以順利執(zhí)行;如果這個(gè)進(jìn)程結(jié)束后將資源歸還給了系統(tǒng),就可能使某些正在等待資源的進(jìn)程被激活,并順利執(zhí)行下去
比如下圖中:R2R_{2}R2?資源的數(shù)目共有2個(gè),其中一個(gè)分配給了P2P_{2}P2?,此時(shí)P1P_{1}P1?請(qǐng)求一個(gè),而可用資源數(shù)目夠,因此P1P_{1}P1?不會(huì)被阻塞;
R1R_{1}R1?資源的數(shù)目共有3個(gè),其中2個(gè)分配給了P1P_{1}P1?,一個(gè)分配給了P2P_{2}P2?,所以P2P_{2}P2?的請(qǐng)求不能滿足,而P1P_{1}P1?是可以順利執(zhí)行的,所以P2P_{2}P2?在等待P1P_{1}P1?執(zhí)行完畢并歸還資源后,便可以順利執(zhí)行下去
P1P_{1}P1?結(jié)束之后,歸還資源,并且它再不會(huì)請(qǐng)求任何資源,因此取出和P1P_{1}P1?相連的邊
P2P_{2}P2?在結(jié)束之后也會(huì)歸還資源
可完全簡(jiǎn)化:按照上述過(guò)程,如果能夠消除所有的邊,就稱此資源圖可完全簡(jiǎn)化,此時(shí)一定沒(méi)有發(fā)生死鎖,相等于可以找到一個(gè)安全序列P1P_{1}P1?->P2P_{2}P2?。如果不能消除所有邊,此時(shí)就發(fā)生了死鎖,而且最終還連著邊的那些進(jìn)程就是處于死鎖狀態(tài)的進(jìn)程
比如下圖中,開(kāi)始時(shí)讓P1P_{1}P1?再多持有一個(gè)R2R_{2}R2?資源,并且R2R_{2}R2?資源又分配了一個(gè)給P3P_{3}P3?
此時(shí)R2R_{2}R2?資源被分配干凈,所以P1P_{1}P1?在請(qǐng)求時(shí)被阻塞,相應(yīng)P2P_{2}P2?進(jìn)程也會(huì)被阻塞。因此只有P3P_{3}P3?能夠順利進(jìn)行
P3P_{3}P3?結(jié)束之后雖然會(huì)歸還1個(gè)R2R_{2}R2?資源,但是仍然不滿足P1P_{1}P1?的需求,所以P1P_{1}P1?依然被阻塞,P2P_{2}P2?也還是被阻塞,發(fā)生死鎖
死鎖解除
解除死鎖:一旦檢測(cè)出死鎖發(fā)生,就應(yīng)該立即解除死鎖。注意并不是系統(tǒng)中所有的進(jìn)程都是死鎖狀態(tài),使用死鎖檢測(cè)算法化簡(jiǎn)資源分配圖后,還連著邊的那些進(jìn)程就是需要進(jìn)行解除的死鎖進(jìn)程。解除方法主要有:
- 資源剝奪法:掛起(暫時(shí)放到外存上)某些死鎖進(jìn)程,并搶占它的資源,將這些資源分配給其他的死鎖進(jìn)程。但是應(yīng)防止被掛起的進(jìn)程長(zhǎng)時(shí)間得不到資源而饑餓
- 撤銷進(jìn)程法(終止進(jìn)程法):強(qiáng)制撤銷部分,甚至全部死鎖進(jìn)程,并剝奪這些進(jìn)程的資源。這種方式的優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,但所付出的代價(jià)可能性會(huì)很大。因?yàn)橛行┻M(jìn)程可能已經(jīng)運(yùn)行了很長(zhǎng)時(shí)間,已經(jīng)接近結(jié)束了,一旦被終止可謂功虧一簣,以后還得從頭再來(lái)
- 進(jìn)程回退法:讓一個(gè)或多個(gè)死鎖進(jìn)程回退到足以避免死鎖的地步。這樣就要求系統(tǒng)要記錄進(jìn)程的歷史信息,設(shè)置還原點(diǎn)
總結(jié)
以上是生活随笔為你收集整理的(数据库系统概论|王珊)第十一章并发控制-第二、三、四节:封锁、封锁协议活锁和死锁的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于运行SWT程序遇到的一个错误的总结
- 下一篇: 操作系统之文件管理:2、文件的逻辑结构(