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

用于在第一存儲器中跟蹤對象的方法和裝置與流程

文檔序號:11530623閱讀:247來源:國知局
用于在第一存儲器中跟蹤對象的方法和裝置與流程

本發(fā)明涉及一種用于在多個時間間隔期間在第一存儲器中跟蹤對象的方法和裝置。本發(fā)明還涉及一種存儲程序代碼的計算機可讀存儲介質(zhì),該程序代碼用于執(zhí)行一種用于在多個時間間隔期間在第一存儲器中跟蹤對象的方法。



背景技術(shù):

硬件的發(fā)展已使得許多重要的高更新速率事務(wù)應(yīng)用能夠完全在存儲器中執(zhí)行。此類應(yīng)用包括事件處理系統(tǒng)、電子交易系統(tǒng)、多人游戲、電信領(lǐng)域服務(wù)控制應(yīng)用、測量系統(tǒng)、科學(xué)模擬和許多其它應(yīng)用。

這些應(yīng)用中更新事務(wù)的耐久性通常由周期性檢查點檢查進(jìn)程和邏輯重做日志提供,周期性檢查點查檢進(jìn)程將一致存儲器狀態(tài)刷新到永久性存儲,邏輯重做日志記錄連續(xù)檢查點之間的所有修改請求。在系統(tǒng)故障的情況下,恢復(fù)進(jìn)程使用最新的永久性檢查點來初始化存儲器狀態(tài),并使用重放程序來重放重做日志以重新創(chuàng)建故障發(fā)生時間之前的點時的應(yīng)用狀態(tài)。

在此類高更新速率系統(tǒng)中,檢查點效率和不妨礙正常應(yīng)用操作是至關(guān)重要的。為了不妨礙高更新速率并實現(xiàn)頻繁檢查點檢查,檢查點檢查進(jìn)程必須開銷非常低并且效率高。頻繁的檢查點檢查反過來減小了重做日志大小并縮短了與其相關(guān)聯(lián)的恢復(fù)時間時日志重放持續(xù)時間。由于檢查點反復(fù)運行,僅檢測和持久化自上一檢查點發(fā)生變化的對象的增量檢查點檢查方法受到高度重視。

典型的檢查點檢查方法利用拍攝各種粒度的快照的特定方法,因此檢查點管理的邏輯與拍攝快照的邏輯是緊密結(jié)合的。

例如,更新時復(fù)制方法將應(yīng)用對象分組成塊,并且每當(dāng)對象在時間間隔期間被改變時將每個塊復(fù)制到影子狀態(tài)。由于更新線程并發(fā)更新應(yīng)用狀態(tài),因此更新線程需要獲取更新線程引用的塊上的鎖。通過改變存儲器塊的大小,更新時復(fù)制在復(fù)制開銷與鎖定開銷之間進(jìn)行均衡。更新時復(fù)制方法導(dǎo)致較大開銷和顯著延遲,使得它不適合用于高速更新。另外,在新檢查點檢查開始時,這種方法會靜默更新以重置更新標(biāo)記和循環(huán)影子對象的內(nèi)存。

免等待曲折方法(wait-freezigzagmethod)為每個元組預(yù)分配復(fù)本空間,并標(biāo)記哪一副本保存元組的快照。在新的檢查點開始前,應(yīng)用需要靜默其更新以便一致地標(biāo)記每個元組的副本之一來用作下一快照元組。

另一種流行的技術(shù)是批量復(fù)制,通過該技術(shù)整個應(yīng)用狀態(tài)被復(fù)制以用于檢查點檢查。批量復(fù)制更新導(dǎo)致高延遲,并且它并不適用于其中例如復(fù)雜對象結(jié)構(gòu)要求“深度復(fù)制”的某些應(yīng)用。

