欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

對鎖管理資源的先期改變的制作方法

文檔序號:6453802閱讀:203來源:國知局
專利名稱:對鎖管理資源的先期改變的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及用于控制對計算機系統(tǒng)內(nèi)的資源的訪問的機制。
背景技術(shù)
計算機在執(zhí)行計算機程序期間使用諸如存儲器、調(diào)制解調(diào)器和打印機 之類的資源。這些資源中的很多資源僅僅是被任意給定的計算機程序周期 性地使用。例如,字處理應用要求打印機打印文檔的時間量通常比字處理 應用被用于創(chuàng)建文檔的時間量小。如果訪問打印機的進程只有一個字處理 應用,則打印機大部分時間將保持空閑。
為了充分利用資源,已經(jīng)開發(fā)了其中運行在很多計算機設(shè)備或"節(jié) 點"上的進程可以共享資源的計算機網(wǎng)絡。從而,用戶可以購買一個可以 被連接到擁有很多計算機的網(wǎng)絡上的打印機,而不需要為每臺計算機購買 一個打印機。網(wǎng)絡上的每個計算機上的進程只在進程需要打印機時才訪問 打印機。
即使按照上述方式資源可以被共享,但很多資源還是不能在任意給定 的時間被一個以上的進程使用。例如,很多打印機不能同時打印一個以上 的文檔。其它資源(例如存儲介質(zhì)中的數(shù)據(jù)塊或者被存儲在存儲介質(zhì)上的 表)可以同時被多個進程以某些方式訪問(例如,讀取),但是在同一時 間只能被一個進程以其它方式訪問(例如,寫入)。因此,已經(jīng)開發(fā)了控 制對資源的訪問的機制。
一種這樣的機制被稱為鎖。鎖是一種數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)指示特定 進程己被賦予了針對資源的某些權(quán)利。有很多類型的鎖。 一些類型的鎖可 以被很多進程共享,而其它類型的鎖阻止任何其它鎖被賦予相同的資源。
例如,NULL模式鎖對表的所有權(quán)不允許進程以任何方式訪問表。同 時讀取鎖的所有權(quán)允許進程讀取表,但不保證沒有其它進程在同時寫入
表。受保護的讀取鎖的所有權(quán)允許進程讀取表,并且保證沒有其它進程在 同時寫入表。同時寫入鎖的所有權(quán)允許進程寫入表,但不保證沒有另一進 程也在寫入表。受保護的寫入鎖的所有權(quán)允許進程寫入表,并且保證沒有 另一進程也在寫入表。排他模式鎖的所有權(quán)允許進程對表做任何事情,并 且保證沒有其它進程在對表執(zhí)行任何操作。
由于與這些鎖相關(guān)聯(lián)的各種許可和保證,所以某些鎖組合是不允許 的。例如,如果一個進程擁有對資源的排他模式鎖,則其它進程不能被賦
予除NULL模式鎖以外的任何鎖。如果一個進程擁有受保護的寫入鎖,則
其它進程不能被賦予排他模式鎖、受保護的寫入鎖、受保護的讀取鎖或同 時寫入鎖。如果一個進程擁有受保護的讀取鎖,則其它進程不能被賦予排 他模式鎖、受保護的寫入鎖或同時寫入鎖。如果一個進程擁有同時寫入 鎖,則其它進程不能被賦予排他模式鎖、受保護的寫入鎖或受保護的讀取 鎖。如果一個進程擁有同時讀取鎖,則其它進程不能被賦予排他模式鎖。
一種可以同時被一個以上的進程持有的鎖被稱為共享鎖。例如,兩個 進程可以同時持有對相同資源的同時讀取鎖,因此同時讀取鎖是共享鎖。
為了說明的目的,以下描述將參考排他模式鎖、共享鎖和NULL模式鎖。
在一個進程可以執(zhí)行對資源的操作之前,需要該進程得到賦予該進程 對資源執(zhí)行期望操作的權(quán)利的鎖。為了得到鎖,進程向鎖管理器發(fā)送對鎖 的請求。鎖管理器是負責賦予、排隊和跟蹤針對一個或多個資源的鎖的進 程。為了管理對網(wǎng)絡系統(tǒng)中的資源的使用,鎖管理器在網(wǎng)絡中的一個或多 個節(jié)點上被執(zhí)行。
根據(jù)一種現(xiàn)有技術(shù)的實現(xiàn)方式,鎖管理器實現(xiàn)兩種對象資源對象和
鎖。資源對象是與實際資源相對應的數(shù)據(jù)結(jié)構(gòu)。使用鎖管理器的應用建立
實際資源和資源對象之間的映射。每個資源對象具有兩個隊列被賦予隊
列(granted queue)和轉(zhuǎn)換隊列。被賦予隊列是已被賦予的鎖的無序列 表。轉(zhuǎn)換隊列是已被請求但尚未被賦予的鎖的部分有序表。通常,對鎖的 請求實際上就是轉(zhuǎn)換請求,其中持有鎖的進程請求其所持有的鎖從一種模 式的鎖被轉(zhuǎn)換為不同模式的鎖。
鎖是標識進程和鎖模式的數(shù)據(jù)結(jié)構(gòu)。鎖管理器將鎖附加到資源對象的
賦予隊列,以指示鎖中所標識的進程已被賦予了針對與被附加了鎖的資源 對象相對應的資源的鎖中所指示的類型的鎖。
圖1是示出了典型的鎖管理器106的框圖。鎖管理器106是被配置為
管理存儲在存儲器108中的資源對象100的進程。資源對象包括被賦予隊 列102和轉(zhuǎn)換隊列104。鎖管理器106已將三個鎖110、 112和114附加到 被賦予隊列102,并且將一個轉(zhuǎn)換請求130附加到轉(zhuǎn)換隊列104。
所有的鎖和轉(zhuǎn)換請求都具有進程ID部分和鎖模式部分。鎖110的進 程ID部分116指示進程PROC—1擁有鎖110,并且鎖110的鎖模式部分 118指示鎖110是排他鎖。鎖112的進程ID部分120指示鎖112被進程 PROC一2擁有,并且鎖112的鎖模式部分122指示鎖112是NULL模式 鎖。鎖114的進程ID部分124指示鎖114被進程PROC_3擁有,并且鎖 114的鎖模式部分126指示鎖114是NULL鎖。轉(zhuǎn)換請求130的進程ID部 分132指示轉(zhuǎn)換請求130與進程PROC—4相關(guān)聯(lián),并且轉(zhuǎn)換請求130的鎖 模式部分136指示PROC—4當前持有對資源的NULL模式鎖。除了鎖模式 部分136之外,轉(zhuǎn)換請求130還具有指示PROC_4正在請求排他模式鎖的 被請求模式部分134。
鎖管理器106已將鎖110、 112和114附加到被賦予隊列102,指示 PROC—1當前具有對與資源對象100相對應的資源的排他所有權(quán)。鎖管理 器106已將轉(zhuǎn)換請求130附加到轉(zhuǎn)換隊列104,示PROC—4已請求但尚 未被賦予對與資源對象100相關(guān)聯(lián)的資源的排他模式鎖。
關(guān)于任何給定資源的信息可以被存儲在與資源相對應的資源對象中。 每個資源對象被存儲在單一節(jié)點的存儲器中。其上存儲有資源對象的節(jié)點 被稱為該資源對象的管理節(jié)點。
根據(jù)一種鎖管理方法,進程首先對該進程將可能使用的所有資源建立 NULL模式鎖。然后,當進程實際需要訪問資源時,進程請求其NULL模 式鎖被轉(zhuǎn)換為賦予該進程執(zhí)行期望操作的權(quán)利的鎖。
例如,為了刪除表,進程必須得到對與表相對應的資源對象的排他模 式鎖。為了得到排他模式鎖,進程向控制與表相對應的資源對象的鎖管理 器發(fā)送消息。在該消息中,進程請求其當前NULL模式鎖被轉(zhuǎn)換為排他模
式鎖。如果沒有其它進程請求轉(zhuǎn)換,并且如果沒有當前被賦予的鎖會阻止 排他模式鎖的賦予,則該請求進程所持有的當前鎖被轉(zhuǎn)換為排他模式鎖。 一旦鎖管理器執(zhí)行了所請求的轉(zhuǎn)換,鎖管理器就向請求進程發(fā)送消息,指 示所請求的轉(zhuǎn)換操作已被執(zhí)行。
如果進程需要進行訪問以從表中讀取數(shù)據(jù),則該進程必須得到共享 鎖。為了得到共享鎖,進程請求控制與表相對應的資源對象的鎖管理器將 其當前鎖轉(zhuǎn)換為共享鎖。如果沒有其它進程請求轉(zhuǎn)換,并且如果沒有當前 被賦予的鎖阻止共享鎖的賦予,則該請求進程所持有的當前鎖被轉(zhuǎn)換為共 享鎖。
如果已經(jīng)對表賦予了排他模式鎖,則共享鎖不能被賦予。在這些情況 下,鎖轉(zhuǎn)換請求被放在資源對象的轉(zhuǎn)換隊列中。當阻塞進程準備好釋放其 排他鎖時,阻塞進程可以向鎖管理器發(fā)送鎖降級請求。鎖管理器通過將排
他模式鎖轉(zhuǎn)換為允許共享鎖的賦予的次要鎖(lesser lock)來作出響應。隨 后,通過將共享鎖請求從被請求隊列移動到被賦予隊列并向請求進程發(fā)送 消息以通知請求進程共享鎖已被賦予,來賦予共享鎖。
資源對象的轉(zhuǎn)換隊列是保存所有待處理(未被賦予)的鎖請求的部分 有序表。如果待處理鎖請求都沒有被賦予,則未被賦予的鎖請求之一將位 于轉(zhuǎn)換隊列的"頭部"。即使當前被賦予的鎖沒有阻止鎖管理器賦予特定 的鎖請求,但是如果轉(zhuǎn)換隊列不為空,則該鎖請求也被置于轉(zhuǎn)換隊列上。 這種策略防止了 "活鎖(livdock) " , g卩, 一個進程不能在系統(tǒng)中進行, 而其它進程可以進行。
很多進程同時持有對資源的共享鎖的情況是普遍的。持有對特定資源 的共享鎖的一組進程在本文中被統(tǒng)稱為"共享鎖持有者"。
如果共享鎖持有者之一 ("請求者")想要轉(zhuǎn)換成排他模式鎖,則請 求者必須首先向資源的管理節(jié)點發(fā)送轉(zhuǎn)換請求。當共享至排他請求到達資 源的管理節(jié)點中的轉(zhuǎn)換隊列的頭部時,管理節(jié)點向所有共享鎖持有者發(fā)送 向下轉(zhuǎn)換請求消息,要求它們向下轉(zhuǎn)換或關(guān)閉它們的鎖。管理節(jié)點只有在 所有共享鎖持有者向管理節(jié)點確認它們已經(jīng)向下轉(zhuǎn)換了它們的鎖之后才能 將排他鎖賦予請求者。在請求者發(fā)送升級請求的時間與排他鎖被賦予的時
間之間,請求者不得不等待,并且即使請求者已經(jīng)在其緩存中具有資源的 當前備份,也不能開始更新資源或執(zhí)行任何后續(xù)工作。
在本部分中所描述的方法是可以被繼續(xù)研究的方法,而不一定是先前 已經(jīng)構(gòu)想或研究過的方法。因此,除非另外指明,否則不應當僅僅因為這 些方法被包括在本部分中就認為本部分所描述的任一種方法是現(xiàn)有技術(shù)。


