專利名稱:處理嵌套事務的錯誤地破壞的父事務的制作方法
處理嵌套事務的錯誤地破壞的父事務
站旦 冃爾
軟件事務存儲器(STM)是類似于數據庫事務的、用于在并發(fā)計算中 控制對共享存儲器的訪問的并發(fā)控制機制。事務存儲器的上下文中的事務 是對共享存儲器執(zhí)行一系列讀取和寫入的一段代碼。STM用作傳統(tǒng)鎖定機 制的替換。STM允許更簡單地編寫并發(fā)程序。事務指定應當如同其隔離地 執(zhí)行一樣的代碼序列。這一隔離錯覺可以通過對象的細粒度鎖定,以及通 過以在發(fā)現(xiàn)事務與某一其它事務相沖突的情況下允許回退該事務的副作用 的模式執(zhí)行來實現(xiàn)。如果對于數據訪問所生成的代碼被修改成包括對這些 鎖定和回退機制的支持,則可以說該訪問被"事務化"。
許多STM系統(tǒng)支持嵌套事務,從而允許高效地合成使用事務所創(chuàng)作的 不同組件。如果嵌套事務的影響是與其包含(即,父)事務相同的隔離邊 界的一部分,則認為它是封閉的。在封閉的嵌套事務提交時,其影響不對 系統(tǒng)的其余部分變得可見。相反,其影響變成父事務的一部分,仍然在進 行中,并且只有在父事務最終提交時才變得對系統(tǒng)的其余部分可見。在嵌 套事務回退時,其臨時影響被撤消并且父事務的狀態(tài)恢復到該嵌套事務開 始的點處。
使用就地寫入和樂觀讀取的STM系統(tǒng)使用與每一可鎖定存儲器區(qū)域 相關聯(lián)的版本號來指示何時對共享數據作出更改。讀取事務將樂觀地記錄 存儲器(對象、高速緩存行等)的版本號而不鎖定該數據。在版本號在事 務的整個生命周期不改變的情況下,該事務可以提交。在釋放其寫鎖定時, 寫入事務遞增版本號以用于提交或回退。版本號在回退期間必須增加,因 為寫入事務臨時就地更新了數據。這些更新對讀取事務是可見的,并且必
須通知該事務不能提交,因為可能讀取了不一致的數據。
在回退時,寫入尚未被父事務寫入的數據的嵌套事務必須遞增版本號, 如同非嵌套(最高級)事務一樣。然而,考慮其中父事務樂觀地讀取變量 X并且嵌套子事務第一次寫入變量X的情況。父事務將在其日志中記錄X的版本號,如版本V1。嵌套事務將開始并取得對X的寫鎖定。如果嵌套事 務提交,則沒有問題寫鎖定未釋放并被轉移到父事務,并且父事務保持 一致,能夠提交。然而,如果嵌套事務出于任何原因而回退,則它必須釋 放寫鎖定并將X的版本號遞增成V2。父事務將在提交時表現(xiàn)得不一致。X
的版本號是V2,但父事務在X是VI的時候讀取了它,并且沒有是誰將該 版本號更改成V2的記錄??雌饋砀甘聞张c另一事務沖突,但實際上是嵌套 子事務使得版本號增加,因而這實際上不是沖突。父事務被其子事務的回 退操作所破壞。這一問題使得STM系統(tǒng)經歷父事務謬誤的重新執(zhí)行。
概述
公開了用于在事務存儲器系統(tǒng)中檢測嵌套子事務的錯誤地破壞 (doom)的父事務的各種技術和方法。在回退嵌套事務時,在給定嵌套事 務每一次釋放寫鎖定時跟蹤釋放計數。例如,可以使用寫異常中止補償映 射來跟蹤回退的每一嵌套事務所釋放的每一鎖定的釋放計數。嵌套事務釋 放寫鎖定的次數被記錄在它們相應的寫異常中止補償映射中??梢栽诟甘?務的確認期間使用釋放計數來確定明顯無效的樂觀(optimistic)讀取實際 上是否是有效的。
在一個實現(xiàn)中,在處理父事務日志時,所看到的對于嵌套子事務的任 何寫異常中止補償映射被聚集到父事務中的聚集的寫異常中止補償映射 中。如果樂觀讀取由于版本號不匹配而未能確認,則咨詢聚集的寫異常中 止補償映射來檢索嵌套子事務對特定變量的寫鎖定釋放計數。如果版本號 差與嵌套子事務的寫鎖定釋放計數正好匹配,則樂觀讀取是有效的。
提供本概述以便以簡化形式介紹將在以下詳細描述中進一步描述的一 些概念。本概述不旨在標識所要求保護的主題的關鍵特征或必要特征,也 不旨在用于幫助確定所要求保護的主題的范圍。
附圖簡述
圖1是一個實現(xiàn)的計算機系統(tǒng)的圖示。
圖2是在圖1的計算機系統(tǒng)上操作的一個實現(xiàn)的事務存儲器應用程序的圖示。
圖3是圖1的系統(tǒng)的一個實現(xiàn)的高級處理流程圖。
圖4是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在創(chuàng)建和維護寫
異常中止補償映射時所涉及的各階段。
圖5是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在事務回退期間 聚集的寫異常中止補償映射時所涉及的各階段。
圖6是圖1的系統(tǒng)的一個實現(xiàn)的處理流程圖,其示出在事務回退期間 使用寫異常中止補償映射來避免嵌套事務的錯誤地破壞的父事務時所涉及 的各階段。
詳細描述
此處的技術和方法可以在事務存儲器系統(tǒng)的一般上下文中描述,但本 系統(tǒng)也用作除此之外的其它目的。在一個實現(xiàn)中,此處所描述的一個或多 個技術可被實現(xiàn)為諸如微軟⑧.NET框架等框架程序內的、或來自為開發(fā)者 提供開發(fā)軟件應用程序的平臺的任何其它類型的程序或服務的特征。在另 一實現(xiàn)中,此處所描述的一個或多個技術被實現(xiàn)為涉及開發(fā)在并發(fā)環(huán)境中 執(zhí)行的應用程序的其它應用程序的特征。
在一個實現(xiàn)中,提供了允許檢測和避免嵌套子事務對父事務的錯誤破 壞的事務存儲器系統(tǒng)。此處使用的術語"破壞"旨在包括因為它們執(zhí)行了 對后來被其它事務寫入的一個或多個變量的一個或多個樂觀讀取而稍后將 被回退的事務。在嘗試提交這樣的事務時,失敗的樂觀讀取將使得該事務 回退和重新執(zhí)行。此處使用的術語"錯誤地破壞"旨在包括由于失敗的樂 觀讀取而表現(xiàn)得被破壞、但歸因于嵌套事務所執(zhí)行的操作該樂觀讀取實際 上是有效的因此其實際上未被破壞的任何事務。此處使用的術語"嵌套事 務"旨在包括其影響被封閉在另一事務的隔離邊界之內的任何事務。封閉 嵌套事務的事務被稱為該嵌套事務的"父事務",并且嵌套事務通常被稱 為"子事務"。以按鎖定釋放計數來跟蹤每一嵌套子事務釋放寫鎖定的次 數。在一個實現(xiàn)中,在寫異常中止補償映射中跟蹤這些計數。此處使用的 術語"寫異常中止補償映射"旨在包括存儲每一嵌套子事務釋放的每一鎖定的按鎖定釋放計數的數據結構。在事務確認或回退期間,多個寫異常中 止補償映射可以聚集到聚集映射中。
在確認父事務時,如果樂觀讀取使確認失敗,則咨詢當前聚集的寫異 常中止補償映射來查看事務存儲器字中的版本號差是否與嵌套子事務對于 該對象或存儲器區(qū)域的聚集釋放計數正好匹配。如果是,則樂觀讀取實際 上是有效的,并且父事務不應被錯誤地破壞。此處使用的術語"事務存儲 器字(TMW)"旨在包括提供給每一事務的、跟蹤關于給定事務的諸如鎖
定狀態(tài)和版本號等各種信息的數據結構。例如,TMW可包括版本號和讀取 者的列表/計數和/或指示符。在一個實現(xiàn)中,讀取者的列表/計數和/或指示 符可包括在給定時間點訪問特定值的讀取者的數量的計數。在另一實現(xiàn)中, 讀取者的列表/計數和/或指示符可包括在給定時間點訪問特定值的特定讀 取者(例如,悲觀)的列表。在又一實現(xiàn)中,讀取者的列表/計數和/或指示 符僅僅是指示在給定時間點存在訪問特定值的一個或多個讀取者(例如, 悲觀)的標志或其它指示符。這些僅是示例,并且此處對術語TMW的使 用旨在涵蓋用于跟蹤事務狀態(tài)的各種機制。
如圖1所示,用于實現(xiàn)本系統(tǒng)的一個或多個部分的示例性計算機系統(tǒng) 包括諸如計算設備100等計算設備。在其最基本的配置中,計算設備100 通常包括至少一個處理單元102和存儲器104。取決于計算設備的確切配置 和類型,存儲器104可以是易失性的(如RAM)、非易失性的(如ROM、 閃存等)或是兩者的某種組合。該最基本配置在圖1中由虛線106來示出。
另外,設備100還可具有附加特征/功能。例如,設備100還可包含附 加存儲(可移動和/或不可移動),包括但不限于磁盤、光盤或磁帶。這樣 的附加存儲在圖1中由可移動存儲108和不可移動存儲110示出。計算機 存儲介質包括以用于存儲諸如計算機可讀指令、數據結構、程序模塊或其 它數據等信息的任何方法或技術來實現(xiàn)的易失性和非易失性、可移動和不 可移動介質。存儲器104、可移動存儲108和不可移動存儲110都是計算機 存儲介質的示例。計算機存儲介質包括但不限于,RAM、 ROM、 EEPROM、 閃存或其它存儲器技術、CD-ROM、數字多功能盤(DVD)或其它光存儲、 磁帶盒、磁帶、磁盤存儲或其它磁存儲設備、或者可用于存儲所需信息并且可由設備100訪問的任何其它介質。任何這樣的計算機存儲介質都可以
是設備ioo的一部分。
計算設備100包括允許計算設備100與其它計算機/應用程序115進行 通信的一個或多個通信連接114。設備100還可以具有諸如鍵盤、鼠標、筆、 語音輸入設備、觸摸輸入設備等輸入設備112。還可以包括諸如顯示器、揚 聲器、打印機等輸出設備111。這些設備在本領域中公知且無需在此處詳細 討論。在一個實現(xiàn)中,計算設備100包括事務存儲器應用程序200。事務存 儲器應用程序200將在圖2中更詳細地描述。
現(xiàn)在轉向圖2并繼續(xù)參考圖1,示出了在計算設備100上操作的事務 存儲器應用程序200。事務存儲器應用程序200是駐留在計算設備100上的 應用程序中的一個。然而,可以理解,事務存儲器應用程序200可另選地 或另外地被具體化為一個或多個計算機上的計算機可執(zhí)行指令和/或與圖1
所示的不同的變型。另選地或另外地,事務存儲器應用程序200的一個或 多個部分可以是系統(tǒng)存儲器104的一部分、可以在其它計算機和/或應用程 序115上、或可以是計算機軟件領域的技術人員能想到的其它此類變型。
事務存儲器應用程序200包括負責執(zhí)行在此描述的技術中的一些或全 部的程序邏輯204。程序邏輯204包括用于在嵌套事務第一次回退并釋放寫 鎖定時創(chuàng)建寫異常中止補償映射(WACM)的邏輯206 (如以下參考圖4 描述的);用于在WACM的每一條目中在給定事務存儲器字中記錄嵌套事 務釋放寫鎖定的次數的邏輯208 (如以下參考圖4描述的);用于在父事務 日志中保持WACM的邏輯210 (如以下參考圖4描述的);用于在特定嵌 套事務重新執(zhí)行并再次回退的情況下使用并更新同一 WACM的邏輯212 (如以下參考圖4描述的);用于在適當時聚集WACM的邏輯214 (如以 下參考圖5描述的);用于在事務確認期間使用WACM來確定失敗的樂觀 讀取真正有效還是無效的邏輯216 (如以下參考圖6描述的);以及用于操 作該應用程序的其它邏輯220。
現(xiàn)在轉向圖3-6并繼續(xù)參考圖1-2,更詳細地描述了用于實現(xiàn)事務存儲 器應用程序200的一個或多個實現(xiàn)的各階段。在某些實現(xiàn)中,圖3-6的過 程至少部分地在計算設備100的操作邏輯中實現(xiàn)。圖3是事務存儲器應用程序200的高級處理流程圖。該過程在起始點240處開始。在嵌套事務回 退期間所釋放的任何寫鎖定都有可能破壞父事務(階段242)。在回退事務 時,記憶對版本號進行遞增的每一次(階段244)。系統(tǒng)針對回退的每一嵌 套事務來跟蹤這一信息(階段246)。在事務確認期間,系統(tǒng)使用這一信息 來確定使確認失敗的特定樂觀讀取是否因為重新執(zhí)行嵌套子事務所造成的 差異而實際上是有效的(階段248)。這些階段在圖4-6中更詳細地描述。 該過程在結束點250處結束。
圖4示出在創(chuàng)建和維護寫異常中止補償映射時所涉及的各階段的一個 實現(xiàn)。該過程在起始點270處開始,在那里在嵌套事務第一次回退并釋放 寫鎖定時創(chuàng)建由唯一鎖定標識符鍵控的寫異常中止補償映射(WACM)(階 段272)。該WACM中的每一條目在給定事務存儲器字上記錄嵌套事務釋 放寫鎖定的次數(階段274)。
WACM保持在父事務的日志中,并且在父事務所進行的所有樂觀讀取 之后在嵌套事務開始時被排序(階段276)。如果特定嵌套事務重新執(zhí)行并 再次回退,則系統(tǒng)使用同一 WACM并用任何新寫鎖定釋放來更新它(階段 278)。如果嵌套事務再次得到其在先前執(zhí)行時所得到的鎖定,則在WACM 中遞增對于該事務存儲器字的計數(階段280)。該過程在結束點282處結 束。
圖5示出在事務回退期間在聚集WACM時所涉及的各階段的一個實 現(xiàn)。該過程在起始點290處開始,在那里還作為許多嵌套子事務的父事務 的嵌套事務隨時間可能在其日志中散布有多個WACM (階段292)。如果 在事務回退期間遭遇多個WACM,則將歸因于嵌套子事務的所有WACM 聚集到單個WACM并將其置于父事務的日志中(階段294)。該過程在結 束點296處結束。
圖6示出在事務確認期間使用WACM來避免錯誤地破壞嵌套事務的父 事務時所涉及的各階段的一個實現(xiàn)。該過程在起始點310處開始,在那里 在逆序處理父事務的日志時,在處理樂觀讀取條目時,將所看到的任何 WACM聚集到臨時WACM以用于確認過程(階段312)。如果樂觀讀取 由于版本號不匹配而未能確認(判定點314),則使用TMW地址作為鍵來咨詢臨時WACM(階段316)。如果存在關于該TMW地址的匹配條目(判 定點318),則系統(tǒng)計算與該條目相關聯(lián)的計數是否與版本號差正好匹配(判 定點320)。如果計數與版本號差正好匹配(判定點320),則樂觀讀取是 有效的并且差僅僅是由于重新執(zhí)行嵌套子事務所造成的(階段322)。如果 否,則樂觀讀取是無效的并且是由于其它事務的提交/回退所造成的(階段 324)。對整個父事務日志重復這些階段(判定點326)。該過程在結束點 328處結束。
盡管用對結構特征和/或方法動作專用的語言描述了本主題,但可以理 解,所附權利要求書中定義的主題不必限于上述具體特征或動作。相反, 上述具體特征和動作是作為實現(xiàn)權利要求的示例形式公開的。落入在此所 述和/或所附權利要求所描述的實現(xiàn)的精神的范圍內的所有等效方案、更改 和修正都期望受到保護。
例如,計算機軟件領域普通技術人員將認識到,此處所討論的示例可 以在一個或多個計算機上不同地組織來包括比這些示例中所描繪的更少或 更多選項或特征。
權利要求
1.一種用于在事務存儲器系統(tǒng)中避免嵌套子事務的錯誤地破壞的父事務的方法,所述方法包括以下步驟在回退嵌套事務時,在每次釋放寫鎖定時跟蹤釋放計數(206);以及在父事務的確認期間,使用所述釋放計數來確定使確認失敗的樂觀讀取實際上是否是有效的(216)。
2. 如權利要求1所述的方法,其特征在于,如果版本號差與所述釋放 計數正好匹配,則所述失敗的確認實際上是有效的(320)。
3. 如權利要求1所述的方法,其特征在于,在寫異常中止補償映射中 跟蹤所述釋放計數(274)。
4. 如權利要求3所述的方法,其特征在于,為所述嵌套事務中的每一 個創(chuàng)建所述寫異常中止補償映射(272)。
5. 如權利要求4所述的方法,其特征在于,在所述嵌套事務中的相應 一個事務第一次回退并釋放寫鎖定時,為該相應事務創(chuàng)建所述寫異常中止 補償映射(272)。
6. 如權利要求4所述的方法,其特征在于,將所述嵌套事務中的每一 個的所述寫異常中止補償映射聚集到聚集的寫異常中止補償映射中(312)。
7. 如權利要求6所述的方法,其特征在于,在處理所述父事務的事務 日志時使用所述聚集的寫異常中止補償映射來確定所述失敗的樂觀讀取實 際上是否是有效的(312)。
8. 如權利要求7所述的方法,其特征在于,所述父事務的事務日志是 以逆序來處理的(312)。
9. 一種具有用于使得計算機執(zhí)行如權利要求1所述的步驟的計算機可 執(zhí)行指令的計算機可讀介質(200)。
10. —種具有用于使得計算機執(zhí)行以下步驟的計算機可執(zhí)行指令的 計算機可讀介質,所述步驟包括為嵌套事務創(chuàng)建寫異常中止補償映射(206);在所述寫異常中止補償映射中記錄所述嵌套事務釋放寫鎖定的次數 (208);以及在父事務的確認期間使用所述寫異常中止補償映射來確定失敗的樂觀 讀取實際上是否是有效的(216)。
11. 如權利要求10所述的計算機可讀介質,其特征在于,在所述嵌套事務第一次回退并釋放寫鎖定時創(chuàng)建所述寫異常中止補償映射(272)。
12. 如權利要求IO所述的計算機可讀介質,其特征在于,如果版本 號差與所述嵌套事務釋放所述寫鎖定的次數正好匹配,則所述失敗的樂觀 讀取實際上是有效的(320)。
13. 如權利要求IO所述的計算機可讀介質,其特征在于,所述寫異 常中止補償映射保持在所述父事務的事務日志中(276)。
14. 如權利要求13所述的計算機可讀介質,其特征在于,在所述父 事務所進行的所有樂觀讀取之后在所述嵌套事務開始時,對所述寫異常中 止補償映射進行排序(276)。
15. 如權利要求IO所述的計算機可讀介質,其特征在于,在父事務 回退期間,將所述寫異常中止補償映射與遭遇到的其它嵌套子事務的其它 寫異常中止補償映射聚集在一起,以形成聚集的寫異常中止補償映射(294)。
16. 如權利要求15所述的計算機可讀介質,其特征在于,將所述聚 集的寫異常中止補償映射置于所述父事務的事務日志中(294)。
17. 如權利要求16所述的計算機可讀介質,其特征在于,在以逆序 處理所述父事務的事務日志時,將所述聚集的寫異常中止補償映射置于所 述父事務的事務日志中(312)。
18. —種用于在事務確認期間使用寫異常中止補償映射來避免錯誤 地破壞嵌套事務的父事務的方法,所述方法包括以下步驟在處理父事務日志時,將在嵌套子事務中所看到的任何寫異常中止補 償映射聚集到聚集的寫異常中止補償映射中(312);如果樂觀讀取由于版本號不匹配而未能確認(314),則咨詢所述聚集 的寫異常中止補償映射來檢索所述嵌套子事務的寫鎖定釋放計數(316); 以及如果版本號差與所述嵌套子事務的寫鎖定釋放計數正好匹配(320),則所述樂觀讀取是有效的(322)。
19. 如權利要求18所述的方法,其特征在于,如果所述版本號差不 與所述嵌套子事務的寫釋放計數正好匹配,則所述樂觀讀取是無效的(324)。
20. —種具有用于使得計算機執(zhí)行如權利要求18所述的步驟的計算 機可執(zhí)行指令的計算機可讀介質(200)。
全文摘要
公開了用于在事務存儲器系統(tǒng)中檢測嵌套子事務的錯誤地破壞的父事務的各種技術和方法。在回退嵌套事務時,在給定嵌套事務由于回退而每一次釋放寫鎖定時跟蹤釋放計數。例如,可以使用寫異常中止補償映射來跟蹤每一嵌套事務的釋放計數。嵌套事務釋放寫鎖定的次數被記錄在它們相應的寫異常中止補償映射中??梢栽诟甘聞盏拇_認期間使用釋放計數來確定失敗的樂觀讀取事實上是否有效。如果嵌套子事務的聚集的釋放計數是造成版本號差的原因,則樂觀讀取是有效的。
文檔編號G06F12/00GK101689138SQ200880022416
公開日2010年3月31日 申請日期2008年6月16日 優(yōu)先權日2007年6月27日
發(fā)明者D·德特勒夫, G·格雷費, J·J·達菲, M·M·馬格魯德, V·K·格羅弗 申請人:微軟公司