實驗已經(jīng)表明,沒有一種已知的快照方法適合維持更新速率的整個動態(tài)范圍。所有的上述方法都涉及上述特定快照拍攝方法,因而具有高復(fù)雜性。由于這種復(fù)雜性,變化集的定義和高效計算可能代價高昂。另外,現(xiàn)有技術(shù)通常導(dǎo)致特定應(yīng)用鎖定或更新靜默的強制執(zhí)行。



技術(shù)實現(xiàn)要素:

本發(fā)明的目標(biāo)在于提供一種克服一個或多個現(xiàn)有技術(shù)的上述問題的用于在多個時間間隔期間在第一存儲器中跟蹤對象的方法和裝置。本發(fā)明的另一目標(biāo)在于提供一種存儲用于執(zhí)行這種方法的程序代碼的計算機可讀存儲介質(zhì)。

本發(fā)明的第一方面提供一種用于在多個時間間隔期間在第一存儲器中跟蹤對象的方法,所述對象包括一個或多個狀態(tài)變量,其中所述方法包括以下步驟:

一個或多個更新線程更新已變化對象的狀態(tài)變量,所述已變化對象是當(dāng)前時間間隔期間已變化的對象,

當(dāng)新的時間間隔開始時,一個或多個測試線程為每個對象創(chuàng)建捕獲所述對象的狀態(tài)并且對應(yīng)于所述對象的影子對象,

所述一個或多個測試線程評估所述影子對象的狀態(tài)變量以確定包括非復(fù)制變化的一個或多個非復(fù)制影子對象,

所述一個或多個測試線程將所述一個或多個非復(fù)制影子對象復(fù)制到第二存儲器,

所述一個或多個測試線程確定所述復(fù)制所述一個或多個非復(fù)制影子對象的步驟是否成功,以及

所述一個或多個測試線程更新對應(yīng)于復(fù)制成功的所述一個或多個非復(fù)制影子對象的對應(yīng)對象的狀態(tài)變量,

其中所述狀態(tài)變量的后續(xù)比特對應(yīng)于后續(xù)時間間隔,并且其中所述一個或多個更新線程和所述一個或多個測試線程對所述狀態(tài)變量的不相交比特集進(jìn)行操作。

創(chuàng)建對應(yīng)于所述對象并且捕獲所述對象的所述狀態(tài)的影子對象可以例如通過簡單地復(fù)制所述對象來實現(xiàn)。

將非復(fù)制影子對象復(fù)制到第二存儲器還包括其中所述非復(fù)制影子對象的狀態(tài)被持久化在所述第二存儲器上的情況。

根據(jù)本發(fā)明的第一方面,一個或多個更新線程可以更新對象,例如應(yīng)用的存儲器駐留對象,并將更新后對象標(biāo)記為當(dāng)前時間間隔期間發(fā)生變化,而另一組線程,即所述一個或多個測試線程,創(chuàng)建影子對象并測試所述影子對象以得到任何先前變化。所述一個或多個更新線程和所述一個或多個測試線程對所述變化狀態(tài)變量中的不相交比特集進(jìn)行操作,并對其進(jìn)行相應(yīng)地標(biāo)記。

每個所述對象具有指示所述對象是否被改變的狀態(tài)變量。所述一個或多個更新線程和所述一個或多個測試線程訪問所述狀態(tài)變量。具體而言,所述一個或多個更新線程可以訪問所述對象本身的所述狀態(tài)變量,而所述一個或多個測試線程訪問所述影子對象的所述狀態(tài)變量。

所述方法確保所述一個或多個更新線程和所述一個或多個測試線程對所述狀態(tài)變量的不相交比特集進(jìn)行操作。因此,避免了其中結(jié)果不確定地取決于所涉及的線程之間的定時的競爭情況。

在根據(jù)所述第一方面的所述方法的第一實施方式中,創(chuàng)建所述影子對象包括派生子進(jìn)程的步驟。

