不當(dāng)而造成的沖 突消解效率低下,從而提高了整個(gè)系統(tǒng)性能。
【附圖說明】
[0041] 圖1為本發(fā)明的執(zhí)行過程示意圖;
[0042] 圖2為本發(fā)明的沖突檢測器元數(shù)據(jù)結(jié)構(gòu);
[0043] 圖3為本發(fā)明的沖突消解器元數(shù)據(jù)結(jié)構(gòu);
[0044] 圖4為本發(fā)明的推測嵌套軟件事務(wù)存儲(chǔ)的讀操作流程圖;
[0045] 圖5為本發(fā)明的推測嵌套軟件事務(wù)存儲(chǔ)的事務(wù)提交操作流程圖。
【具體實(shí)施方式】
[0046] 下面結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)描述:
[0047] 本發(fā)明提出了一種推測嵌套軟件事務(wù)存儲(chǔ)的沖突檢測和沖突消解方法。本發(fā)明解 決其技術(shù)問題采用的技術(shù)方案如下:
[0048] 1)沖突檢測
[0049] 事務(wù)并行分為三類:線程間事務(wù)并行、線程內(nèi)事務(wù)并行和嵌套事務(wù)并行。嵌套 事務(wù)推測并行不僅支持線程間的并行和線程內(nèi)事務(wù)的并行,還支持線程內(nèi)嵌套事務(wù)并 行。由于線程間和線程內(nèi)事務(wù)并行時(shí)只有讀后寫(WAR)依賴,因此對于線程間和線程 內(nèi)的事務(wù)ti和t j,ti在t j之前提交,t j讀取事務(wù)s的值并且在t」之后執(zhí)行的t ;對事 務(wù)s寫入值val2,則^和t j存在讀后寫沖突需滿足t盧t i,即Vt1G T, T,t read(tj, s, ValXwriteUi, s, val2),則1^和t』存在WAR沖突需滿足tt ;。嵌套事務(wù) 推測的嵌套事務(wù)中則存在寫后寫(WRW)、讀后寫(WAR)和寫后讀(RAW)三種沖突。對于屬 于T的事務(wù)1^和t」,1^在t」之前提交,t」對事務(wù)s與入值vail并且在t」之后執(zhí)行的t ; 對事務(wù)s寫入值val2,則tjP t ,存在寫后寫沖突需滿足t ,是t i兄弟事務(wù)的后繼;對于 屬于T的事務(wù)tJP t j,^在t j之前提交,t ;讀取事務(wù)s的值并且在t j之后執(zhí)行的t 3寸 事務(wù)s寫入值val,則tjP t ,存在讀后寫沖突需滿足t ,是t i兄弟事務(wù)的后繼。對于屬 于T的事務(wù)tjP t」,1^在t」之前提交,t」對事務(wù)s與入值val并且在t」之后執(zhí)行的t ; 讀取事務(wù)s的值,則tjP t ,存在寫后讀沖突需滿足t ,是t況弟事務(wù)的后繼,即Vt1G T, tjG T,t Xtj且 write (t』,s, vail)〈write (' s, val2),則 tjP t』存在 WAW 沖突需滿足 t j e descendants (sibling (t J)。VilG T, tj e T,t Xtj且 read (t j,s)〈write (h,s,val), 則 tjP t j存在 WAR沖突需滿足 t f descendants (sibling (t J)。VtlG Tf tf T,t Xtj且 write (tj, s, val)〈read (ti, s, val2),則 tjP t j存在 RAW沖突需滿足 t j e descendants (sib IingUi)) 〇〇
[0050] 線程間和線程內(nèi)普通事務(wù),由于采用事務(wù)串行序列化提交,有效的避免了事務(wù)之 間的寫后寫和寫后讀依賴,因此推測嵌套軟件事務(wù)存儲(chǔ)系統(tǒng)對于線程間和線程內(nèi)普通事務(wù) 主要在事務(wù)提交時(shí)檢測事務(wù)之間的讀后寫依賴。線程內(nèi)嵌套事務(wù)數(shù)據(jù)依賴的解決分為以下 兩種情況:一是對于寫后讀依賴,通過采用讀操作時(shí)檢查數(shù)據(jù)版本進(jìn)行控制,二是對于寫后 寫和讀后寫依賴,推測執(zhí)行的線程先將相關(guān)更改緩存起來,在推測執(zhí)行結(jié)束提交時(shí)進(jìn)行沖 突檢測。
[0051] 2)沖突檢測消解
[0052] 推測嵌套軟件事務(wù)存儲(chǔ)系統(tǒng)采用基于動(dòng)態(tài)優(yōu)先級的隨機(jī)退避沖突消解策略進(jìn)行 沖突消解,其中所有事務(wù)的優(yōu)先級初始狀態(tài)都為〇,事務(wù)米用動(dòng)態(tài)優(yōu)先級算法維護(hù)事務(wù)的優(yōu) 先級。事務(wù)發(fā)生沖突時(shí),比較事務(wù)的優(yōu)先級,中止優(yōu)先級小的事務(wù)。
[0053] 本發(fā)明的推測嵌套軟件事務(wù)存儲(chǔ)執(zhí)行過程為(開始(讀I寫)* (提交I放棄)), 事務(wù)tx在對象集S上進(jìn)行一系列的讀寫操作,事務(wù)執(zhí)行完成后提交或者遇到?jīng)_突中止事 務(wù),因此事務(wù)tx有二個(gè)狀態(tài):活動(dòng)、提交、放棄。
[0054] 推測嵌套軟件事務(wù)存儲(chǔ)系統(tǒng)的沖突管理器包括沖突檢測器和沖突消解器兩個(gè)組 成部分,其具體實(shí)現(xiàn)方式如下:
[0055] 1)沖突檢測
[0056] 推測嵌套軟件事務(wù)存儲(chǔ)系統(tǒng)在讀操作時(shí)檢測寫后讀沖突,提交時(shí)檢測寫后寫和讀 后寫沖突。圖2是沖突檢測器元數(shù)據(jù)結(jié)構(gòu)。如圖2所示,沖突檢測器中每個(gè)對象有一個(gè)寫 版本號(hào),每次對該對象的修改都會(huì)導(dǎo)致寫版本號(hào)增加。讀集合指向?qū)υ搶ο蟠嬖谧x操作的 事務(wù),每個(gè)事務(wù)節(jié)點(diǎn)包括事務(wù)ID、值和讀版本號(hào),每次對對象進(jìn)行操作時(shí)需要根據(jù)實(shí)際執(zhí)行 情況修改讀版本號(hào)的值。寫集合指向?qū)υ搶ο蟠嬖趯懖僮鞯氖聞?wù),每個(gè)事務(wù)寫操作節(jié)點(diǎn)包 括事務(wù)ID、值、新值和寫版本號(hào),在事務(wù)執(zhí)行寫操作時(shí),需要更新寫版本號(hào),并存入新值。
[0057] ①讀事務(wù)時(shí)檢測寫后讀沖突依賴
[0058] 圖4是推測嵌套軟件事務(wù)存儲(chǔ)的讀操作流程圖。如圖4所示,讀操作從事務(wù)tx的 讀集合中讀取對象S在共享內(nèi)存空間的值,在事務(wù)tx及tx祖先的上下文中返回對象S的 最后寫入值,其讀操作返回值分為以下三種情況:
[0059] a.事務(wù)tx及其祖先對操作對象s只有讀操作時(shí),若s只屬于tx的讀集合,則直接 返回s的值;
[0060] b.若s屬于tx祖先的讀集合時(shí),則合并修改tx的讀集合,并返回tx執(zhí)行前最近 一次成功提交的事務(wù)對s的寫入值;
[0061] c.事務(wù)tx及其祖先對s寫操作的情況。當(dāng)s屬于tx的寫集合時(shí),如果s的寫操 作事務(wù)只是tx時(shí),修改tx的讀集合,并返回tx中對S存在寫操作的值;否則tx是對s進(jìn) 行寫操作的祖先的兄弟節(jié)點(diǎn)的后繼時(shí)可能存在沖突,則調(diào)用沖突管理器。
[0062] 在上述三種情況中,a、b中都不需要進(jìn)行沖突檢測,只有在c情況下需要進(jìn)行沖突 檢測,即事務(wù)tx及其祖先對s寫操作的情況需要進(jìn)行沖突檢測。當(dāng)事務(wù)tx及其祖先對s 寫操作時(shí),首先遍歷沖突檢測器中對象s的寫集合,查找和對象s的全局寫版本號(hào)相同的寫 版本號(hào)所對應(yīng)的事務(wù)tx'。若tx'就是tx,則修改tX的讀集合,并返回tX中對s存在寫操 作的值;否則tx是對s進(jìn)行寫操作的tx'的兄弟節(jié)點(diǎn)的后繼時(shí)可能存在沖突,則調(diào)用沖突 管理器。
[0063] ②事務(wù)提交時(shí)檢測寫后寫和讀后寫沖突依賴
[0064] 事務(wù)tx對s寫操作時(shí),臨時(shí)寫入val的值,修改s的寫版本號(hào)及tx的寫集合,并 將tx的相關(guān)信息加入到?jīng)_突檢測器中對象s的寫集合中。寫操作直到事務(wù)提交時(shí)檢測該 事務(wù)沒有發(fā)生沖突,修改才對其他事務(wù)可見。
[0065] 圖5是推測嵌套軟件事務(wù)存儲(chǔ)的事務(wù)提交操作流程圖。事務(wù)提交通常存在兩種可 能:一種是沒有和其他事務(wù)發(fā)生沖突,則提交成功,將事務(wù)tx的狀態(tài)從活動(dòng)改為提交;另一 種是和其他事務(wù)發(fā)生沖突,則調(diào)用沖突管理器,若放棄tx,并將tx的狀態(tài)從活動(dòng)改為放棄。 事務(wù)提交時(shí)檢測寫后寫和讀后寫沖突。事務(wù)提交過程如下:
[0066] a.判斷提交全局變量serial是否小于事務(wù)tx的提交順序,若小于則表示tx之前 還有事務(wù)未完成提交,需要等待。
[0067] b.檢查事務(wù)tx讀集合中的所有對象s是否存在沖突,若無沖突時(shí),則將子集合中 tx的相關(guān)信息并入父集合中;若有沖突,調(diào)用沖突消解器進(jìn)行沖突消解。
[0068] c.檢查事務(wù)tx寫集合中所有的對象s,若不存在沖突,將事務(wù)tx中s的值 和版本號(hào)拷貝給owner中的s,并將tx的順序號(hào)賦給記錄每個(gè)沖突數(shù)據(jù)版本信息的 Vers ionArray [s];若有沖突,調(diào)用沖突消解。
[0069] d.清空事務(wù)tx的讀集合和寫集合,修改tx的狀態(tài),并增加提交全局變量serial, 事務(wù)提交成功。
[0070] 推測嵌套軟件事務(wù)存儲(chǔ)的事務(wù)提交操作時(shí)沖突檢測需要分別遍歷沖突檢測器中 對象S的讀寫集合。檢測讀后寫沖突時(shí),遍歷對象s的讀集合查找和全局寫版本號(hào)相同的讀 版本號(hào)所對應(yīng)的事務(wù)tx'。若tx'就是tx兄弟事務(wù)的后繼,則需調(diào)用沖突管理器消解沖突。 檢測寫后寫沖突時(shí),遍歷對象s的寫集合查找和全局寫版本號(hào)相同的寫版本號(hào)所對應(yīng)的事 務(wù)tx'。若tx'就是tx兄弟事務(wù)的后繼,則需調(diào)用沖突管理器消解沖突。
[0071] 2)沖突消解
[0072] 推測嵌套軟件事務(wù)存儲(chǔ)系統(tǒng)采用基于動(dòng)態(tài)優(yōu)先級的隨機(jī)退避沖突消解策略實(shí)現(xiàn) 沖突消解,該策略中所有事務(wù)的優(yōu)先級初始狀態(tài)都為〇,事務(wù)米用動(dòng)態(tài)優(yōu)先級算法維護(hù)事務(wù) 的優(yōu)先級。事務(wù)發(fā)生沖突時(shí),比較事務(wù)的優(yōu)先級,中止優(yōu)先級小的事務(wù)。根事務(wù)的優(yōu)先級= 讀次數(shù)+寫次數(shù)*2+時(shí)間戳