在附圖中通過示例而不是通過限制來圖示了本發(fā)明。在附圖中,相似
的標號表示類似的元件,并且其中
圖1是用于管理對資源的鎖的鎖管理器和對象資源的框圖2是圖示了根據(jù)本發(fā)明的實施例、想要修改資源的進程所執(zhí)行的步
驟的流程圖3是圖示了根據(jù)本發(fā)明的實施例、鎖管理器所執(zhí)行的步驟的流程 圖;以及
圖4是可以在其上實現(xiàn)本發(fā)明的實施例的計算機系統(tǒng)的框圖。
具體實施例方式
在下面的描述中,為了說明的目的,給出了大量的具體細節(jié)以提供對 本發(fā)明的完整理解。然而,應當理解本發(fā)明可以在沒有這些具體細節(jié)的情 況下被實行。在其它示例中,公知的結(jié)構(gòu)和設(shè)備以框圖的形式被顯示,以 避免不必要地模糊本發(fā)明。
概覽
以下描述用于減小在進程請求修改資源的許可的時間和該進程被允許 開始修改資源的時間之間的延遲的技術(shù)。為了說明的目的,將給出其中資 源是磁盤區(qū)塊的示例,其中,磁盤區(qū)塊的備份被存儲在緩存中。然而,這 只是這些技術(shù)可以被應用于的資源的一個示例。本發(fā)明的技術(shù)不限于任何 特定類型的資源。
當進程持有對磁盤區(qū)塊的共享鎖時,磁盤區(qū)塊的當前備份通常己存在 于其中進程正在執(zhí)行的節(jié)點的緩存中。以下所描述的技術(shù)允許想要修改資
源的進程("請求者")在不等待資源的管理者允許它們修改資源的情況 下更新它們私有的資源備份。因此,請求者請求更新資源的時間和資源被 更新的時間之間的延遲被減小。
共享至排他升級
為了例示的目的,假設(shè)請求者持有對資源的共享鎖并且想要對資源的 排他鎖。提供了這樣的技術(shù)即使是在共享至排他請求者被賦予排他鎖之 前,該技術(shù)也允許該請求者開始修改(請求者已擁有的)私有的區(qū)塊的當 前備份。
根據(jù)一個實施例,無論何時出現(xiàn)對資源的共享至排他請求,該資源的 管理者都以不同于其它類型的轉(zhuǎn)換請求的方式對待該請求。具體而言,接 收到這樣的請求之后,管理者確定該請求是否可以被立即準予。如果該請 求不能被立即準予,則管理者確定(1)在賦予隊列上是否只有共享鎖持 有者(沒有排他持有者)以及(2)在轉(zhuǎn)換隊列上是否有未決的排他請 求,而不是簡單地將該請求置于轉(zhuǎn)換隊列中。
如果在賦予隊列上只有共享鎖持有者并且在轉(zhuǎn)換隊列上沒有未決的排 他請求,則管理者將轉(zhuǎn)換請求放在轉(zhuǎn)換隊列的頭部并向請求者發(fā)送"繼續(xù) 進行"消息。管理者還向所有當前的共享鎖持有者發(fā)出向下轉(zhuǎn)換請求消 息。
非常有意義的是,即使一個或多個當前被賦予的鎖與被請求的許可不 相容,繼續(xù)進行消息也被發(fā)送,因此防止了許可在當前被準予。因此,繼 續(xù)進行消息指示所請求的許可可能被準予,但是所請求的許可尚未被準 予。
當請求者接收到繼續(xù)進行消息時,請求者可以開始更新私有存儲器中 的區(qū)塊。(1)在繼續(xù)進行消息之后和(2)所請求的許可被準予之前對區(qū)
塊進行的改變在本文中被稱為"先期改變(anticipatory change)"。只有 進行了先期改變的進程才被允許訪問包括先期改變的資源的備份??梢詾?先期改變生成重做記錄,但是在改變?nèi)匀皇窍绕诟淖儠r,被改變的區(qū)塊和 重做記錄都不能被交付(commit)("變成永久性的")。
當所有共享鎖持有者向下轉(zhuǎn)換它們的鎖并向管理者發(fā)送了確認消息
時,管理者向請求者發(fā)送鎖賦予消息,將排他鎖賦予請求者。 一旦請求者 接收到鎖賦予消息,所述改變就不再是"先期改變",而變成"被許可的 改變"。
一旦改變變成了被許可的,該改變就可以被交付。
事務
在諸如數(shù)據(jù)庫系統(tǒng)之類的一些系統(tǒng)內(nèi), 一系列操作可以作為一個"事 務"被執(zhí)行。通過事務進行的改變必須以原子單元來交付。因此,只要事 務具有任何待處理的先期改變,則通過該事務所進行的改變都不可以被交 付。
根據(jù)一個實施例,通過事務所進行的先期改變被跟蹤??梢允褂煤芏?種機制來跟蹤事務的先期改變。本發(fā)明不局限于任何特定類型的跟蹤機 制。被用于跟蹤先期改變的信息在本文中將被統(tǒng)稱為"跟蹤信息"。
當事務接收到對修改特定資源的許可時,跟蹤信息被更新以指示該事 務對所述特定資源進行的任何先期改變都已經(jīng)被許可。只要跟蹤信息指示 通過事務所進行的任何先期改變尚未被許可,則該事務就不被允許交付 (即使該事務的所有操作可能都已經(jīng)通過其它方式被成功地完成)。
一旦所有的先期改變都已變成被許可的改變,事務就可以交付了。當 事務交付時,交付時間(通常以系統(tǒng)交付號碼的形式)被指派給事務。交 付時間根據(jù)需要被添加到為事務所生成的重做記錄上。重做記錄隨后被鏈 接到檢驗點隊列以被成組寫入(flush)磁盤中以使得所述改變成為永久性
的。在改變成為永久性的之后,所述改變可以被其它進程或?qū)嵗?br> (instance)訪問。
修改請求
在前一部分中,描述了其中請求者從共享鎖升級到排他鎖的情形。然 而,這里所描述的技術(shù)可以應用于涉及請求修改利用鎖管理的資源的任何 場景中。因而,例如當請求是針對升級到"同時寫入"鎖或"受保護寫 入"鎖的請求時,同樣可以應用該技術(shù)。對修改資源的許可的請求在本文 中被稱為"修改請求"。
請求者操作
圖2是示出了根據(jù)本發(fā)明的一個實施例、在支持先期改變的系統(tǒng)中的
想要修改資源的事務所執(zhí)行的步驟的流程圖。具體而言,在步驟202中, 想要修改資源的請求者向控制資源的鎖管理器發(fā)送修改請求。在支持先期 改變的系統(tǒng)中,請求者可以接收到繼續(xù)進行消息。如果沒有接收到繼續(xù)進
行消息,則控制從步驟204進行到步驟208,其中請求者將最終接收到鎖 賦予消息。在請求者接收到鎖賦予消息之后,請求者可以修改資源(步驟 210)。
如果請求者接收到繼續(xù)進行消息,則控制從步驟204進行到步驟 206。在步驟206中,請求者在還沒有被賦予進行修改的許可的情況下通 過修改資源的私有備份來進行先期改變。如果請求者是事務,則該請求者 還更新跟蹤信息以反映先期改變。非常有意義的是,在進行了先期改變之 后,請求者可以繼續(xù)做其它工作。該其它工作可以包括進行附加的先期改 變。因此,針對給定事務的跟蹤信息可以指示任意量的待處理的尚未被許 可的改變。
請求者可以在接收到進行先期改變的許可之前繼續(xù)做其它工作的事實 可以帶來非常大的性能獲益。請求許可和接收到許可之間的延遲越長,能 夠在不等待許可的情況下繼續(xù)進行的獲益就越大。因而,先期改變在包括 很多節(jié)點(這些節(jié)點通常共享對相同資源的訪問)的系統(tǒng)中特別有用。在 不具備進行先期改變的能力的情況下,想要修改共享資源的進程必須等待 所有其它節(jié)點進行向下轉(zhuǎn)換。節(jié)點數(shù)目越大,就越可能等待很長時間。
直到先期改變被許可,改變才被"使得成為永久性的"。使改變成為 永久性改變的實際過程可以隨系統(tǒng)而變化。例如,在一些系統(tǒng)中,通過將 標識改變的"重做記錄"成組寫入磁盤中來使改變成為永久性的。 一些系 統(tǒng)可以通過將改變后的區(qū)塊的備份成組寫入磁盤來使改變成為永久性的。 其它系統(tǒng)可以具有使改變成為永久性改變的其它機制。這里所描述的技術(shù) 不受制于任何使改變成為永久性改變的特定機制。
在步驟212中,請求者接收到對修改資源的許可。如上所述,許可的 接收相對于請求者正在執(zhí)行的任何其它工作是異步的,唯一的例外是許可 的接收必須發(fā)生在使改變成為永久性改變之前。
如果請求者是事務,則請求者更新跟蹤信息以反映先期改變已被許
可。如果沒有待處理的先期改變并且請求者已經(jīng)通過其它方式成功地被完 成(步驟214),則請求者所進行的改變被使得成為永久性的并且對其它
進程而言是可見的(步驟216)。如果請求者是事務,并且不是所有的操 作都是成功的且被許可的,則該事務被退回(rolledback)(步驟218)。
鎖管理器操作
圖3是示出了在支持先期請求的系統(tǒng)中的鎖管理器所執(zhí)行的步驟的流 程圖。在步驟302處,資源的管理者接收來自請求者的修改請求。在步驟 304和306處,管理者確定是否存在任何已被準予的修改請求(步驟 304)以及是否存在任何未決的修改請求(步驟306)。
在使用資源對象來跟蹤鎖的實施例中,管理者可以通過檢査鎖對象的 被賦予隊列以確定被賦予隊列上的鎖中是否有賦予修改特權(quán)的鎖來執(zhí)行步 驟304。類似地,管理者可以通過檢查鎖對象的轉(zhuǎn)換隊列以確定轉(zhuǎn)換隊列 上的轉(zhuǎn)換請求中是否有對修改資源的許可的請求來執(zhí)行步驟306。
如果存在任何未決的或者被準予的修改請求,則控制進行到步驟 320,其中修改請求被置于轉(zhuǎn)換隊列上。然而,如果不存在未決的和被賦 予的修改請求,則控制進行到步驟308,其中管理者向請求者發(fā)送繼續(xù)進 行消息,將修改請求放在轉(zhuǎn)換隊列的頭部,并向所有不相容的鎖持有者發(fā) 送向下轉(zhuǎn)換請求。
當管理者最終接收到來自所有不相容的鎖持有者的向下轉(zhuǎn)換確認時, 管理者向請求者發(fā)送鎖賦予消息,并將修改請求從請求隊列的頭部移到被 賦予隊列上。
當前沒有持有共享鎖的請求者的修改請求
在以上所給出的示例中,修改請求來自于已經(jīng)持有對資源的共享鎖的 請求者。因為請求者已經(jīng)持有共享鎖,所以請求者通常將已經(jīng)具有資源的 當前版本的備份。然而,這里所描述的先期修改技術(shù)也可以被應用在修改 請求來自于當前沒有持有共享鎖的請求者的情形中。
根據(jù)一個實施例,當請求者當前沒有持有共享鎖時,管理者使得區(qū)塊 的當前備份被發(fā)送給請求者。 一旦請求者接收到區(qū)塊的備份,請求者就可 以開始進行對區(qū)塊的先期改變。
在一個實施例中,如果管理者具有區(qū)塊的當前備份,則管理者自己將 區(qū)塊的當前備份發(fā)送給請求者。在這種情況下,管理者可以使用相同的消 息來既發(fā)送區(qū)塊又傳送"繼續(xù)進行"消息。
如果管理者不具有區(qū)塊的當前備份,則管理者可以向共享鎖持有者之 一發(fā)送消息以使得該共享鎖持有者向請求者發(fā)送區(qū)塊的當前備份。在這種 情況下,管理者可以單獨地向請求者發(fā)送"繼續(xù)進行消息"。或者,管理 者可以簡單地指示共享鎖持有者將"繼續(xù)進行"消息與區(qū)塊的當前備份一 起發(fā)送給請求者。
在以上給出的示例中,被賦予的、阻止管理者準予修改請求的鎖是共 享鎖。然而,存在這樣的可能因為存在當前被賦予的排他鎖,所以修改 請求不能被準予。在當前被賦予的排他鎖阻止修改請求被準予的情況下, 請求者可以開始進行對"代理"緩沖器的先期改變。在一個實施例中,如 果區(qū)塊的過去圖像是可得到的,則請求者使用區(qū)塊的"過去圖像"作為代 理緩沖器。區(qū)塊的過去圖像是反映區(qū)塊過去的狀態(tài)的區(qū)塊的備份。因而, 區(qū)塊的當前備份可以包含不在過去的圖像中的一些改變。當資源的當前版 本到來時,請求者可以將代理緩沖器中的改變合并到資源的當前版本中。
在這種情況下,請求者通常會接收到來自排他鎖的擁有者的資源的當 前版本。伴隨著該當前版本,排他鎖的擁有者可以包括鎖賦予消息,賦予 請求者對資源進行改變的許可。從而,在請求者能夠?qū)⒏淖兒喜⒌絽^(qū)塊的 當前版本的同時,改變被許可。
根據(jù)一個實施例,為在接收到區(qū)塊的當前版本之前對代理緩沖器進行 的先期改變生成重做。
一旦區(qū)塊的當前版本到來,重做就可以按照類似于
恢復操作的"向前復原(roll-forward)"階段的方式被應用于區(qū)塊的當前 版本。向區(qū)塊的當前版本應用重做使得區(qū)塊反映在重做中所標識的改變。
在一些情形中,是否可以對區(qū)塊進行改變可能取決于區(qū)塊中的當前值 是什么。例如,假設(shè)區(qū)塊包含針對表中的多個行的數(shù)據(jù)。假設(shè)已為表中的 多個列中的一個列設(shè)定了單值約束條件。特定的行是否可以(通過修改區(qū) 塊)被插入到表中可能取決于該插入是否違反了單值約束條件。因此,根 據(jù)一個實施例,在將先期改變合并到區(qū)塊的當前版本中之前,基于區(qū)塊的
當前狀態(tài)執(zhí)行約束條件檢查。
硬件概覽
圖4是示出了可以在其上實現(xiàn)本發(fā)明的實施例的計算機系統(tǒng)400的框 圖。計算機系統(tǒng)400包括用于傳達信息的總線402或其它通信機構(gòu),和與 總線402相耦接的用于處理信息的處理器404。計算機系統(tǒng)400還包括被 耦接到總線402的用于存儲信息和要被處理器404執(zhí)行的指令的主存儲器 406,例如隨機訪問存儲器(RAM)或其它動態(tài)存儲設(shè)備。主存儲器406 還可以被用于存儲在要被處理器404執(zhí)行的指令的執(zhí)行期間的臨時變量或 其它中間信息。計算機系統(tǒng)400還包括被耦接到總線402的用來存儲用于 處理器404的靜態(tài)信息和指令的只讀存儲器(ROM) 408或其它靜態(tài)存儲 設(shè)備。諸如磁盤或光盤的存儲設(shè)備410被提供并耦接到總線402用以存儲 信息和指令。
計算機系統(tǒng)400可以經(jīng)由總線402被耦接到用于向計算機用戶顯示信 息的顯示器412,例如陰極射線管(CRT)。包括字母數(shù)字和其它鍵的輸 入設(shè)備414被耦接到總線402,用于向處理器404傳達信息和命令選擇。 另一種用戶輸入設(shè)備是光標控制器416,例如鼠標、跟蹤球或光標方向 鍵,用于向處理器404傳達方向信息和命令選擇并用于控制顯示器412上 的光標移動。該輸入設(shè)備通常具有兩個軸(第一個軸(例如x軸)和第二 個軸(例如y軸))上的兩個自由度,允許該設(shè)備指定平面中的位置。
本發(fā)明涉及用于實現(xiàn)本文中所描述的技術(shù)的計算機系統(tǒng)400的使用。 根據(jù)本發(fā)明的一個實施例,那些技術(shù)由計算機系統(tǒng)400響應于處理器404 執(zhí)行主存儲器406中所包含的一個或多個具有一個或多個指令的序列而被 執(zhí)行。這些指令可以從諸如存儲設(shè)備410之類的另一機器可讀介質(zhì)讀取到 主存儲器406中。主存儲器406中所包含的指令序列的執(zhí)行使得處理器 404執(zhí)行本文中所描述的處理步驟。在替代實施例中,硬接線電路可以被 用來代替軟件指令或者與之組合起來以實現(xiàn)本發(fā)明。因而,本發(fā)明的實施 例不局限于任何硬件電路和軟件的特定組合。
本文中所使用的術(shù)語"機器可讀介質(zhì)"指參與提供使得機器以特定方 式操作的數(shù)據(jù)的任何介質(zhì)。在使用計算機系統(tǒng)400實現(xiàn)的實施例中,各種
機器可讀介質(zhì)例如被用于向處理器404提供用于執(zhí)行的指令。這種介質(zhì)可 以采用很多形式,包括但不限于非易失性介質(zhì)、易失性介質(zhì)和傳輸介質(zhì)。 非易失性介質(zhì)例如包括光盤或磁盤,例如存儲設(shè)備410。易失性介質(zhì)包括
動態(tài)存儲器,例如主存儲器406。傳輸介質(zhì)包括同軸電纜、銅線和光纖, 包括包含總線402的線。傳輸介質(zhì)也可以采用聲波或光波的形式,例如那 些在無線電波和紅外數(shù)據(jù)通信期間所生成的波。
機器可讀介質(zhì)的常見形式例如包括軟盤、柔性盤、硬盤、磁帶或任何 其它磁性介質(zhì)、CD-ROM、任何其它光介質(zhì)、穿孔卡、紙帶、具有孔圖案 的任何其它物理介質(zhì)、RAM、 PROM禾卩EPROM、 FLASH-EPROM、任何 其它存儲器芯片或卡帶、下文中要描述的載波或者計算機可以讀取的任何 其它介質(zhì)。
各種形式的機器可讀介質(zhì)可以被用于承載一個或多個包括一個或多個 指令的指令序列以供處理器404執(zhí)行。例如,這些指令最初可以承載在遠 程計算機的磁盤上。該遠程計算機可以將這些指令載入到其動態(tài)存儲器 中,并使用調(diào)制解調(diào)器在電話線上發(fā)送這些指令。計算機系統(tǒng)400的本地 調(diào)制解調(diào)器可以接收到電話線上的數(shù)據(jù),并使用紅外發(fā)射器將數(shù)據(jù)轉(zhuǎn)換成 紅外信號。紅外檢測器可以接收到紅外信號中所承載的數(shù)據(jù),并且適當?shù)?電路可以將數(shù)據(jù)置于總線402上??偩€402將數(shù)據(jù)運送到主存儲器406, 處理器404從主存儲器406獲取指令并執(zhí)行指令。主存儲器406所接收到 的指令可以可選地在處理器404執(zhí)行之前或之后被存儲在存儲設(shè)備410 上。
計算機系統(tǒng)400還包括被耦接到總線402的通信接口 418。通信接口 418提供雙向數(shù)據(jù)通信,與被連接到本地網(wǎng)絡422的網(wǎng)絡鏈路420耦接。 例如,通信接口 418可以是綜合業(yè)務數(shù)字網(wǎng)(ISDN)卡或調(diào)制解調(diào)器,向 相應類型的電話線提供數(shù)據(jù)通信連接。作為另一示例,通信接口 418可以 是局域網(wǎng)(LAN)卡,向兼容的LAN提供數(shù)據(jù)通信連接。無線鏈路也可 以被實現(xiàn)。在任何這樣的實現(xiàn)方式中,通信接口 418發(fā)送并接收承載表示 各種類型信息的數(shù)字數(shù)據(jù)流的電信號、電磁信號或光信號。
網(wǎng)絡鏈路420通常通過一個或多個網(wǎng)絡向其它數(shù)據(jù)設(shè)備提供數(shù)據(jù)通
信。例如,網(wǎng)絡鏈路420可以通過本地網(wǎng)絡422提供到主機計算機424的 連接或者提供到互聯(lián)網(wǎng)業(yè)務提供商(ISP) 426所操作的數(shù)據(jù)設(shè)備的連接。 ISP 426又通過現(xiàn)在通常被稱為"互聯(lián)網(wǎng)"428的全球分組數(shù)據(jù)通信網(wǎng)絡提 供數(shù)據(jù)通信業(yè)務。本地網(wǎng)絡422和互聯(lián)網(wǎng)428都使用承載數(shù)字數(shù)據(jù)流的電 信號、電磁信號或光信號。經(jīng)過各個網(wǎng)絡的信號和網(wǎng)絡鏈路420上的經(jīng)過 通信接口 418的信號是傳輸信息的載波的示例形式,所述信號承載去往和 來自計算機系統(tǒng)400的數(shù)字數(shù)據(jù)。
計算機系統(tǒng)400可以通過網(wǎng)絡、網(wǎng)絡鏈路420和通信接口 418發(fā)送消 息并接收包括程序代碼的數(shù)據(jù)。在互聯(lián)網(wǎng)的示例中,服務器430可以通過 互聯(lián)網(wǎng)428、 ISP 426、本地網(wǎng)絡422和通信接口 418發(fā)送針對應用程序的 被請求代碼。
所接收到的代碼在被接收時可以被處理器404執(zhí)行,并且/或者可以被 存儲在存儲設(shè)備410或其它非易失性存儲裝置中以供以后的執(zhí)行。按照這 種方式,計算機系統(tǒng)400可以按照載波的形式來獲得應用代碼。
在前述說明書中,參考大量的特定細節(jié)描述了本發(fā)明的實施例,這些 特定細節(jié)是可以隨著實現(xiàn)方式而改變的。因而,關(guān)于本發(fā)明是什么、申請 人希望什么成為本發(fā)明的唯一且排他的指示標準就是本申請所發(fā)布的具有 特定形式的權(quán)利要求書(包括任何后續(xù)的更正)。本文中所明確給出的對 權(quán)利要求中所包含的術(shù)語的任何定義應支配在權(quán)利要求中所用到的這些術(shù) 語的意思。因此,在權(quán)利要求中沒有明確引述的限制、要素、特性、特 征、優(yōu)點或?qū)傩圆粦斠匀魏畏绞较拗七@些權(quán)利要求的范圍。因此,說明 書和附圖應被認為是示例性的而非限制性的。
權(quán)利要求
1. 一種機器執(zhí)行的方法,包括發(fā)送對執(zhí)行涉及特定資源的改變的許可的請求;在接收到所述許可之前,執(zhí)行所述改變,同時阻止所述改變成為永久性改變;在執(zhí)行了所述改變之后,接收執(zhí)行所述改變的許可;以及在接收到執(zhí)行所述改變的許可之后,停止阻止所述改變成為永久性改變。
2. 如權(quán)利要求1所述的方法,其中所述改變作為事務的一部分而被執(zhí) 行,并且執(zhí)行所述改變同時阻止所述改變成為永久性改變的步驟包括對所述特定資源的私有備份執(zhí)行所述改變;以及 阻止所述事務交付。
3. 如權(quán)利要求2所述的方法,其中所述方法還包括維護跟蹤信息,該跟蹤信息指示所述事務是否進行了任何尚未被許可 的改變;以及只要所述跟蹤信息指示所述事務進行了任何尚未被許可的改變,就阻 止所述事務交付。
4. 如權(quán)利要求1所述的方法,其中對執(zhí)行所述改變的許可的請求被從請求者發(fā)送到所述資源的管理者;并且所述方法還包括所述管理者判斷(a)是否有針對所述資源的當前被賦予的鎖賦予 了修改所述資源的許可,和(b)是否有未決的鎖請求是對修改所述 資源的許可的請求;以及響應于判斷出沒有針對所述資源的當前被賦予的鎖賦予了修改所 述資源的許可以及沒有未決的鎖請求是對修改所述資源的許可的請 求,所述管理者向所述請求者發(fā)送繼續(xù)進行消息; 所述請求者響應于接收到所述繼續(xù)進行消息而執(zhí)行所述改變。
5. 如權(quán)利要求4所述的方法,其中所述方法還包括響應于判斷出沒有針對所述資源的當前被賦予的鎖賦予了修改所述資 源的許可以及沒有未決的鎖請求是對修改所述資源的許可的請求,所述管 理者將對修改許可的請求放在針對所述資源的未決的鎖請求隊列的頭部。
6. 如權(quán)利要求1所述的方法,其中對執(zhí)行所述改變的許可的請求被從請求者發(fā)送到所述資源的管理者; 在所述請求者發(fā)送所述請求時,所述請求者持有對所述資源的共享鎖 并且具有所述資源的當前版本的私有備份;并且執(zhí)行所述改變的步驟包括執(zhí)行對所述資源的當前版本的私有備份的改變。
7. 如權(quán)利要求1所述的方法,其中對執(zhí)行所述改變的許可的請求被從請求者發(fā)送到所述資源的管理者; 在所述請求者發(fā)送所述請求時,另一進程持有對所述資源的排他鎖;并且執(zhí)行所述改變的步驟包括在代理緩沖器上執(zhí)行所述改變;并且當所述請求者接收到所述資源的當前版本的備份時,將來自所述 代理緩沖器的所述改變合并到所述資源的當前版本的備份中。
8. 如權(quán)利要求7所述的方法,其中所述方法還包括響應于在所述代理 緩沖器上執(zhí)行所述改變而生成重做。
9. 如權(quán)利要求7所述的方法,其中在不檢查是否違反約束條件的情況下,在所述代理緩沖器上執(zhí)行所述 改變;并且只有在檢查是否違反約束條件之后,所述改變才被合并到所述當前版 本的備份中。
10. 如權(quán)利要求1所述的方法,其中對執(zhí)行所述改變的許可的請求被從請求者發(fā)送到所述資源的管理者; 在所述請求者發(fā)送所述請求時,所述請求者不持有對所述資源的共享 鎖,但是一個或多個其它進程的集合持有對所述資源的共享鎖;并且所述方法還包括使所述進程集合中的進程向所述請求者發(fā)送所述資源 的當前備份。
11. 如權(quán)利要求10所述的方法,其中所述請求者響應于接收到繼續(xù)進行消息來執(zhí)行所述改變;并且 所述方法還包括使所述進程集合中的所述進程利用所述資源的當前備 份來包括所述繼續(xù)進行消息。
12. 如權(quán)利要求IO所述的方法,其中所述請求者響應于接收到繼續(xù)進行消息而執(zhí)行所述改變;并且 所述方法還包括使所述資源的管理者向請求者發(fā)送所述繼續(xù)進行消息。
13. —種機器執(zhí)行的方法,包括在資源的管理者處,接收來自請求者的請求,其中所述請求是針對修 改所述資源的許可的請求;在一個或多個當前被賦予的鎖阻止所述管理者賦予所述請求者修改所 述資源的許可的同時,所述管理者使所述請求者接收繼續(xù)進行消息,該繼 續(xù)進行消息允許所述用戶對所述資源進行先期改變,但是阻止所述改變成 為永久性改變;當沒有當前被賦予的鎖阻止所述管理者賦予所述請求者對修改所述資 源的許可時,所述管理者向所述請求者發(fā)送鎖賦予消息,該鎖賦予消息允 許所述請求者使所述改變成為永久性的。
14. 如權(quán)利要求13所述的方法,其中所述方法還包括使得所述管理者 將所述請求放在請求隊列的頭部,其它先前所接收的針對所述資源的鎖請 求之前。
15. 如權(quán)利要求13所述的方法,其中所述方法還包括接收到所述請求之后,所述管理者判斷是否有被賦予或被請求的鎖是賦予對修改所述資源的許可的鎖;以及響應于判斷出沒有被賦予或被請求的鎖是賦予對修改所述資源的許可 的鎖,所述管理者使得所述請求者接收繼續(xù)進行消息。
16. 如權(quán)利要求13所述的方法,其中所述請求者持有對所述資源的共享鎖;并且所述管理者通過向所述請求者發(fā)送繼續(xù)進行消息來使所述請求者接收 所述繼續(xù)進行消息。
17. 如權(quán)利要求13所述的方法,其中 所述請求者不持有對所述資源的共享鎖;并且所述管理者通過使得不持有對所述資源的共享鎖的進程向所述請求者 發(fā)送(a)針對所述請求者的所述資源的當前備份和(b)繼續(xù)進行消息來 使得所述請求者接收到所述繼續(xù)進行消息。
18. —種存儲指令的計算機可讀介質(zhì),所述指令在被執(zhí)行時使得一個 或多個處理器執(zhí)行權(quán)利要求1-17中的任一個所述的方法。
19. 一種計算機系統(tǒng),包括一個或多個處理器和包含指令的存儲器, 所述指令在被所述一個或多個處理器執(zhí)行時使得所述計算機系統(tǒng)執(zhí)行權(quán)利 要求1-17中的任一個權(quán)利要求所述的方法。
全文摘要
一種方法和系統(tǒng)被提供用于對通過加鎖機制管理的資源執(zhí)行先期改變。想要修改資源的實體(例如數(shù)據(jù)庫系統(tǒng)中的事務)請求修改資源的許可。但是,在接收到許可之前,實體對資源的私有版本進行先期改變。這些實體被阻止將先期改變變成永久性改變,直到它們接收到對進行改變的許可為止。因為它們可以在接收到許可之前進行改變并進行其它操作,所以接收許可時的延遲對它們性能的負面影響較小。
文檔編號G06F9/46GK101390055SQ200780004978
公開日2009年3月18日 申請日期2007年2月9日 優(yōu)先權(quán)日2006年2月10日
發(fā)明者威爾遜·偉信·陳, 安格洛·普魯西諾, 王德峰, 邁克爾·祖魯 申請人:甲骨文國際公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
辽中县| 通渭县| 静乐县| 奎屯市| 资溪县| 万盛区| 监利县| 元谋县| 体育| 个旧市| 泗洪县| 廉江市| 崇左市| 金川县| 抚州市| 南充市| 盖州市| 迭部县| 抚宁县| 泰兴市| 光山县| 金山区| 逊克县| 上虞市| 安徽省| 五常市| 宣汉县| 合江县| 任丘市| 富平县| 格尔木市| 三门县| 无为县| 财经| 涞源县| 高邮市| 沅陵县| 比如县| 桑植县| 洛川县| 汪清县|