派生子進(jìn)程,例如使用fork()系統(tǒng)調(diào)用,創(chuàng)建其地址空間用作所述快照的子進(jìn)程。因此,創(chuàng)建了快照一致的狀態(tài)。父進(jìn)程的數(shù)據(jù)(例如,包括所述對象)可以在每當(dāng)數(shù)據(jù)變化發(fā)生時根據(jù)os頁面粒度以動態(tài)方式(寫入時復(fù)制)懶惰地“復(fù)制”。創(chuàng)建所述影子對象的所述基于派生的方法例示了快照與變化集計算之間的清晰的邏輯分離。

根據(jù)所述第一方面的所述方法的第二實施方式中,所述方法是用于創(chuàng)建所述對象的永久性副本的檢查點檢查方法,其中所述一個或多個非復(fù)制影子對象被復(fù)制到永久性存儲,特別是硬盤。這對于確保對所述對象的改變不會例如由于電力故障而丟失是尤其相關(guān)的,電力故障可能影響所述第一存儲器但不會影響所述永久性存儲。

因此,本發(fā)明的所述方法可以在增量的、快照一致的檢查點過程的上下文中使用,所述增量的、快照一致的檢查點過程在通常設(shè)置中可以例如定義如下:

存在連續(xù)地修改一組存儲器駐留對象的一組更新線程。

在檢查點時,拍攝所述應(yīng)用存儲器狀態(tài)的一致快照,從而捕獲不可變對象內(nèi)的一致的存儲器狀態(tài),稱為影子對象。所述影子對象的被所述更新線程相對于上一(成功)檢查點修改的被稱為已變化集的子集被刷新到所述磁盤。

如果所述前一檢查點不成功,用于所述當(dāng)前檢查點和所述前一檢查點的變化集被合并,即刷新到磁盤的所述變化集被計算為所述當(dāng)前變化集與所述前一變化集的并集。

在根據(jù)所述第一方面的所述方法的第三實施方式中,所述方法包括當(dāng)檢查點被請求時開始新的時間間隔的步驟。因此,時間間隔的順序?qū)?yīng)于檢查點的順序。

在根據(jù)所述第一方面的所述方法的第四實施方式中,所述一個或多個更新線程使用指示當(dāng)前時間間隔的標(biāo)記掩模來更新所述一個或多個已變化對象的所述狀態(tài)變量,和/或所述一個或多個測試線程使用指示其間成功復(fù)制所述一個或多個非復(fù)制影子對象的先前時間間隔的測試掩模來更新所述狀態(tài)變量。

任何線程在時間間隔中對任何對象的更新可以由所述一個或多個更新線程進(jìn)行標(biāo)記,所述一個或多個更新線程將所述對象的狀態(tài)變量設(shè)置為所述狀態(tài)變量與所述標(biāo)記掩模在該時間間隔時的特定狀態(tài)的按位或。測試對象是否被改變可以通過將所述時間間隔的所述特定測試掩模與所述狀態(tài)變量的按位與跟零進(jìn)行比較來執(zhí)行。

所述測試掩模和所述標(biāo)記掩模指示不同的時間間隔。因此,使用這些掩模來訪問所述對象的狀態(tài)變量(以及所述對應(yīng)影子對象的所述狀態(tài)變量)是確保所述一個或多個更新線程和所述一個或多個測試線程總是對所述各狀態(tài)變量的不相交比特集進(jìn)行操作的一種特定方式。如上所述,這例如對于避免所述方法的競爭情況和不確定表現(xiàn)是重要的。

在根據(jù)所述第一方面的第四實施方式的所述方法的第五實施方式中,更新所述標(biāo)記掩膜包括自動旋轉(zhuǎn)其比特值,并且更新所述對象的所述狀態(tài)變量包括分配所述對象的與所述標(biāo)記掩模或組合的所述狀態(tài)變量。因此,所述標(biāo)記掩模可以通過將其左旋轉(zhuǎn)一比特而前進(jìn),從而自動開始新的時間間隔。這是更新所述標(biāo)記掩模和使用所述標(biāo)記掩模來訪問所述狀態(tài)變量的特別高效的方式。

在本發(fā)明實施例中,如果所述上一檢查點是成功的,那么所述測試掩模在當(dāng)前時間間隔期間保持所述標(biāo)記掩模自所述上一時間間隔的值。因此,在所述檢查點檢查間隔期間,新變化的對象被所述新標(biāo)記掩模標(biāo)記,而使用所述前一標(biāo)記掩模對它們的影子對象進(jìn)行測試以得到變化。在所述時間間隔結(jié)束時,所述測試掩模被設(shè)置為所述標(biāo)記掩膜的值。此外,所述狀態(tài)變量中表示所述檢測到的對象的所述變化的比特被重置為零。如果所述檢查點由于某種原因失敗,所述測試掩??梢栽O(shè)置為自身與所述標(biāo)記掩膜的值的按位或,從而實現(xiàn)在下一時間間隔中對所述當(dāng)前已變化和先前已變化的對象的測試。

在根據(jù)所述第一方面的所述方法的第六實施方式中,評估所述狀態(tài)變量包括自動評估所述測試掩模與所述狀態(tài)變量的按位與組合。這是使用所述測試掩模評估所述狀態(tài)變量的特別高效的方式。

在根據(jù)所述第一方面的所述方法的第七實施方式中,當(dāng)確定所有對象已被成功復(fù)制時,所述測試掩模被設(shè)置所述標(biāo)記掩模的值,和/或當(dāng)確定所述已變化對象中的至少一個的復(fù)制失敗時,所述測試掩模被設(shè)置為與所述測試掩?;蚪M合的所述標(biāo)記掩模。

在根據(jù)所述第一方面的所述方法的第八實施方式中,所述測試掩模和/或所述標(biāo)記掩模被初始化為1。這提供了所述方法的明確定義的起點。

如果存在比所述狀態(tài)變量可以存儲的更多的檢查點和時間間隔,所述方法可以使用環(huán)繞,即,它再次從所述狀態(tài)變量和所述掩模的第一比特開始。例如,如果所述狀態(tài)變量和所述測試掩模以及所述標(biāo)記掩模是32比特變量,那么這些32比特可以對應(yīng)于第一32個時間間隔,并相應(yīng)地對應(yīng)于第一32個檢查點,如果所述方法是檢查點檢查方法的話。對于第33個檢查點,第一比特可以再次使用。換句話說,編號為n+1(其中n是所述標(biāo)記掩模和/或所述狀態(tài)變量的按比特計大小)的時間間隔再次對應(yīng)于所述標(biāo)記掩模和所述狀態(tài)變量的第一比特。

如果對于多于n個先前間隔存在未復(fù)制變化,這可能導(dǎo)致所述方法“遺忘”一些未復(fù)制變化。因此,所述第一方面的所述方法可以包括驗證對于多于n個先前間隔是否存在未復(fù)制變化的步驟,其中n是所述狀態(tài)變量、所述標(biāo)記掩模和/或所述測試掩模的比特數(shù)量。在這種情況下,所述方法可以包括生成可以通知操作者所述檢查點檢查不成功的警報信號例如視覺和/或聽覺信號的步驟。所述方法也可以隨后自動改變?yōu)橐环N不同的生成一致檢查點的方法。例如,由于不再可能跟蹤新變化,作為一種應(yīng)急措施,所述方法可以恢復(fù)為針對所述檢查點中的每個檢查點創(chuàng)建所有對象的副本。這是耗費資源的,但與不存儲已變化對象相比可能是優(yōu)選的。

在根據(jù)所述第一方面的所述方法的第九實施方式中,所述標(biāo)記掩模和/或所述測試掩模是全局變量和/或所述對象的所述狀態(tài)變量是所述對象的局部變量。通過使用局部變量,可以確保只有所述對象本身可以訪問它們的狀態(tài)變量,即,可以防止對它們的狀態(tài)變量的未授權(quán)訪問。

在根據(jù)所述第一方面的所述方法的第十實施方式中,對象的狀態(tài)變量和對應(yīng)影子對象的狀態(tài)變量是共用的。這允許更為高效的實施方式,因為可以避免所述狀態(tài)變量的不必要的復(fù)制。

在根據(jù)所述第一方面的所述方法的第十一實施方式中,更新所述對應(yīng)對象的所述狀態(tài)變量包括將所述狀態(tài)變量中的一個或多個設(shè)置為所述狀態(tài)變量中的所述一個或多個的按位異或組合以及所述狀態(tài)變量與所述測試掩模的所述按位與組合。

在根據(jù)所述第一方面的所述方法的第十二實施方式中,所述對象的所述狀態(tài)變量由所述對象進(jìn)行管理。這可以適用于所述(初始)對象以及對應(yīng)于所述對象的所述影子對象。這種實現(xiàn)確保了對所述狀態(tài)變量的未授權(quán)訪問被防止。

根據(jù)本發(fā)明的第二方面,提供了一種用于在多個時間間隔期間在第一存儲器中跟蹤對象的裝置,其中所述裝置包括所述第一存儲器、第二存儲器、第一處理核心和第二處理核心,其中

所述第一處理核心用于執(zhí)行一個或多個更新線程,所述一個或多個更新線程更新已變化對象的狀態(tài)變量,所述已變化對象是在當(dāng)前時間間隔期間已變化的對象,并且

所述第二處理核心用于執(zhí)行執(zhí)行以下步驟的一個或多個測試線程:

當(dāng)新的時間間隔開始時,為每個對象創(chuàng)建捕獲所述對象的狀態(tài)并且對應(yīng)于所述對象的影子對象,

評估所述影子對象的狀態(tài)變量以確定包括非復(fù)制變化的一個或多個非復(fù)制影子對象,

將所述一個或多個非復(fù)制影子對象復(fù)制到第二存儲器,

確定復(fù)制所述一個或多個非復(fù)制影子對象是否成功,以及

更新對應(yīng)于復(fù)制成功的所述一個或多個非復(fù)制影子對象的對應(yīng)對象的狀態(tài)變量,

其中所述狀態(tài)變量的后續(xù)比特對應(yīng)于后續(xù)時間間隔,并且其中所述一個或多個更新線程和所述一個或多個測試線程對所述狀態(tài)變量的不相交比特集進(jìn)行操作。具體而言,所述裝置用于執(zhí)行所述第一方面或所述第一方面的所述實施方式之一的所述方法。也就是說,所述裝置用于包括必要裝置以執(zhí)行所述第一方面或所述第一方面的所述實施方式之一的所述方法。

本發(fā)明的第三方面提供一種存儲程序代碼的計算機可讀存儲介質(zhì),所述程序代碼包括用于執(zhí)行所述第一方面或所述第一方面的所述實施方式之一的所述方法的指令。

如上所述,本發(fā)明實施例可以強加所述拍攝快照的方法與所述變化集計算方法之間的關(guān)注點的明確分離。可以消除暫停更新線程的需要。所述一個或多個更新線程的標(biāo)記開銷可以是輕量的并且無需等待,因為沒有使用鎖。在一些實施例中,所有對象的變化狀態(tài)變量利用按位運算自動地更新。在實施例中,變化可以跨越連續(xù)檢查點進(jìn)行跟蹤,下一檢查點檢查開始是自動且瞬時的。所述方法的正確性,包括避免競爭情況,包含在其設(shè)計之中。最后,以上特征可以意味著冪等檢查點:盡管有故障,但所有數(shù)據(jù)對象變化都被持久化。

附圖說明

為了更清楚地說明本發(fā)明實施例中的技術(shù)特征,下面將對實施例描述中所需要使用的附圖作簡單地介紹。下面描述中的附圖僅僅是本發(fā)明的一些實施例,這些實施例在不違背本發(fā)明如權(quán)力要求書中所定義的保護(hù)范圍的情況下,可以進(jìn)行修改。

圖1示出根據(jù)本發(fā)明的將多個時間間隔期間的對象變化持久化的方法的示意圖,

圖2a示出本發(fā)明實施例的由一個或多個測試線程執(zhí)行的方法步驟的流程圖,以及

圖2b示出本發(fā)明實施例的由一個或多個更新線程執(zhí)行的方法步驟的流程圖。

具體實施方式

圖1提供檢查點方法的圖示,其中在三個時間間隔11、12、13上跟蹤四個對象31、32、33和34。第一時間間隔11先于第一檢查點21。第二和第三間隔12、13被定義為第一、第二和第三檢查點21、22、23之間的間隔。第四時間間隔14在第三檢查點24之后。第一和第四對象31、34在第一間隔11中被改變(利用參考編號41、42指示)。第四對象在第二間隔12中再次被改變43。在第三間隔13中,第二和第三對象32、33被改變44、45。

在第一時間間隔11(其在第一檢查點21時結(jié)束)中,變化集由第一和第四對象31、34,即在第一檢查點21之前被修改的對象,組成。在第一檢查點時,即當(dāng)?shù)诙r間間隔開始時,對象被標(biāo)記為相對于第一檢查點發(fā)生變化。由第一和第四對象31、34組成的變化集在第二時間間隔期間被成功持久化。

在第三時間間隔開始時,由第四對象組成的變化集被檢測到,即檢測到obj4已在第一和第二檢查點21、22之間被修改過。嘗試將第二變化集刷新到磁盤。這導(dǎo)致(由于未知原因)磁盤寫入失敗。在第四時間間隔14中,計算所得變化集由第二、第三和第四對象32、33、34組成。這一變化集來自在第三時間間隔13中未能持久化的第四對象34與由被檢測為在第三時間間隔13中發(fā)生變化的第二和第三對象32、33組成的變化集的并集。

一般而言,通過應(yīng)用概念“關(guān)注點分離”,只要創(chuàng)建了對象的狀態(tài)的一致的不可變副本,快照捕捉的方法就不必為檢查點檢查方法的關(guān)注點。

在新的檢查點開始時,需要保留對象的相對于上一檢查點已變化的狀態(tài)變量,連同將所有對象標(biāo)記為在即將來臨的檢查點的持續(xù)時間期間未變化,所有這些在存在多個并行更新時進(jìn)行。

圖2a是測試線程執(zhí)行的方法步驟的流程圖。圖2a中所示的實施例是基于存儲器中數(shù)據(jù)庫fork()的、快照一致的且增量的檢查點方法的示例。

下文中,change_mark_mask是標(biāo)記掩膜的示例,change_test_mask是測試掩模的示例,change_status、change_status_i和change_status_j是對象和/或影子對象的狀態(tài)變量的示例。

存在與它們之一在數(shù)據(jù)庫中運行的若干線程,稱為測試線程,以管理增量檢查點的執(zhí)行。測試線程在步驟s10中旋轉(zhuǎn)change_mark_mask,在s20中派生子進(jìn)程,從而創(chuàng)建與對應(yīng)于父線程的對象的影子對象一致的快照,并且隨后在步驟s30中父測試線程等待子進(jìn)程報告其退出狀態(tài)。

在步驟s25中,控制流程取決于是父進(jìn)程還是子進(jìn)程被執(zhí)行。

在步驟s50中,子進(jìn)程在應(yīng)用狀態(tài)測試中遍歷所有影子對象,如果它們已使用change_test_mask被改變的話。這是通過對change_test_mask與對象的change_status成員變量進(jìn)行和運算完成的。如果結(jié)果為非零,則意味著檢測到變化,并且隨后該影子對象被持久化到文件系統(tǒng)作為新文件,而將現(xiàn)存文件復(fù)制到備份副本(步驟s60)。如果所有的新文件被安全地存儲在文件系統(tǒng)中,那么檢查點被認(rèn)為是成功的。否則,如果任何新文件未能被存儲在文件系統(tǒng)中,所有的備份副本被恢復(fù)為當(dāng)前檢查點文件(步驟s80)。在這種情況下,子進(jìn)程退出并報告失敗作為其退出狀態(tài)。

當(dāng)子進(jìn)程退出時,父進(jìn)程醒來(步驟s30)并測試子進(jìn)程的退出狀態(tài)。如果退出狀態(tài)是成功的,父進(jìn)程清除change_status中表示已變化對象的變化的所有比特(步驟s100)。這是為了確保change_mark_mask外包時的干凈狀態(tài)。外包可以例如在時間間隔的數(shù)量大于標(biāo)識變量和/或標(biāo)記掩模的大小(以比特計)時發(fā)生。

然后,在步驟s110中,父進(jìn)程通過使用change_mark_mask的值來設(shè)置change_test_mask。正常情況下,在成功的檢查點之后,change_test_mask中僅剩余一個比特。如果檢查點不成功,則對change_test_mask與change_mark_mask進(jìn)行或運算,從而將當(dāng)前變化集與前一變化集結(jié)合起來。這發(fā)生在步驟s90中。change_test_mask中的多個“1”指示一個或多個連續(xù)檢查點已失敗。最后,測試線程開始等待下一檢查點請求。

下文中,該方法的執(zhí)行利用狀態(tài)變量change_status_i和change_status_j、測試掩模change_test_mask和標(biāo)記掩模change_mark_mask的特定示例值進(jìn)行說明。在該示例中,展示了所涉及的狀態(tài)變量和掩模的值在緊跟系統(tǒng)的初始化的兩個時間間隔期間如何演變。本示例跟隨兩個對象的變化狀態(tài):oi和oj。還假設(shè)第一檢查點操作失敗,這導(dǎo)致需要最終對在兩個時間間隔期間變化的數(shù)據(jù)對象進(jìn)行檢查點檢查。第二檢查點操作成功。出于示例的簡明起見,使用4比特值。

系統(tǒng)初始化時的初始值是:

change_test_mask=0001

change_mark_mask=0001

假設(shè)存在兩個數(shù)據(jù)對象oi和oj。它們各自的狀態(tài)變量最初具有零值:

change_status_i=0000

change_status_j=0000

假設(shè)對象oi在第一檢查點請求發(fā)出之前被更新。這導(dǎo)致以以下方式設(shè)置其change_status:

change_status_i←change_status_iorchange_mark_mask

change_status_i=0000

or

change_mark_mask=0001

---------------------------------------

change_status_i=0001

在步驟s10中,在新檢查點請求時,主測試線程被激活,并且change_mark_mask被左旋轉(zhuǎn)并變?yōu)閇0010]。在步驟s20中,測試線程派生子進(jìn)程,并且在父進(jìn)程中,等待子進(jìn)程退出(步驟s30)。

在步驟s40中,在父進(jìn)程中,對象oj被更新線程更新。首先,檢查變化還沒有被標(biāo)記。這是為了防止不必要的寫入。

change_status_j=0000

and

change_mark_mask=0010

--------------------------------------

result=0000

由于結(jié)果為零(未記錄到變化),針對對象oj記錄變化:

change_status_j=0000

or

change_mark_mask=0010

---------------------------------------

change_status_j=0010

注意,這一變化在子(派生)進(jìn)程中是不可見的。與此同時,在子進(jìn)程中,發(fā)生檢查點處理。在步驟s50中,利用change_test_mask對所有數(shù)據(jù)對象的change_status成員進(jìn)行測試(使用and)。如果結(jié)果為非零,則給定對象被持久化。

change_status_i=0001

and

change_test_mask=0001

--------------------------------------

result=0001

change_status_j=0000(在子進(jìn)程中可見的值)

and

change_test_mask=0001

--------------------------------------

result=0000

變化測試結(jié)果為非零的對象被持久化。在這種情況下,對象oi在該時間間隔期間被持久化。

在步驟s60中,在永久性存儲中創(chuàng)建現(xiàn)有永久性對象oi的備份副本。然后,對象oi本身被持久化。

此時,假設(shè)測試線程的子進(jìn)程已經(jīng)由于某種原因如i/o錯誤而失敗。對象oi的備份副本被恢復(fù)來替代被持久化的對象oi,以回復(fù)到檢查點開始之前的狀態(tài)(步驟s80)。然后,測試線程的子進(jìn)程以“失敗”退出狀態(tài)退出。

測試主線程測試子進(jìn)程的退出狀態(tài),并且因為子進(jìn)程“失敗”,它使用change_mark_maskorchange_test_mask的結(jié)果替代change_test_mask(步驟s90)。

change_test_mask←change_mark_maskorchange_test_mask

change_mark_mask=0010

or

change_test_mask=0001

-----------------------------------------

change_test_mask=0011

在下一檢查點請求時,新的時間間隔開始。change_mark_mask被測試線程左旋轉(zhuǎn)并變?yōu)閇0100](步驟s10)。

在步驟s20中,測試線程派生子進(jìn)程,并且在父進(jìn)程(在步驟s25中確定)中,等待子進(jìn)程退出(步驟s30)。

假設(shè)對象oj此時在更新線程中被更新。對應(yīng)的變化比特被設(shè)置。

change_status_j=0010

or

change_mark_mask=0100

---------------------------------------

change_status_j=0110

注意:這一變化僅在父進(jìn)程中可見。

與此同時,在子進(jìn)程中,發(fā)生檢查點處理。在步驟s50中,利用change_test_mask對所有數(shù)據(jù)對象的change_status成員進(jìn)行測試(使用and)。如果結(jié)果為非零,則給定對象被持久化。

change_status_i=0001

and

change_test_mask=0011

--------------------------------------

result=0001

change_status_j=0010(在子進(jìn)程中可見的值)

and

change_test_mask=0011

--------------------------------------

result=0010

變化測試結(jié)果為非零的對象被持久化。在這種情況下,對象oi和oj均在該時間間隔期間被持久化。

在步驟s60中,首先,在永久性存儲中創(chuàng)建現(xiàn)有對象oi和oj的備份副本。然后,對象oi和oj被持久化。

這一次,檢查點被成功執(zhí)行。oi和oj的備份副本被丟棄(從永久性存儲移除)(步驟s70)。然后,測試線程的子進(jìn)程以“成功”退出狀態(tài)退出。

圖2b圖示出本發(fā)明實施例的由一個或多個更新線程執(zhí)行的方法步驟。更新線程使用change_mark_mask中的值來測試對象的change_status是否已被更新。這是為了在對象的change_status已被該線程或同時修改change_status的其它并發(fā)線程所更新的情況下不必要的緩存線無效和更新序列化。如果change_status尚未更新(在步驟s5中確定),那么它在步驟s40中被更新。

上文所有描述僅僅為本發(fā)明的實施方式,本發(fā)明所保護(hù)的范圍并不僅限于此。本領(lǐng)域的技術(shù)人員可以容易地得到任何變體或替代。因此,本發(fā)明的保護(hù)范圍應(yīng)依據(jù)所附權(quán)利要求的保護(hù)范圍。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
嘉峪关市| 钟祥市| 元江| 浠水县| 古交市| 抚顺县| 布拖县| 宣威市| 隆德县| 三江| 沅陵县| 德清县| 邢台县| 琼中| 武夷山市| 卓资县| 鹿邑县| 滦南县| 象州县| 清涧县| 澄城县| 盖州市| 新竹县| 泊头市| 独山县| 云龙县| 鄂托克前旗| 冕宁县| 榆中县| 锡林浩特市| 双牌县| 商洛市| 盐边县| 常德市| 平泉县| 清徐县| 邵阳县| 烟台市| 襄垣县| 普宁市| 苏尼特左旗|