專利名稱:用于更新包括壓縮版本的內(nèi)容的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及用于原位(in-place )更新存儲(chǔ)在存儲(chǔ)設(shè)備中的內(nèi)容的方法 和系統(tǒng)。本發(fā)明尤其涉及在包括塊的非易失性存儲(chǔ)設(shè)備中將內(nèi)容的原始版 本原位更新到更新版本,其中原始版本和/或更新版本在存儲(chǔ)設(shè)備上被壓縮。
背景技術(shù):
有時(shí)需要更新存儲(chǔ)在存儲(chǔ)設(shè)備中的內(nèi)容。例如,如果內(nèi)容是軟件或程 序(如可執(zhí)行文件),則有時(shí)需要修改其中存在的錯(cuò)誤或?qū)ζ湟胄碌奶?征。然而,在非限制性的后面的例子和其它類型的內(nèi)容中也可能需要更新, 例如存儲(chǔ)在數(shù)據(jù)庫中的文本、數(shù)據(jù)等。在下文中術(shù)語"舊版本"或"原始 版本"指在更新以前內(nèi)容的版本,而術(shù)語"新版本"或"更新版本"指包 括已經(jīng)更新的內(nèi)容的版本。換句話說,原始版本包括"原始內(nèi)容",而更 新版本包括"更新內(nèi)容"。應(yīng)注意,更新內(nèi)容可進(jìn)一步被更新。在第二次 更新的情況下,例如,第一次更新的更新內(nèi)容變成第二次更新的原始內(nèi)容, 而新的更新內(nèi)容通過第二次更新產(chǎn)生,等等。更新原始內(nèi)容產(chǎn)生更新內(nèi)容的過程稱為"更新過程"。更新過程通常 需要指示它如何執(zhí)行更新的指令。提供給更新過程的這樣的指令一起組成"更新數(shù)據(jù)包",其中包括在其中的每個(gè)指令組成"更新命令"。也就是說, 更新過程獲得更新數(shù)據(jù)包作為輸入,并根據(jù)其進(jìn)行操作,以便將原始內(nèi)容 更新為更新內(nèi)容。然而這是非限制性的,有時(shí)更新過程可獲得多于一個(gè)的 更新數(shù)據(jù)包,允許它一起更新內(nèi)容。可選地,不是獲得更新數(shù)據(jù)包,更新 過程有時(shí)可從存儲(chǔ)設(shè)備或從數(shù)據(jù)庫等中取回更新數(shù)據(jù)包(或一組更新命 令)。因此在下文中,當(dāng)提到術(shù)語"獲得更新數(shù)據(jù)包"時(shí),應(yīng)認(rèn)識(shí)到,更 新過程可被動(dòng)地獲得數(shù)據(jù)包,它可主動(dòng)取回?cái)?shù)據(jù)包或有時(shí)它可激活嵌入其 中的數(shù)據(jù)包(例如, 一組硬編碼的更新命令)。將原始版本更新為更新版本的一種方法是除了原始版本外還在存儲(chǔ) 設(shè)備中存儲(chǔ)更新版本。例如,每當(dāng)用戶按PC (個(gè)人計(jì)算機(jī))視窗桌面上的某個(gè)圖標(biāo)時(shí),計(jì)算機(jī)程序"prog.exe"被激活。為了更新prog.exe,有可能 將該文件的更新版本存儲(chǔ)在與目前(原始)版本的不同的位置中,并接著 重新設(shè)置與圖標(biāo)相關(guān)的路徑,以便激活更新版本而不是原始版本。隨后, 當(dāng)確定更新過程成功地結(jié)束時(shí),可安全地刪除原始版本,因而釋放所占用 的空間。此外,后面的這個(gè)更新方法要求例如在更新數(shù)據(jù)包中完整的更新 版本被提供給更新過程。這樣的更新數(shù)據(jù)包在大小(size)上容易變得巨大, 且如果要求通過帶寬受限的通信信道將它傳送到更新設(shè)備,則傳送可能變 得不方便且有時(shí)甚至是不可能的。因此,減小更新數(shù)據(jù)包的大小是優(yōu)選的。另 一更新方法可簡單地用更新內(nèi)容來蓋寫(overwrite)原始內(nèi)容。該更 新方法有風(fēng)險(xiǎn)且不可靠,因?yàn)槿绻逻^程在操作的中間失敗,則當(dāng)原始 版本的一部分已經(jīng)被蓋寫時(shí),只有更新版本的一部分被寫到存儲(chǔ)設(shè)備,應(yīng) 認(rèn)識(shí)到,在中斷時(shí)存儲(chǔ)在存儲(chǔ)設(shè)備上的版本可能是無效或不能操作的。此 外,傳送完整的更新版本的要求還不能用本方法解決。然而,注意到通過 用更新的內(nèi)容蓋寫原始內(nèi)容來更新內(nèi)容在本領(lǐng)域中通常稱為"原位更新"。 在下文中,除非特別指明,術(shù)語"更新"用于描述"原位更新"。用于減小更新數(shù)據(jù)包的大小的一種方法是通過在其內(nèi)包括表示原始 內(nèi)容和更新內(nèi)容之間的差異的信息。這樣的更新數(shù)據(jù)包有時(shí)也稱為"差 異"、"差異結(jié)果"或"增量(delta)"。當(dāng)根據(jù)增量操作時(shí),更新過程將其應(yīng) 用于原始內(nèi)容,因而產(chǎn)生更新內(nèi)容??紤]到增量的大小,有試圖減小其大小的方法。例如,美國6,546,552 (2003年公布的 "Dz,re"ce 6e wee" /wo vw'o"s (iato-toWescowto/m"g /"fra-re/e/^rtce")公開了用于產(chǎn)生舊程序和新程序之間的緊湊的 (compact)差異結(jié)果的方法。每個(gè)程序包括參考記錄項(xiàng)(reference entry), 其包括參考程序中其它記錄項(xiàng)的參考。根據(jù)美國6,546,552的方法,舊程 序4皮掃描,且對(duì)于每個(gè)參考記錄項(xiàng),參考由不同的標(biāo)簽記號(hào)代替,由此產(chǎn) 生修改的舊程序。此外,根據(jù)美國6,546,552,新程序被掃描,且對(duì)于每個(gè) 參考記錄項(xiàng),參考由不同的標(biāo)簽記號(hào)代替,由此產(chǎn)生修改的新程序。因此, 直接或間接利用修改的舊程序和修改的新程序,產(chǎn)生了不同的結(jié)果。WO 2004/114130 (2004年公布的"A^他od amf矽對(duì)ew /or w/w^,"g vera/om1 o/co fe f stored / a borage (iev/ce")公開了用于產(chǎn)生內(nèi)容的舊片反 本和內(nèi)容的新版本之間的緊湊的更新數(shù)據(jù)包的方法和系統(tǒng)。WO換元件發(fā)生器。它還包括用于產(chǎn)生修改版本的修改版本發(fā)生器和用于產(chǎn)生 緊湊的更新數(shù)據(jù)包的更新數(shù)據(jù)包發(fā)生器。緊湊的更新數(shù)據(jù)包包括基于修改 版本和新版本的轉(zhuǎn)換元件和修改的增量。WO 2005/003963 (2005年公布的"A/"/20d朋d v員z'o"s q/'co"加,/" g加rage血v/ce")公開了用于更新存儲(chǔ)在存儲(chǔ) 設(shè)備中的內(nèi)容的版本的方法和系統(tǒng)。WO 2005/003963的系統(tǒng)包括用于獲得 轉(zhuǎn)換元件和^:小增量的更新才莫塊。它還包括轉(zhuǎn)換的舊項(xiàng)目發(fā)生器、數(shù)據(jù)記 錄項(xiàng)發(fā)生器和新版本發(fā)生器,轉(zhuǎn)換舊項(xiàng)目發(fā)生器用于通過將轉(zhuǎn)換元件應(yīng)用 于舊版本的項(xiàng)目來產(chǎn)生轉(zhuǎn)換的舊項(xiàng)目,數(shù)據(jù)記錄項(xiàng)發(fā)生器用于根據(jù)修改的數(shù)據(jù)記錄項(xiàng)及根據(jù)轉(zhuǎn)換的舊項(xiàng)目來產(chǎn)生數(shù)據(jù)記錄項(xiàng),以及新版本發(fā)生器用 于通過將命令和數(shù)據(jù)記錄項(xiàng)應(yīng)用于舊版本來產(chǎn)生內(nèi)容的新版本。注意,在那之前更新程序包有時(shí)被稱為增量,然而,這是非限制性的, 并且當(dāng)它從WO 2004/114130和WO 2005/003963出現(xiàn)時(shí),此外更新數(shù)據(jù)包 有時(shí)包括增量。在本領(lǐng)域中存在其它方法,但在提到它們之前,最好應(yīng)討論幾個(gè)考慮 因素。例如,應(yīng)認(rèn)識(shí)到,內(nèi)容一般存儲(chǔ)在存儲(chǔ)設(shè)備中。存儲(chǔ)設(shè)備可為易失性存儲(chǔ)設(shè)備(例如隨機(jī)存取存儲(chǔ)器RAM)或非易失性存儲(chǔ)設(shè)備(例如硬 盤或閃存)。存在在分立的地區(qū)中組織的、例如稱為塊或扇區(qū)的存儲(chǔ)設(shè)備,其中一 個(gè)塊可包括屬于多個(gè)文件的內(nèi)容。因此,例如,如果有兩個(gè)文件存儲(chǔ)在存 儲(chǔ)設(shè)備中,則單個(gè)塊可包括屬于這兩個(gè)文件中的第一個(gè)的幾個(gè)('x,)字 節(jié),以及屬于這兩個(gè)文件中的第二個(gè)的幾個(gè)('y,)字節(jié)。如果塊的大小 是'z,個(gè)字節(jié),則顯然z>=x+y。然而,精通本領(lǐng)域的人員應(yīng)認(rèn)識(shí)到,將 內(nèi)容寫到塊中影響存儲(chǔ)在其中的其它內(nèi)容。也就是說,如果要求重寫存儲(chǔ) 在第一個(gè)文件的x個(gè)字節(jié)中的內(nèi)容(例如,在其更新期間),由于存儲(chǔ)設(shè) 備的局限性,也許不可能只寫那x個(gè)字節(jié),而可能必須將所有z個(gè)字節(jié)的 內(nèi)容寫到存儲(chǔ)設(shè)備。這例如可通過將z個(gè)字節(jié)中存儲(chǔ)的內(nèi)容從非易失性存 儲(chǔ)設(shè)備讀到不包括塊的易失性存儲(chǔ)設(shè)備如RAM中、只更新存儲(chǔ)在易失性 存儲(chǔ)設(shè)備中x個(gè)字節(jié)中的內(nèi)容(即,其中其它z-x個(gè)字節(jié)的內(nèi)容保持未受 影響)并接著將z個(gè)字節(jié)的內(nèi)容寫回到非易失性存儲(chǔ)設(shè)備中來完成。該局 限性表現(xiàn)閃存設(shè)備的特征,例如,其中要求在新內(nèi)容(包括更新內(nèi)容)可 寫到那里之前徹底刪除塊的當(dāng)前內(nèi)容,且在將數(shù)據(jù)寫到那里之前在硬盤上 不必刪除全部扇區(qū),但要求在一個(gè)寫操作中寫塊的全部內(nèi)容(例如,當(dāng)讓 存儲(chǔ)在z-x個(gè)字節(jié)中的內(nèi)容不受影響時(shí)只寫入x個(gè)字節(jié)是不可能的;為了 讓z-x個(gè)字節(jié)不受影響,需要將其內(nèi)容存儲(chǔ)在易失性存儲(chǔ)設(shè)備中,并將它 們與x個(gè)字節(jié)一起寫回到塊中)。因此,更新程序可能需要到包括塊的存 儲(chǔ)設(shè)備的很多寫操作,且應(yīng)認(rèn)識(shí)到,為了獲得有效的更新,最好應(yīng)最佳化 更新。例如,如果x等于例如兩個(gè)字節(jié),則這兩個(gè)字節(jié)最好應(yīng)一起^:更新, 而不是更新第一個(gè)字節(jié),然后更新第二個(gè)字節(jié),將這兩個(gè)字節(jié)分開地寫到 塊中。而且,當(dāng)將原始版本(包括原始內(nèi)容)更新為更新版本(包括更新內(nèi) 容)時(shí),有時(shí)具有使用原始內(nèi)容的更新命令,以便產(chǎn)生更新內(nèi)容。例如, 有可能將原始內(nèi)容復(fù)制到存儲(chǔ)設(shè)備中的不同位置,其中此復(fù)制的內(nèi)容在其 目標(biāo)位置中形成更新版本的一部分。當(dāng)將內(nèi)容復(fù)制到目標(biāo)位置時(shí),應(yīng)認(rèn)識(shí) 到,在用于存儲(chǔ)其它內(nèi)容(也可能為原始版本的一部分)之前該目標(biāo)位置可能已經(jīng)一皮使用。因此,復(fù)制的內(nèi)容可蓋寫其它原始內(nèi)容。仍然進(jìn)一步地, 有可能存在另一更新命令,其使用其它原始內(nèi)容以便產(chǎn)生更新內(nèi)容。如果 進(jìn)一步調(diào)用該另 一更新命令來根據(jù)第 一更新命令操作,則其它原始內(nèi)容可 能已經(jīng)被蓋寫。這種情況構(gòu)成"讀前寫沖突"。讀前寫沖突是本領(lǐng)域中的已知問題,且美國6,018,747試圖處理之。美國 6,018,747 ( 2000年公布的 "MeA^/ /or 朋d recom^rwc"'"gt/e/to力/ei1,,)公開了 一種制造的方法、裝置禾口產(chǎn)品, 其用于將文件的可原位重建的軟件更新從源計(jì)算機(jī)產(chǎn)生、傳送、復(fù)制并重 建到目標(biāo)計(jì)算機(jī)。美國6,018,747將文件的第一版本和文件的第一版本的 更新存儲(chǔ)在源計(jì)算機(jī)的存儲(chǔ)器中。第一版本也存儲(chǔ)在目標(biāo)計(jì)算機(jī)的存儲(chǔ)器 中。更新接著從源計(jì)算機(jī)的存儲(chǔ)器傳送到目標(biāo)計(jì)算機(jī)的存儲(chǔ)器。這些更新 在目標(biāo)計(jì)算機(jī)使用,以原位建立文件的第二版本。根據(jù)美國6,018,747,當(dāng)增量文件試圖從存儲(chǔ)器讀取已經(jīng)寫入的偏移量 時(shí),這將導(dǎo)致不正確的重建,因?yàn)橐延械陌姹緮?shù)據(jù)被蓋寫。這稱為讀前寫 沖突。美國6,018,747教導(dǎo)如何后處理增量文件,以便建立增量文件,最 小化讀前寫沖突的數(shù)量,并接著用添加命令代替復(fù)制命令以消除沖突。產(chǎn) 生了用于表示復(fù)制命令之間的讀前寫沖突的有向圖(digraph)。產(chǎn)生了程 序表,其通過將該有向圖轉(zhuǎn)換成無圈有向圖(acyclic digraph)來消除讀前 寫沖突。然而,美國6,018,747使用增量文件,以便在讀前寫沖突期間備 份或保護(hù)蓋寫的內(nèi)容。因此,增量文件被擴(kuò)大。本領(lǐng)域中另 一 已知的問題出現(xiàn)在更新舊版本的過程在其正常終止之 前被中斷時(shí),例如電源故障時(shí)。在這樣的情況下,有可能在中斷期間被更 新的塊的內(nèi)容也許變成破壞的并包括料想不到的內(nèi)容。以前已經(jīng)提到,當(dāng)更新內(nèi)容塊時(shí),塊的原始內(nèi)容有時(shí)形成由更新過程 使用的輸入的一部分。在這樣的情況下,如果需要原始?jí)K(其由于中斷而 被破壞),則更新過程可能不能恢復(fù)。也許不可能重新更新破壞的塊。例如美國6,832,373( 2004年公布的朋(i me^od/or w/wto/wg a"<i z力/0m2加朋")試圖處理該問題。它公開了用于更新被軟件、設(shè)備和數(shù)據(jù)包括的數(shù)字信息序列的設(shè)備、系統(tǒng)和方法。此外,這些數(shù)字信息 序列可以用各種形式存儲(chǔ)和使用,包括但不限于文件、存儲(chǔ)位置和/或嵌入的存儲(chǔ)位置。而且,在美國6,832,373中描述的設(shè)備、系統(tǒng)和方法給本領(lǐng) 域中熟練的開發(fā)人員提供了按需要產(chǎn)生更新信息的能力,且另外地允許用 戶通過不易于產(chǎn)生錯(cuò)誤的簡化的更新路徑繼續(xù)進(jìn)行下去,以及根據(jù)美國 6,832,373的發(fā)明者,所述方法可能比通過使用當(dāng)美國6,832,373被提交時(shí) 存在的技術(shù)執(zhí)行得更快。也就是說,美國6,832,373描述了使用輔助備份塊,同時(shí)執(zhí)行所有的 塊更新操作,因而使用兩個(gè)階段"兩階段協(xié)議"或"兩階段提交"。根據(jù) 美國6,832,373,在更新塊的第一階段中,更新過程將更新內(nèi)容寫到輔助備 份塊中并驗(yàn)證內(nèi)容被正確地存儲(chǔ)。在第二階段中,更新過程將更新內(nèi)容寫 到其目標(biāo)塊中,以形成更新塊的更新內(nèi)容。然而,存在相同方法的變形, 例如在第一階段中將更新塊的原始內(nèi)容寫到輔助備份塊中,而在第二階段 中更新目標(biāo)塊以存儲(chǔ)更新內(nèi)容。然而,兩階段提交(不管備份的內(nèi)容是原始內(nèi)容還是更新內(nèi)容)是耗 費(fèi)時(shí)間的,因?yàn)槊總€(gè)寫操作都需要執(zhí)行兩個(gè)操作(對(duì)兩個(gè)階段)。此外, 根據(jù)美國6,832,373,每個(gè)備份操作都將塊的全部(原始或更新)內(nèi)容備份 在輔助備份塊中,因此如果更新過程更新的塊的數(shù)量為n,則更新過程(包 括更新操作和寫到輔助備份塊中的操作)所需要的操作的總數(shù)量可不小于 2n。如果有在多于一個(gè)的寫操作中內(nèi)容被寫入其中的塊,則更新過程需要 執(zhí)行的操作的數(shù)量將甚至大于2n。因此在本領(lǐng)域中存在對(duì)可靠和有效的機(jī)制的需要,該機(jī)制用于原位更 新原始版本的原始內(nèi)容,產(chǎn)生更新版本,其中原始版本和/或更新版本^f皮壓 縮地存儲(chǔ)在存儲(chǔ)設(shè)備上。發(fā)明內(nèi)容根據(jù)本發(fā)明,提供了一種方法,其用于以存儲(chǔ)塊原位更新存儲(chǔ)在非易 失性存儲(chǔ)設(shè)備中的內(nèi)容的原始版本以產(chǎn)生內(nèi)容的更新版本,所述方法包括獲得更新數(shù)據(jù)包;將原始版本或其一部分復(fù)制到易失性存儲(chǔ)器;更新 原始版本或其一部分以l是供未壓縮的更新版本或其一部分;壓縮未壓縮的 更新版本或其一部分,以便單獨(dú)地壓縮每個(gè)數(shù)量的未壓縮的更新內(nèi)容;以 及將壓縮的更新版本或其一部分代替原始版本或其一部分寫在存儲(chǔ)設(shè)備 中,其中每個(gè)單獨(dú)壓縮的數(shù)量被寫到分離的存儲(chǔ)塊中。根據(jù)本發(fā)明,還提供了一種用于產(chǎn)生更新數(shù)據(jù)包的方法,所述方法用 于用存儲(chǔ)塊原位更新存儲(chǔ)在非易失性存儲(chǔ)設(shè)備中的內(nèi)容的原始版本以產(chǎn) 生內(nèi)容的更新版本,所述方法包括將所述原始和更新版本中的任一個(gè)解 壓縮到包括用于每個(gè)單獨(dú)壓縮的內(nèi)容的分離的存儲(chǔ)塊的虛擬塊中;以及在 保護(hù)緩沖器中模擬(simulate)執(zhí)行轉(zhuǎn)換命令所需要的數(shù)據(jù)的保護(hù)。根據(jù)本發(fā)明,進(jìn)一步提供了一種方法,其用于用存儲(chǔ)塊原位更新存儲(chǔ)獲得更新數(shù)據(jù)包;將所述原始版本復(fù)制到易失性存儲(chǔ)器,其中如果原始版 本包括被相互依賴地壓縮的多于一個(gè)的存儲(chǔ)塊中的內(nèi)容,則所述復(fù)制步驟 包括將原始版本解壓縮到易失性存儲(chǔ)器中,并保護(hù)解壓縮原始版本所需要 的至少一些內(nèi)容;更新原始版本以提供未壓縮的更新版本;以及將更新版 本代替原始版本復(fù)制回非易失性存儲(chǔ)器中,其中如果更新版本被壓縮地存 儲(chǔ)在塊被相互依賴地壓縮的地方,則所述復(fù)制步驟包括保護(hù)解壓縮更新版 本和相互依賴地壓縮更新塊所需要的至少一些內(nèi)容;其中原始版本和更新 版本中的至少 一個(gè)包括在被相互依賴地壓縮的多于一個(gè)的存儲(chǔ)塊中的內(nèi) 容。根據(jù)本發(fā)明,提供了一種用于產(chǎn)生更新數(shù)據(jù)包的方法,所迷方法用于 用存儲(chǔ)塊原位更新存儲(chǔ)在非易失性存儲(chǔ)設(shè)備中的內(nèi)容的原始版本以產(chǎn)生 內(nèi)容的更新版本,所述方法包括獲得內(nèi)容的未壓縮的舊版本和未壓縮的 新版本;獲得從一個(gè)或兩個(gè)版本的解壓縮和轉(zhuǎn)換命令中的任一項(xiàng)產(chǎn)生的新 版本和舊版本中的任一個(gè)的存儲(chǔ)塊之間的相關(guān)性;以及在保護(hù)緩沖器中模 擬執(zhí)行解壓縮一個(gè)或兩個(gè)版本和轉(zhuǎn)換命令中的任一項(xiàng)所需要的數(shù)據(jù)的保 護(hù)。根據(jù)本發(fā)明,還提供了一種裝置,其用于用存儲(chǔ)塊原位更新存儲(chǔ)在非括接收器,其配置成獲得更新數(shù)據(jù)包;更新一莫塊,其配置成將原始版本 或其一部分復(fù)制到易失性存儲(chǔ)器中,并且配置成更新原始版本或其一部分以提供更新版本或其一部分;以及壓縮模塊,其配置成壓縮更新版本或其 一部分,如果通過相互依賴地壓縮未壓縮數(shù)量的更新版本來壓縮更新版本 或其一部分,則其中每個(gè)將相應(yīng)于存儲(chǔ)設(shè)備中的多個(gè)存儲(chǔ)塊,并保護(hù)解壓縮更新版本所需要的至少一些內(nèi)容,或通過單獨(dú)地壓縮相應(yīng)于分離的存儲(chǔ) 塊的每個(gè)數(shù)量的未壓縮的更新內(nèi)容來壓縮更新版本或其一部分;其中更新 模塊還配置成將壓縮的更新版本或其一部分代替原始版本或其一部分寫 在所述存儲(chǔ)設(shè)備中。根據(jù)本發(fā)明,進(jìn)一步提供了一種用于產(chǎn)生更新數(shù)據(jù)包的裝置,所述裝 置用于用存儲(chǔ)塊原位更新存儲(chǔ)在非易失性存儲(chǔ)設(shè)備中的內(nèi)容的原始版本 以產(chǎn)生內(nèi)容的更新版本,包括解壓縮模塊,其配置成確定每個(gè)存儲(chǔ)塊和定每個(gè)存儲(chǔ)塊和當(dāng)被單獨(dú)壓縮時(shí)實(shí)質(zhì)上等于存儲(chǔ)塊大小的未壓縮的虛擬 塊之間的相應(yīng)性;以及更新數(shù)據(jù)包構(gòu)造器,其配置成在保護(hù)緩沖器中模擬 執(zhí)行解壓縮一個(gè)或兩個(gè)版本和轉(zhuǎn)換命令中的任一項(xiàng)所需要的數(shù)據(jù)的保護(hù)。
為了理解本發(fā)明并了解它可如何在實(shí)踐中執(zhí)行,現(xiàn)在參考附圖,只通 過非限制性實(shí)施例來描述優(yōu)選實(shí)施方式,其中圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施方式的用于在蜂窩網(wǎng)絡(luò)中更新版本的系 統(tǒng)的示意圖;圖2A示出具有相應(yīng)段的原始和更新版本的實(shí)施例;圖2B示出當(dāng)圖2A的原始版本更新為其更新版本時(shí)如何形成^t糊 (ambiguous)部分或段;圖2C示出解決圖2B的讀前寫沖突的在本領(lǐng)域中已知的一種方法;圖2D示出解決圖2B的讀前寫沖突的在本領(lǐng)域中已知的可選方法;圖3A示出具有相應(yīng)段的原始和更新版本的另 一實(shí)施例;圖3B示出適合于將圖3A的原始版本更新為其更新版本的更新數(shù)據(jù)包;圖3C示出將圖3A的原始版本更新為其更新版本;圖3D示出將圖3A的原始版本更新為其更新版本;圖4是示出產(chǎn)生沖突解決更新數(shù)據(jù)包的流程圖;圖5示出根據(jù)本發(fā)明的一個(gè)實(shí)施方式的將壓縮的原始版本更新為其壓 縮的更新版本;圖6示出壓縮版本及其相應(yīng)的未壓縮版本;圖7是#4居本發(fā)明的實(shí)施方式的用于壓縮內(nèi)容的方法的流程圖;圖8是根據(jù)本發(fā)明的實(shí)施方式的用于解壓縮內(nèi)容的方法的流程圖;圖9A是原始版本及其更新版本的另一實(shí)施例的示意圖;圖9B是根據(jù)本發(fā)明的一個(gè)實(shí)施方式當(dāng)圖9A的原始版本更新為其更新 版本時(shí)使用的保護(hù)緩沖器的示意圖;圖9C是^^據(jù)本發(fā)明的另一實(shí)施方式當(dāng)圖9A的原始版本更新為其更新 版本時(shí)使用的保護(hù)緩沖器的示意圖;圖IO是詳細(xì)示出用于確定更新次序的一個(gè)實(shí)施方式的流程圖;圖11是根據(jù)本發(fā)明的一個(gè)實(shí)施方式示出更新數(shù)據(jù)包的產(chǎn)生的流程圖;圖12(分成12A和12B)是描述根據(jù)本發(fā)明的一個(gè)實(shí)施方式將原始版 本更新為其更新版本的流程圖;圖13示出包括內(nèi)容的重復(fù)片段的示例性未壓縮的版本和相應(yīng)的壓縮 版本;圖14是根據(jù)本發(fā)明的另 一實(shí)施方式用于壓縮內(nèi)容的方法的流程圖; 圖15是4艮據(jù)本發(fā)明的另一實(shí)施方式用于解壓縮內(nèi)容的方法的流程圖; 圖16是#>據(jù)本發(fā)明的另一實(shí)施方式用于確定更新次序的方法的流程圖;圖17(分成17A和17B)是根據(jù)本發(fā)明的另一實(shí)施方式用于產(chǎn)生更新 數(shù)據(jù)包的方法的流程圖;圖18 (分成18A、 18B和18C)是根據(jù)本發(fā)明的另一實(shí)施方式用于將 內(nèi)容的原始版本更新為其更新版本的方法的流程圖;圖19 (分成19A、 19B和19C)是根據(jù)本發(fā)明的另一實(shí)施方式用于重 新開始內(nèi)容的原始版本到其更新版本的更新的方法的流程圖;圖20示出根據(jù)本發(fā)明的實(shí)施方式用于產(chǎn)生更新數(shù)據(jù)包的裝置;以及 新版本的裝置。
具體實(shí)施方式
在下列說明中,對(duì)多于一個(gè)的圖共有的部件由相同的參考數(shù)字標(biāo)注。而且,除非特別說明,術(shù)語"更新"在下文中用于指"原位更新"。圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施方式用于在蜂窩式網(wǎng)絡(luò)中更新版本的系 統(tǒng)101的示意圖。連接到或包括存儲(chǔ)設(shè)備103的便攜式電話102執(zhí)行實(shí)現(xiàn) 其操作的程序。程序一般存儲(chǔ)在文件中。目前在便攜式電話上執(zhí)行的程序 的版本在下文中稱為"舊版本"或"原始版本"。注意,存儲(chǔ)器設(shè)備如存儲(chǔ)設(shè)備103有時(shí)也稱為"存儲(chǔ)器設(shè)備"或"存 儲(chǔ)器單元"。有時(shí)存在更新程序的需要,以便電話102執(zhí)行其較新版本,組成"更 新版本"或"新版本"。這樣的更新版本由在電話中運(yùn)行的更新過程產(chǎn)生。 更新過程根據(jù)電話接收的更新數(shù)據(jù)包(組成"增量文件")運(yùn)行。根據(jù)本發(fā)明,更新數(shù)據(jù)包在更新數(shù)據(jù)包發(fā)生器104中產(chǎn)生,更新數(shù)據(jù) 包發(fā)生器104例如在個(gè)人計(jì)算機(jī)(PC)中或在任何其它類型的計(jì)算機(jī)中運(yùn) 行。更新數(shù)據(jù)包被存儲(chǔ)在更新服務(wù)器105中,并通過發(fā)射器106傳輸?shù)奖?攜式電話102。應(yīng)注意,圖1所示系統(tǒng)101是非限制性的例子,且本發(fā)明不限于更新程序。存儲(chǔ)在存儲(chǔ)設(shè)備中的很多其它類型的內(nèi)容需要更新,例如存儲(chǔ)在數(shù) 據(jù)庫中的數(shù)據(jù),存儲(chǔ)在存儲(chǔ)設(shè)備中的文件,等等。因此,在下文中將使用 術(shù)語"內(nèi)容"而不是"程序"。同樣,本發(fā)明不限于蜂窩式網(wǎng)絡(luò)和/或便攜式電話102。應(yīng)認(rèn)識(shí)到,便 攜式電話屬于稱為嵌入式設(shè)備的組。存在其它嵌入式設(shè)備,例如個(gè)人數(shù)字助理(PDA)、機(jī)頂盒和連接到用于存儲(chǔ)內(nèi)容的存儲(chǔ)設(shè)備的其它消費(fèi)者電 子設(shè)備,并且有時(shí)需要更新存儲(chǔ)在其中的內(nèi)容。然而,也有可能更新存儲(chǔ) 在連接到非嵌入式設(shè)備如PC或其它計(jì)算機(jī)的存儲(chǔ)設(shè)備中的內(nèi)容。因此, 存儲(chǔ)設(shè)備103可為例如硬盤驅(qū)動(dòng)器、閃存設(shè)備、EPROM (可擦可編程只讀 存儲(chǔ)器)和EEPROM (電可擦可編程只讀存儲(chǔ)器)或任何其它存儲(chǔ)設(shè)備。例如,PC或任何其它計(jì)算機(jī)可存儲(chǔ)文件,該文件包括其操作或其中執(zhí) 行的程序的操作所需要的數(shù)據(jù)(例如,精通本領(lǐng)域的人員已知的"info文 件"或"點(diǎn)文件(dot file )")。有時(shí)需要例如通過通信線路,例如通過互聯(lián) 網(wǎng)或通過任何其它通信方式來更新該數(shù)據(jù)。理解了這以后,不是使用術(shù)語如"電話"、"PDA"、"消費(fèi)者電子^殳備"、 "計(jì)算機(jī)"、"PC"等,下文中將使用術(shù)語"更新設(shè)備",且應(yīng)注意,術(shù)語 "更新設(shè)備"可指連接到存儲(chǔ)設(shè)備并允許更新存儲(chǔ)在其中的內(nèi)容的任何設(shè) 備。前面解釋到,為了更新存儲(chǔ)在存儲(chǔ)設(shè)備中的內(nèi)容,更新數(shù)據(jù)包被產(chǎn)生、 存儲(chǔ)在更新服務(wù)器105中、并被傳送到更新設(shè)備(例如便攜式電話102) 和與其連接的存儲(chǔ)設(shè)備。可選地,傳送更新數(shù)據(jù)包而沒有將它首先存儲(chǔ)在更新服務(wù)器105中是可能的。例如,有可能直接從產(chǎn)生更新數(shù)據(jù)包的更新 數(shù)據(jù)包發(fā)生器傳送更新數(shù)據(jù)包。在這樣的情況下,更新發(fā)生器運(yùn)行的機(jī)器 或更新發(fā)生器本身纟皮看作更新服務(wù)器105。而且,在圖l所示實(shí)施例中,更新數(shù)據(jù)包通過發(fā)射器106來傳送。這 也是非限制性的,且可使用可適用于傳送更新數(shù)據(jù)包的任何其它方式。例 如,有可能將更新數(shù)據(jù)包存儲(chǔ)在便攜式存儲(chǔ)設(shè)備如軟盤或U盤 (disk-on-key)上,因而允許更新設(shè)備(如電話102)通過從其讀取更新 數(shù)據(jù)包來訪問更新數(shù)據(jù)包。當(dāng)更新設(shè)備接收更新數(shù)據(jù)包時(shí),它可根據(jù)更新數(shù)據(jù)包來運(yùn)行更新過 程,其中更新過程更新原始版本以產(chǎn)生更新版本。應(yīng)注意,更新設(shè)備可在 收到更新數(shù)據(jù)包之后立即運(yùn)行更新過程??蛇x地,它可將更新數(shù)據(jù)包存儲(chǔ) 在非易失性存儲(chǔ)器中,例如在存儲(chǔ)設(shè)備103中,并在某個(gè)以后的時(shí)間(例如下次更新設(shè)備重新啟動(dòng)(reboot)時(shí))運(yùn)行更新過程。注意,存儲(chǔ)設(shè)備可存儲(chǔ)多于一個(gè)的原始和/或更新版本的內(nèi)容。例如, 應(yīng)認(rèn)識(shí)到,可能有安裝在單個(gè)硬盤中的幾個(gè)計(jì)算機(jī)程序。在很多情況下,文件由在邏輯上連續(xù)的內(nèi)容組成。例如,在包括文本 的文件中,其中文本為"123456789",字符"2"在邏輯上與字符T連 續(xù),字符"3"在邏輯上與字符"2"連續(xù),等等。然而,精通本領(lǐng)域的人 員應(yīng)認(rèn)識(shí)到,當(dāng)將該文件存儲(chǔ)在存儲(chǔ)設(shè)備中時(shí),存儲(chǔ)的文件或包括在其中 的內(nèi)容可能被分段,即,文件的不同部分可能存儲(chǔ)在存儲(chǔ)設(shè)備的不同部分 或塊中。換句話說,在邏輯上連續(xù)的內(nèi)容不必以物理上連續(xù)的方式存儲(chǔ)在 存儲(chǔ)設(shè)備中。記住,在邏輯上連續(xù)的內(nèi)容不必以物理上連續(xù)的方式存儲(chǔ)在存儲(chǔ)設(shè)備 中和/或在邏輯上連續(xù)的內(nèi)容的大小可能大于塊的大小,應(yīng)認(rèn)識(shí)到,在邏輯 上連續(xù)的內(nèi)容可在幾個(gè)存儲(chǔ)塊上擴(kuò)展。而且, 一個(gè)存儲(chǔ)塊可包括屬于幾個(gè) 在邏輯上連續(xù)的內(nèi)容(例如幾個(gè)文件)的內(nèi)容?,F(xiàn)在返回到前面的實(shí)施例, 其中文本"123456789"組成在邏輯上連續(xù)的內(nèi)容,應(yīng)認(rèn)識(shí)到,內(nèi)容"1234" 可存儲(chǔ)在一個(gè)物理塊中,而內(nèi)容"56789"在本例中可存儲(chǔ)在不同的物理 塊中,該不同的物理塊在物理上在存儲(chǔ)有"1234"的塊之前(然而顯然, 在邏輯上內(nèi)容"1234"在內(nèi)容"56789"之前)。在邏輯上連續(xù)的文本"123456789"進(jìn)一步被看作原始版本。根據(jù)本 實(shí)施例,更新這個(gè)文件以包括更新版本是可能的,其中存儲(chǔ)在更新版本中 的文本是"123756489"。在此更新版本中,字符"4"和"7"與它們?cè)谠?始版本中的位置相比被交換。換句話說,在更新版本中的字符"7"代替 了出現(xiàn)在原始版本中的字符"4",而字符"4"代替了字符"7"。因此應(yīng) 認(rèn)識(shí)到,為了產(chǎn)生此更新版本,例如將原始版本分成幾段(每段組成一個(gè) "邏輯塊")是可能的。第一段包括內(nèi)容"123",第二段內(nèi)容是"4",第三段包括"56",第四段包括"7"以及第五段包括"89"。當(dāng)產(chǎn)生更新版本時(shí),使第一、第三和第五段保持原封不動(dòng),而第二和第四段的內(nèi)容交換。 因此,段包括在邏輯上連續(xù)的內(nèi)容。"123456789"文本及其更新為更新版本"123756489"的前面的實(shí)施 例是簡化的實(shí)施例。在其它實(shí)施例中,有可能將內(nèi)容分成占據(jù)一個(gè)或更多 物理塊中物理上連續(xù)的區(qū)域的段。因此,如果"123"以"12"存儲(chǔ)在第 一塊中而"3"存儲(chǔ)在第二塊中的方式被分段,其中"12"在順序上不在 "3"之前,則才艮據(jù)本實(shí)施例,"123"雖然在邏輯上連續(xù),也應(yīng)^皮分成兩 段(具體地是"12"和"3")。在后面的這個(gè)實(shí)施例中,只要塊是連續(xù)的(第一塊在順序上在第二塊 之前),且只要字符"1"存儲(chǔ)在第一塊終止的區(qū)域內(nèi),而字符"2"存儲(chǔ) 在第二塊開始的區(qū)域內(nèi),則段"12"仍然可駐留在兩個(gè)不同的塊上。后面的這個(gè)實(shí)施例中是非限制性的。例如,可選的實(shí)施方式可將段限 制為占據(jù)一個(gè)物理塊(與前面實(shí)施例中的"一個(gè)或更多"不同)中物理上 連續(xù)的區(qū)域。因此,如果"12"被順序地存儲(chǔ)在兩個(gè)連續(xù)的塊中,就必須 將它進(jìn)一步分成兩段(一個(gè)是"1",而笫二個(gè)是"2")。此外,移動(dòng)段或使它保持原封不動(dòng)不是被允許的唯一的行為或轉(zhuǎn)換。 例如,檢測段或?qū)Υ鎯?chǔ)在其中的內(nèi)容執(zhí)行計(jì)算是可能的。因此,不是交換 "123456789"實(shí)施例中的"4"和"7"段,而是有可能將3加到相應(yīng)于 "4"段中的內(nèi)容的數(shù)值上(4加3產(chǎn)生7)。類似地,有可能從相應(yīng)于"7" 段中的內(nèi)容的數(shù)值減去3 (7減3產(chǎn)生4)。依照這種情況,"4"和"7"仍 然被看作原始版本中的段。當(dāng)更新版本中段("更新段,,)的內(nèi)容相應(yīng)于原始版本中段("原始段") 的內(nèi)容時(shí),這些段被看作"相應(yīng)的段"或"匹配的段"。相應(yīng)性指段之間 的任何邏輯或算術(shù)聯(lián)系,其中更新段可為原始段的副本,它可為原始段的 修改的副本(例如,復(fù)制段的內(nèi)容并接著修改復(fù)制的內(nèi)容的一部分或全部 有時(shí)是優(yōu)選的),它可包括通過根據(jù)原始段的內(nèi)容計(jì)算更新段的內(nèi)容的所 接收的內(nèi)容,等等。注意,有時(shí)可能有相應(yīng)于某個(gè)原始段的多個(gè)更新段(例如,原始^L的內(nèi)容被復(fù)制兩次,因而產(chǎn)生相應(yīng)于其的兩個(gè)更新段)。相反的情況也成立有時(shí)可能有相應(yīng)于單個(gè)更新段的多個(gè)原始段(例如,為了計(jì)算單個(gè)更新段 的內(nèi)容,有可能使用存儲(chǔ)在兩個(gè)不同的原始段中的內(nèi)容)。圖2A示出存儲(chǔ)設(shè)備的一部分,其中原始版本2A01和更新版本2A02 具有相應(yīng)的段。根據(jù)本實(shí)施例,原始版本2A01中的兩個(gè)段2A03和2A04 分別相應(yīng)于更新版本2A02中的段2A03,和2A04,,反之亦然段2A03,和 2A04,相應(yīng)于段2A03和2A04。根據(jù)本實(shí)施例,段2A03的內(nèi)容類似于段 2A03,的內(nèi)容,以及段2A04的內(nèi)容類似于段2A04'的內(nèi)容,雖然段2A03' 和2A04,與段2A03和2A04不同地定位在存儲(chǔ)設(shè)備中(即,在不同的地址)。 根據(jù)具體的實(shí)施例,除改變段的位置之外,也改變相對(duì)順序。也就是說, 在存儲(chǔ)設(shè)備中段2A03物理上在段2A04之前,但段2A04,物理上在段2A03' 之前。圖2B示出當(dāng)將圖2A的原始版本2A01更新到其更新版本2A02時(shí), 如何形成段的模糊部分。根據(jù)本實(shí)施例,在移動(dòng)段2A03的內(nèi)容之前移動(dòng) 段2A04的內(nèi)容,因而在存儲(chǔ)設(shè)備中產(chǎn)生中間版本2B01。通過中間版本 2B01示出,段2A04,的一部分與仍然定位在其原始位置的2A03的一部分 重疊。因此,段2A04,的內(nèi)容蓋寫段2A03'的內(nèi)容的一部分。作為2A03的 一部分的段部分2B02的重疊的原始內(nèi)容丟失。這個(gè)段部分(2B02)示出 由重疊引起的"才莫糊部分",且它表示兩段之間的"沖突"。沖突,例如圖2B中示出的沖突在本領(lǐng)域中稱為"讀前寫沖突"。在一 般的方式中,當(dāng)仍然被更新過程要求來進(jìn)一步更新段(例如段2A03,其原 始內(nèi)容是產(chǎn)生段2A03,的內(nèi)容所需要的)的原始段或其一部分在它被使用 之前(在本例中是在復(fù)制段2A03的內(nèi)容以產(chǎn)生段2A03,之前)被改變或 失去時(shí),產(chǎn)生了讀前寫沖突。除非另外說明,簡而言之,下面使用術(shù)語"沖 突"來指術(shù)語"讀前寫沖突"。目前在本領(lǐng)域中已知,在段2A04,的內(nèi)容蓋寫段2A03的內(nèi)容之前, 可通過將段2A03的內(nèi)容復(fù)制到其新位置(即,到段2A03')來保護(hù)它免 受沖突,如在圖2C的實(shí)施例中示出的。中間版本2C01包括原始段2A04和更新段2A03',接著可將段2A04的內(nèi)容安全地移到其在新版本2A02中 的新位置(段2A04')。圖2A、 2B和2C提供了復(fù)制-循環(huán)的例子,用于該 復(fù)制-循環(huán)的正確的復(fù)制順序可解決沖突。在圖2D示出的可選實(shí)施例中,段2A03的內(nèi)容復(fù)制到被命名為"備份 緩沖器"、"備份存儲(chǔ)"或"保護(hù)緩沖器"的存儲(chǔ)器區(qū)域2D01中,將存儲(chǔ) 在段2A03中的原始內(nèi)容轉(zhuǎn)變成冗余內(nèi)容或釋放的內(nèi)容,而前面由被釋放 的內(nèi)容占用的段或區(qū)域稱為"釋放區(qū)",其在中間版本2D03中被標(biāo)記為 2D02。這允許將段2A04的內(nèi)容復(fù)制到其新位置2A04', 2A04,與釋放區(qū) 2D02部分地重疊而沒有蓋寫段2A03的內(nèi)容,如中間版本2D04所示的。 現(xiàn)在有可能將段2A03的內(nèi)容(或更準(zhǔn)確地,其副本)從保護(hù)緩沖器2D01 復(fù)制到其在更新版本中的位置中,即,復(fù)制到更新版本2A02的更新段 2A03,中。注意,根據(jù)本實(shí)施例,保護(hù)緩沖器是更新過程可用的存儲(chǔ)區(qū), 即,該存儲(chǔ)區(qū)不包括用于存儲(chǔ)原始和/或更新內(nèi)容的區(qū)域,也不包括用于存 儲(chǔ)更新數(shù)據(jù)包的存儲(chǔ)區(qū)。圖3A示出分別具有相應(yīng)的段3A03、 3A04和3A03,、 3A04,的原始版 本3A01和更新版本3A02的另一實(shí)施例。類似于圖2A,更新段3A04'與 由才莫糊部分3A05示出的原始段3A03沖突。然而,與圖2A的實(shí)施例不同, 這里還有更新段3A03'和原始段3A04之間的沖突,由模糊部分3A06示出。 因此,精通本領(lǐng)域的人員應(yīng)認(rèn)識(shí)到,圖2C的解決方案,即,改變復(fù)制順 序在這里是不適用的。注意,圖3A的實(shí)施例不允許可避免所示讀前寫沖 突的復(fù)制順序。圖3A提供了復(fù)制周期的實(shí)施例,對(duì)于該復(fù)制周期來說不存在用于解 決沖突的正確復(fù)制順序。應(yīng)認(rèn)識(shí)到,其它復(fù)制周期可能存在,其中有所涉 及的多于兩個(gè)的段("多復(fù)制周期")。即使在這樣的多復(fù)制周期中有時(shí)也 沒有解決沖突的復(fù)制順序。例如,四個(gè)段(A、 B、 C和D)的復(fù)制周期可 按下列方式創(chuàng)建更新的A與原始的B沖突,更新的B與原始的C沖突, 更新的C與原始的D沖突,以及更新的D與原始的A沖突。應(yīng)認(rèn)識(shí)到, 該復(fù)制順序不允許解決沖突的復(fù)制順序。例如美國6,018,747試圖通過識(shí)別復(fù)制周期、以全部的段與其它段沖突的方式將更新版本重新分成段(因此產(chǎn)生"模糊段")、以及用添加命令代替沖突復(fù)制命令(添加命令有時(shí)稱為"插入命令"),來解決讀前寫沖突。 添加命令要求添加的或插入的數(shù)據(jù)在更新數(shù)據(jù)包中是可利用的。因此,當(dāng)用添加命令代替復(fù)制命令時(shí),前面復(fù)制的、現(xiàn)在插入的內(nèi)容^^皮插入更新數(shù) 據(jù)包中,因而增大了它的大小。應(yīng)認(rèn)識(shí)到,根據(jù)不同的方法,將原始版本3A01更新為更新版本3A02 的更新過程可使用類似于圖2D所示的用于解決沖突的方法的方法。更具 體地,它可使用用于存儲(chǔ)原始沖突段的副本的保護(hù)緩沖器。注意,在確定了沖突存在之后,有可能以類似于美國6,018,747的方 法重新分割段,但不是將模糊段的原始內(nèi)容存儲(chǔ)在更新數(shù)據(jù)包中,它可存 儲(chǔ)在保護(hù)緩沖器中。圖3B示出適合于將圖3A的原始版本3A01更新為其更新版本3A02 的更新數(shù)據(jù)包3B01 。更新數(shù)據(jù)包3B01包括3B02—包括類似于原始段3A03 的內(nèi)容的內(nèi)容的一個(gè)部分,因而使段3A03的原始內(nèi)容變?yōu)槿哂嗟摹,F(xiàn)在 更新過程可根據(jù)更新命令3B03將段3A04的內(nèi)容安全地復(fù)制到其更新的位 置一相應(yīng)的段3A04,。在將原始段3A04的副本存儲(chǔ)到更新段3A04'中之后, 段3A04的內(nèi)容也變成冗余的,因而允許更新過程用存儲(chǔ)在3B02中的內(nèi)容 蓋寫它,存儲(chǔ)在3B02中的內(nèi)容是段3A03的原始內(nèi)容的副本。根據(jù)當(dāng)前的 實(shí)施例,依照更新數(shù)據(jù)包3B01的插入命令3B04來完成此任務(wù)。應(yīng)注意,當(dāng)有多個(gè)沖突時(shí),可能期望在解決其它沖突之前選擇一個(gè)待 解決的沖突。該選擇可由最優(yōu)化標(biāo)準(zhǔn)指導(dǎo)。例如,被保護(hù)段的大小可用作 最優(yōu)化標(biāo)準(zhǔn)。如果原始段3A04的大小小于原始段3A03的大小,則可能期 望存儲(chǔ)段3A04,的內(nèi)容的副本,而不是存儲(chǔ)存儲(chǔ)在3A03中的內(nèi)容的副本, 如圖3B所示的。而且,不是存儲(chǔ)存儲(chǔ)在至少一個(gè)沖突段中的內(nèi)容的副本, 而有可能存儲(chǔ)存儲(chǔ)在至少一個(gè)模糊段中的內(nèi)容的副本。如果模糊部分的大 小用作最優(yōu)化標(biāo)準(zhǔn),則根據(jù)本實(shí)施例,有可能試圖只存儲(chǔ)大小較小的這些 (一個(gè)或更多)模糊部分。圖3C示出將圖3A的原始版本3A01更新為其更新版本3A02。當(dāng)產(chǎn) 生更新數(shù)據(jù)包3C01時(shí),因?yàn)槟:糠?A06的大小小于模糊部分3A05的25大小,此模糊部分3A06的原始內(nèi)容的副本^皮插入更新數(shù)據(jù)包中(見3C02 )。 注意,3C02保護(hù)部分3A06的內(nèi)容,因此它允許刪除(或修改)其內(nèi)容。 完成這以后,更新數(shù)據(jù)包3C01包括下列更新命令更新命令3C03指示更 新過程復(fù)制3A03的原始內(nèi)容,以產(chǎn)生段3A03,的更新內(nèi)容,蓋寫段3A04 的部分3A06,然而,部分3A06的原始內(nèi)容由3C02保護(hù)。段3A03現(xiàn)在 變成釋放的段;更新命令3C04指示更新過程將3A04的內(nèi)容復(fù)制到3A04' (注意,根據(jù)本命令復(fù)制的內(nèi)容還包括存儲(chǔ)在段3A03,中的內(nèi)容的一部分, 即,它包括蓋寫如圖所示的部分3A06的內(nèi)容的副本,其由部分3C08表示); 以及更新命令3C05指示更新過程將存儲(chǔ)在3C02中的內(nèi)容(即,類似于部 分3A06的原始內(nèi)容的內(nèi)容)插入3C08中,用于恢復(fù)3A04,的內(nèi)容。插入 命令3C05是"恢復(fù)更新命令",或簡言之,"恢復(fù)命令",且在圖中它被表 示為"恢復(fù),,,以便強(qiáng)調(diào)此。然而,注意,3C05可為插入命令(如圖3B 中的3B04 )。注意,在本例中假定根據(jù)確定的次序(組成"更新次序")來執(zhí)行更 新,其中3A03被復(fù)制到3A03,,然后3A04被復(fù)制到3A04,,接著恢復(fù)3C08。 在這種情況下,更新次序受小于模糊部分3A05大小的模糊部分3A06的大 小的影響,因而包括其副本的更新數(shù)據(jù)包小于包括3A05的副本的更新數(shù) 據(jù)包。精通本領(lǐng)域的人員應(yīng)認(rèn)識(shí)到,本實(shí)施例的變化形式(即,圖3C的實(shí) 施例)避免復(fù)制整個(gè)段3A04的原始內(nèi)容以產(chǎn)生更新的段3A04,,接著由 3C02的被保護(hù)內(nèi)容蓋寫其中的一部分(3C08)以恢復(fù)3A04,的內(nèi)容。將兩 個(gè)段3A03和3A04中的每一個(gè)分成兩個(gè)段是可能的, 一個(gè)產(chǎn)生沖突(模糊 段), 一個(gè)不產(chǎn)生。圖3D示出用于將圖3A的原始版本3A01更新為其更新版本3A02的 又一實(shí)施例。根據(jù)本實(shí)施例,需要被保護(hù)免受沖突的內(nèi)容存儲(chǔ)在存儲(chǔ)設(shè)備 中的保護(hù)緩沖器中。已經(jīng)示出,根據(jù)本實(shí)施例,存在對(duì)保護(hù)僅僅一個(gè)模糊部分的內(nèi)容的需 要。此外,其可為大小小于另一個(gè)的模糊部分。在這種情況下,其為模糊 部分3A06。當(dāng)產(chǎn)生更新數(shù)據(jù)包3D01時(shí),更新命令3D02插入其中,指示更新過程 將模糊部分3A06的原始內(nèi)容的副本存儲(chǔ)在保護(hù)緩沖器3D03中,由此保護(hù) 其內(nèi)容。命令3D02組成"備份命令"、"保護(hù)更新命令",或簡言之,"保 護(hù)命令"。更新過程需要在用段3A03,的內(nèi)容蓋寫部分3A06之前執(zhí)行該命 令。更新過程根據(jù)保護(hù)命令執(zhí)行的操作稱為"保護(hù)操作(protection operation)","〗呆護(hù)'f生才乘4乍(protect operation),,或"備4分才乘4乍",且注意, 代替使用顯式(explicit)"保護(hù)"更新命令,可使用"復(fù)制"命令。當(dāng)根據(jù)更新命令3D02操作時(shí),更新過程將部分3A06的內(nèi)容復(fù)制到保 護(hù)緩沖器3D03中,因而產(chǎn)生被保護(hù)部分3D04。在此階段,更新過程可根 據(jù)更新命令3C03安全地操作,并將3A03的原始內(nèi)容復(fù)制到段3A03',蓋 寫才莫糊部分3A06的內(nèi)容,3A06的原始內(nèi)容被保護(hù)在保護(hù)緩沖器3D03中。 存儲(chǔ)設(shè)備中的版本變成中間版本3D05。此后,更新過程可根據(jù)更新命令3C04操作,并將段3A04的內(nèi)容復(fù)制 到其在中間版本3D06中的新位置3A04"。應(yīng)注意,在此階段,部分3A06 包括最初作為3A03的部分的內(nèi)容。因此,當(dāng)將3A04復(fù)制到3A04"時(shí), 3A03的原始內(nèi)容的一小部分也被復(fù)制,如部分3C08所示的。注意,部分 3C08的大小類似于模糊部分3A06的大小。為了產(chǎn)生段3A04'的預(yù)期內(nèi)容,更新過程需要將3C08的內(nèi)容恢復(fù)為與 段3A06的原始內(nèi)容類似。為了這么做,更新過程根據(jù)更新命令3D07操作, 因而復(fù)制3D04的被保護(hù)內(nèi)容以代替部分3C08的內(nèi)容,從而產(chǎn)生段3A04, 的預(yù)期內(nèi)容。注意,3D07是恢復(fù)命令的另一例子,然而可改為使用復(fù)制命令。因此示出,有時(shí)原始內(nèi)容需要在用另 一段的內(nèi)容蓋寫它之前來被保護(hù) (例如,通過將其副本存儲(chǔ)在保護(hù)緩沖器中)。然而,這是非限制性的, 且有需要保護(hù)原始內(nèi)容的其它情況。例如,在更新期間有時(shí)修改段的內(nèi)容 (或其一部分)。然而,可能有其它段,這些段的更新需要被修改的段的 原始內(nèi)容。例如,原始段("段A")最初存儲(chǔ)一個(gè)數(shù)字(例如2),其中其 更新內(nèi)容存儲(chǔ)不同的數(shù)字(例如4 )。更新內(nèi)容的大小在這種情況下保持類 似于原始內(nèi)容的大小。然而,可能有另一段或其內(nèi)容("段B"),其更新需要例如將存儲(chǔ)在原始段A中的值添加到存儲(chǔ)在原始段B中的數(shù)字,其中添加法的結(jié)果存儲(chǔ)在更新段B中。即使更新段A的位置(或存儲(chǔ)其內(nèi)數(shù)字的 部分)保持類似于原始段A的位置,但是實(shí)際上它的內(nèi)容改變了 (原始的 2由4代替)。因此,通過在更新段A之后更新段B,更新過程必須避免使 用段A的更新內(nèi)容。這可通過將段A的原始內(nèi)容存儲(chǔ)在保護(hù)緩沖器中(或 更新數(shù)據(jù)包中)來完成,因而保護(hù)段A的原始內(nèi)容。應(yīng)注意,此非限制性實(shí)施例中的更新段A相應(yīng)于原始段A。此外,更 新,殳B相應(yīng)于原始纟殳A和原始l殳B。返回到圖中,注意,圖3C和3D的更新數(shù)據(jù)包3C01和3D01分別稱 為解決沖突的更新數(shù)據(jù)包。然而,當(dāng)比較圖3C和3D中示出的兩個(gè)實(shí)施例 時(shí),注意,更新數(shù)據(jù)包3D01比更新數(shù)據(jù)包3C01包括更多的更新命令,因 為它還包括備份更新命令3D01。備份命令可備份大量的內(nèi)容,因此它們可 減慢更新過程。圖3C的實(shí)施方式不需要將備份命令插入更新數(shù)據(jù)包3C01 中,因此它們?cè)试S更新過程更快地進(jìn)行。另一方面,代替保護(hù)緩沖器3D03, 使用更新數(shù)據(jù)包3C01來存儲(chǔ)被保護(hù)數(shù)據(jù),因此,只要被保護(hù)數(shù)據(jù)的大小 大于相應(yīng)的備份命令的大小,更新數(shù)據(jù)包3C01就在大小上大于更新數(shù)據(jù) 包3D01。記住,例如通過在通信線上傳輸更新數(shù)據(jù)包來將它們傳送到更新 設(shè)備,較大的更新數(shù)據(jù)包可能是一個(gè)限制。圖4是示出解決沖突的更新數(shù)據(jù)包的產(chǎn)生的流程圖。該流程圖相應(yīng)于 使用保護(hù)緩沖器來保護(hù)沖突段的內(nèi)容的實(shí)施方式。在401中獲得更新數(shù)據(jù) 包。更新數(shù)據(jù)包可通過本領(lǐng)域中已知的任何方式產(chǎn)生(見例如美國 6,546,552、 WO 2004/114130、 WO 2005/003963等等)。更新數(shù)據(jù)包可在401 期間產(chǎn)生,以便形成用于目前參考的(圖4的)流程圖的基礎(chǔ),或它可通 過任何可利用的方法(例如從存儲(chǔ)設(shè)備讀取它、從通信線路接收它、通過 過程間的通信等等)預(yù)先產(chǎn)生并獲得。接著,在402中分析更新數(shù)據(jù)包, 以便識(shí)別形成沖突段的段。這可通過構(gòu)造有向圖并識(shí)別其中的周期(或換 句話說,"復(fù)制周期")來完成,例如由美國6,018,747所述的。注意,沖 突段包括模糊部分,該模糊部分大小可能類似于或小于其相應(yīng)段的大小, 因而在段中留下零個(gè)或更多不才莫糊部分。未解決的沖突#1相繼地處理,如由403示出的。在404中,包括^^莫糊部分的選定段分成模糊部分和不模糊部分,因而產(chǎn)生兩個(gè)段, 一個(gè)模糊段 和一個(gè)不模糊段。注意,有時(shí)段包括多于兩個(gè)的部分(多個(gè)模糊部分和/或多個(gè)不模糊部分)。例如,當(dāng)模糊部分在該段的中間時(shí),可能有至少兩 個(gè)不模糊部分和一個(gè)模糊部分。在這樣的情況下,該段可分成多于兩個(gè)的段。在405中為每個(gè)不才莫糊段產(chǎn)生新的更新命令,而在406中為每個(gè)才莫糊 的段產(chǎn)生保護(hù)命令和恢復(fù)命令。在407中,產(chǎn)生沖突的原始更新命令從更 新數(shù)據(jù)包中刪除,而在408中新的更新命令以及保護(hù)命令插入更新數(shù)據(jù)包 中,代替所刪除的更新命令。在409中,例如根據(jù)美國6,018,747將恢復(fù) 命令插入更新數(shù)據(jù)包中,而不是插入命令^皮插入。注意,盡管代替刪除原始更新命令而是將最新產(chǎn)生的更新命令插入以 將其置換(例如見405、 406、 407和408),但是有可能修改原始更新命令 以便只涉及不模糊部分(其變成不模糊段)。在理解了這以后,有可能只保護(hù)需要保護(hù)的內(nèi)容的段而不是整個(gè)塊,容。當(dāng)可更新的設(shè)備需要根據(jù)存儲(chǔ)在其中的版本操作時(shí),如果該版本被壓 縮,則該版本被解壓縮(例如,在運(yùn)行時(shí)間)到例如RAM中,因而允許 操作。例如,如果可執(zhí)行文件(程序)以壓縮的形式存儲(chǔ),則它被解壓縮, 以便允許操作。另一例子是具有壓縮的數(shù)據(jù)。當(dāng)程序需要訪問該數(shù)據(jù)時(shí), 數(shù)據(jù)^皮解壓縮,由此允許程序操作。因此,存儲(chǔ)在可更新的設(shè)備中的原始版本可為壓縮的原始版本,且類 似i也,更新X反本可為壓縮的更新纟反本。下面描述的是本發(fā)明的實(shí)施方式,其中原始版本和更新版本都?jí)嚎s在 存儲(chǔ)i殳備上,因?yàn)檫@些實(shí)施方式是最復(fù)雜的。讀者因此能夠也容易地理解 較簡單的實(shí)施方式,其中通過假定下面與原始版本或更新版本的壓縮/解壓 縮、虛擬塊、虛擬邊界(virtual boundary)和/或解壓縮相關(guān)性有關(guān)的任何描述分別不是相關(guān)的,原始版本或更新版本沒有一皮壓縮地存儲(chǔ)。明顯地,為了將壓縮的原始版本更新為壓縮的更新版本,有可能才艮據(jù) 筒單的增量文件來操作更新過程,包括以簡單的方式構(gòu)造的更新命令,相 繼處理兩個(gè)壓縮版本之間的差異。然而,精通本領(lǐng)域的人員應(yīng)認(rèn)識(shí)到,在 兩個(gè)未壓縮版本之間存在的小差異可導(dǎo)致相應(yīng)的壓縮版本之間的相當(dāng)大 的差異,例如ZIP文件的例子。因此,簡單的增量將變大而低效,而不管 它傳輸?shù)娇筛碌脑O(shè)備所需要的帶寬、將它存儲(chǔ)在設(shè)備中所需要的存儲(chǔ)器 或兩者。另一解決方案是根據(jù)圖5示出的本發(fā)明的一個(gè)實(shí)施方式提供的。根據(jù)該實(shí)施方式,更新數(shù)據(jù)包501在兩個(gè)未壓縮的版本之間產(chǎn)生。接著,當(dāng)這 樣的更新數(shù)據(jù)包501在存儲(chǔ)有壓縮的原始版本502的可更新的設(shè)^(例如, 移動(dòng)電話)中收到時(shí),有可能使壓縮的原始版本502在例如RAM中解壓 縮,產(chǎn)生解壓縮的原始版本503。解壓縮的原始版本503可根據(jù)更新數(shù)據(jù) 包501來更新,產(chǎn)生未壓縮的更新版本504,更新版本504又可在可更新 的設(shè)備中壓縮,因而產(chǎn)生壓縮的更新版本505。注意,解壓縮的原始版本 503更新為未壓縮的更新版本504可根據(jù)任何方法如原位更新來進(jìn)行,且 更新數(shù)據(jù)包501不限于簡單的增量。然而,本實(shí)施方式是非限制性的,且 應(yīng)理解,有可能根據(jù)非原位的任何其它更新方法,例如通過在RAM中的 另一位置產(chǎn)生未壓縮的更新版本504,來將解壓縮的原始版本503更新為 未壓縮的更新版本504,而沒有覆蓋解壓縮的原始版本503。然而注意, 此操作模式一般需要較多的RAM空間,以便允許完整的原始版本的解壓 縮。根據(jù)本發(fā)明的一個(gè)實(shí)施方式,用于產(chǎn)生壓縮的原始版本和更新版本的 壓縮是線性壓縮(其中壓縮內(nèi)容維持與未壓縮內(nèi)容一樣的順序),例如已 知的自身(pwM)zip、霍夫曼編碼和/或其組合。因此,有可能確定,根 據(jù)壓縮順序,在線性壓縮中,壓縮版本的第 一塊對(duì)應(yīng)于相應(yīng)的未壓縮版本 的第一虛擬塊,壓縮版本的第二塊對(duì)應(yīng)于未壓縮版本的第二虛擬塊,等等。 這在圖6中示出,其中601表示壓縮版本,而602表示相應(yīng)的未壓縮版本。 壓縮版本601存儲(chǔ)在存儲(chǔ)設(shè)備中的三個(gè)存儲(chǔ)塊603、 604和605中。類似30地,未壓縮版本602可分成三個(gè)虛擬塊606、 607和608,其不必在大小上 彼此相等。虛擬塊606的內(nèi)容被壓縮到存儲(chǔ)塊603中;虛擬塊607的內(nèi)容 被壓縮到存儲(chǔ)塊604中;以及虛擬塊608的內(nèi)容被壓縮到存儲(chǔ)塊605中。根據(jù)本發(fā)明的一個(gè)實(shí)施方式,有可能解壓縮壓縮的原始版本的存儲(chǔ)在 一個(gè)存儲(chǔ)塊中的內(nèi)容,因而產(chǎn)生相應(yīng)的未壓縮的原始虛擬塊。然而注意, 在那些情況下,當(dāng)存儲(chǔ)塊包括作為原始版本的部分的內(nèi)容以及不是被更新 的原始版本的部分的內(nèi)容(例如,是另一程序的部分的內(nèi)容)時(shí),只有作 為原始版本的部分的內(nèi)容可能需要被解壓縮。接著,未壓縮的原始虛擬塊的內(nèi)容可被更新,產(chǎn)生相應(yīng)的未壓縮的更 新虛擬塊,且該未壓縮的更新虛擬塊或其一部分可隨后被壓縮到壓縮的更 新塊中。在壓縮的更新塊中的壓縮內(nèi)容因此是壓縮的更新版本的一部分。因?yàn)榧俣▋?nèi)容以壓縮的形式存儲(chǔ)在存儲(chǔ)設(shè)備上,因此假定每個(gè)壓縮塊 是物理塊。每個(gè)壓縮塊相應(yīng)于一個(gè)大小可以變化的未壓縮"塊"。未壓縮 "塊"在這里也稱為在虛擬塊之下,因?yàn)樘摂M塊一般在RAM中,其沒有 被組織在分離的塊中,如上所解釋的。在下文中,為了提高的易讀性,即 使在表示虛擬或解壓縮塊(多個(gè)塊)時(shí)也將使用塊(多個(gè)塊)而沒有引號(hào)。 假定段以其解壓縮的形式被查看但以壓縮的形式存儲(chǔ),則知道哪個(gè)未壓縮根據(jù)本發(fā)明的一個(gè)實(shí)施方式,未壓縮的更新版本壓縮到壓縮的更新版 本被逐塊地執(zhí)行,相應(yīng)地產(chǎn)生壓縮的更新版本。在本實(shí)施方式中,當(dāng)^皮壓 縮時(shí)適合一個(gè)物理塊的每個(gè)數(shù)量的未壓縮內(nèi)容(即,虛擬塊)被獨(dú)立地壓 縮。本實(shí)施方式因此稱為"單塊實(shí)施方式"或"逐塊"實(shí)施方式。在一些 情況下,逐塊壓縮是有利的,因?yàn)樵趬K之間沒有解壓縮相關(guān)性,因此每個(gè) 塊可纟皮獨(dú)立地解壓縮。為了執(zhí)行逐塊壓縮,需要確定未壓縮版本中的虛擬塊,存儲(chǔ)在每個(gè)虛 擬塊中的內(nèi)容可被壓縮以填充單個(gè)存儲(chǔ)塊。更新數(shù)據(jù)包可以可選地包括用 于壓縮確定的虛擬塊的命令,因而產(chǎn)生壓縮的更新版本。此外,應(yīng)注意,有時(shí)只壓縮原始版本和/或更新版本的一部分。因此,一般而言,本發(fā)明提供了用于更新壓縮的內(nèi)容的方法和系統(tǒng),其中壓縮的 內(nèi)容可為原始內(nèi)容、更新內(nèi)容或原始和更新內(nèi)容。為了更好地理解在逐塊壓縮實(shí)施方式中壓縮數(shù)據(jù)的物理塊和未壓縮 數(shù)據(jù)的虛擬塊之間的相應(yīng)性,將給讀者介紹用于壓縮和解壓縮內(nèi)容的非限 制性方法。應(yīng)認(rèn)識(shí)到,用于確定相應(yīng)于物理塊的虛擬塊的一個(gè)非限制性方法是通 過使用已知的自身二進(jìn)制搜索。也就是說,知道虛擬塊開始的地址,有可 能選擇終止地址??蓧嚎s存儲(chǔ)在存儲(chǔ)器中的、從起始地址開始并在終止地 址終止的內(nèi)容。根據(jù)本發(fā)明的實(shí)施方式,將內(nèi)容壓縮到壓縮的物理(即,存儲(chǔ))塊中以便最大化物理塊的應(yīng)用的方法700的實(shí)施例由圖7的流程圖示出。注意, 雖然在下文中當(dāng)討論將內(nèi)容壓縮到物理塊中以及將內(nèi)容從物理塊中解壓 縮時(shí)使用術(shù)語物理塊,但是有可能在一些實(shí)施方式中在RAM中壓縮和/或 解壓縮與物理塊相等大小的內(nèi)容。在圖7和下面的其它圖中,描述了某些 指針,其在所示實(shí)施方式中的定位在壓縮期間被使用。應(yīng)理解,這些指針 的描述是為了有助于讀者的理解,且可另外或代替地使用跟蹤位置的其它 方式。還應(yīng)理解,在一些實(shí)施方式中,可另外或代替地使用在這里沒有被 描述以便不復(fù)雜化描述的額外的指針。在階段702中,起始指針(用于虛擬塊)設(shè)置成未壓縮內(nèi)容(即,待 壓縮的內(nèi)容)的開始。在階段704中,對(duì)未壓縮內(nèi)容的虛擬塊的大小進(jìn)行 初始的估計(jì),該大小在被壓縮到物理塊中時(shí)將適合。例如,才艮據(jù)物理(壓 縮)塊的大小和對(duì)壓縮內(nèi)容典型的壓縮比,虛擬塊的初始大小(即,起始 和終止地址之間的距離)可被假定為第一估計(jì)。例如,如果物理(壓縮) 塊的大小是128個(gè)字節(jié)且壓縮比是1:2 (壓縮大小被未壓縮大小除),則有 可能以占用256個(gè)字節(jié)的內(nèi)容被大致壓縮為128個(gè)字節(jié)(物理塊)的初始 假設(shè)開始。可選地,如果初始內(nèi)容大小小于物理塊大小與壓縮比的比率, 則初始內(nèi)容大小被估計(jì)為剩余的未壓縮內(nèi)容。在階段712中,使用期望的 壓縮比和任何適當(dāng)?shù)膲嚎s算法來壓縮以起始指針開始并包括假定的虛擬 塊大小的內(nèi)容。應(yīng)注意,在一些實(shí)施方式中,用于壓縮內(nèi)容的原始版本的壓縮算法和/或壓縮比可不同于用于壓縮內(nèi)容的新版本的壓縮算法和/或壓 縮比,該新版本原位更新原始版本。在階段714中,壓縮內(nèi)容的大小(即, 在階段712中被壓縮)與物理塊的大小比較,以查看是否滿足一個(gè)或更多 停止標(biāo)準(zhǔn)。在特定實(shí)施方式中,應(yīng)將停止標(biāo)準(zhǔn)理解為使最近的以前估計(jì)的 內(nèi)容大小作為虛擬塊的大小^^接受的標(biāo)準(zhǔn)。例如,在一個(gè)實(shí)施方式中,停 止標(biāo)準(zhǔn)可為,例如當(dāng)兩次(或任何預(yù)定的數(shù)量)重復(fù)顯示過程未達(dá)成一致 (壓縮內(nèi)容大小和物理塊大小之間的壓縮大小差的值停止減小)時(shí),或當(dāng) 壓縮大小差值變得低于預(yù)定的值時(shí)。如果不滿足停止標(biāo)準(zhǔn)(即,最近的以前估計(jì)的用于虛擬塊的內(nèi)容大小是不可接受的),則在階段718中,確定 壓縮內(nèi)容大小是否大于物理塊大小。如果壓縮內(nèi)容大小證明是大于物理塊 大小的,則必須減小未壓縮的虛擬塊內(nèi)容大小(階段720),而如果壓縮內(nèi) 容的大小小于物理塊大小,則需要增大未壓縮的虛擬塊內(nèi)容大小(階段 722)(應(yīng)理解,不能將內(nèi)容大小增加到超過未壓縮內(nèi)容的結(jié)尾)。例如, 在一個(gè)實(shí)施方式中,如果壓縮內(nèi)容大小和物理塊大小之間的差由下式確 定大小差=壓縮內(nèi)容大小-物理塊大小則最新估計(jì)的虛擬塊大小可在階段720或722中確定,例如根據(jù)下列 等式最新估計(jì)的未壓縮虛擬塊大小二以前計(jì)算的未壓縮虛擬塊大小-大小差 /壓縮比該過程接著重復(fù)而回到階段712,其中具有最新估計(jì)的未壓縮虛擬塊 大小(并在相同的起始地址開始)的虛擬塊—皮壓縮,且最新壓縮的內(nèi)容大 小再次與物理塊大小比較。如果大小仍然不相等,則可根據(jù)例如精通本領(lǐng) 域的人員已知的二進(jìn)制搜索標(biāo)準(zhǔn)來確定新的大小??芍貜?fù)進(jìn)行壓縮和比 較,直到得到虛擬塊的適當(dāng)大小,例如直到滿足停止標(biāo)準(zhǔn)(階段716中的) 時(shí)。用于任何虛擬塊的停止標(biāo)準(zhǔn)可在第一次執(zhí)行階段716時(shí)或在任何隨后 的執(zhí)行中滿足。在階段724中,可選地限定和/或記錄虛擬塊的大小和/或 虛擬塊的邊界。例如,可將虛擬塊的下邊界限定為起始指針的位置(起始 地址),以及可在虛擬塊的終止地址(即,起始指針的地址加上虛擬塊的內(nèi)容大小的估計(jì)量,這導(dǎo)致停止標(biāo)準(zhǔn)被滿足)限定上邊界。在階段726中, 起始指針被增加了內(nèi)容的大小,以便指向下一個(gè)虛擬塊的起點(diǎn)(即,前面 虛擬塊的終止地址+1變成待壓縮的下一個(gè)虛擬塊的起始地址)。整個(gè)程序從階段704開始重復(fù)并繼續(xù),以確定第二虛擬塊、第三虛擬塊等,直到起 始指針增加到超過未壓縮的更新版本的結(jié)尾(階段728),且本方法結(jié)束。在其它實(shí)施方式中,只要壓縮大小差小于或等于零,通過壓縮內(nèi)容可 簡化壓縮,因而省略了增加內(nèi)容大小以便更好地填充物理塊的階段(階段 722 )。這些實(shí)施方式在一些情況下可導(dǎo)致物理塊的效率較低的使用。為了簡單起見,這里的實(shí)施方式在下面描述被限定和/或記錄的虛擬塊 的邊界。然而,對(duì)讀者應(yīng)明顯的是,在本發(fā)明的范圍內(nèi)的其它實(shí)施方式中, 可另外或代替地限定和/或記錄實(shí)現(xiàn)邊界的計(jì)算的虛擬塊的其它特征。既然已經(jīng)解釋了逐塊壓縮,現(xiàn)在將給讀者介紹用于將內(nèi)容從物理塊解 壓縮到虛擬塊中的非限制性方法。例如根據(jù)方法700, ^Ti定填充每個(gè)物理 塊的內(nèi)容被獨(dú)立地壓縮(即,沒有塊之間的壓縮相關(guān)性)。圖8是根據(jù)本 發(fā)明的實(shí)施方式用于解壓縮內(nèi)容的方法的流程圖。在階段802中,壓縮內(nèi) 容指針(保持跟蹤壓縮內(nèi)容)被置于壓縮內(nèi)容的起始地址,即,待壓縮的 第一物理塊的開始。如上所述,為了描述的簡單而在這里使用術(shù)語物理塊, 但有可能將來自每個(gè)物理塊的壓縮內(nèi)容復(fù)制到相等大小的RAM中,以及 壓縮內(nèi)容指針指向RAM中壓縮內(nèi)容的起始地址。在階段804中,未壓縮 內(nèi)容指針(保持跟蹤未壓縮內(nèi)容)被置于未壓縮內(nèi)容的起始地址,即,第 一虛擬塊的開始,其將來自第一物理塊的解壓縮的內(nèi)容保持為解壓縮的。 在階段806中,可選地將虛擬塊的下邊界限定和/或記錄為未壓縮內(nèi)容指針 的位置。在階段808中,使用用于壓縮內(nèi)容的反壓縮比和適當(dāng)?shù)慕鈮嚎s算 法來從物理塊中解壓縮一個(gè)單位,例如一個(gè)字節(jié)的內(nèi)容。接著增加壓縮內(nèi) 容指針和未壓縮內(nèi)容指針以分別被定位在壓縮的內(nèi)容單元和相應(yīng)的未壓 縮的內(nèi)容單元的終止地址(階段810)。如果壓縮內(nèi)容指針不在物理塊的末 尾(階段812),則解壓縮另一內(nèi)容單元(階段808),且相應(yīng)地增加壓縮 內(nèi)容指針和未壓縮內(nèi)容指針(階段810)。當(dāng)壓縮內(nèi)容指針到達(dá)物理塊的末尾(階段812)時(shí),則在階段814中,可選地將虛擬塊的上邊界限定和/或記錄為未壓縮內(nèi)容指針的位置。如果物 理塊不是最后的塊(對(duì)階段816的否定回答),則增加壓縮內(nèi)容指針和未壓縮內(nèi)容指針(階段818 ),以便分別表示下一物理塊的開始地址和下一物理塊的內(nèi)容將被解壓縮(即,將為相應(yīng)的虛擬塊)的起始地址。接著對(duì)下一塊重復(fù)該過程,直到到達(dá)最后的塊,且過程結(jié)束(階段816中的肯定回答)。因此通過遵循圖8的方法或類似的方法,在解壓縮期間可限定和/或記 錄相應(yīng)于每個(gè)物理塊的每個(gè)虛擬塊的邊界。應(yīng)注意,如果可選的階段724 在壓縮期間^皮執(zhí)行,則有可能根據(jù)壓縮過程而已經(jīng)知道虛擬塊的邊界。在 這種情況下,可改為遵循包括內(nèi)容的解壓縮的簡化解壓縮算法,而不必重 新限定虛擬塊的上邊界(階段814 )和下邊界(階段806 )(因?yàn)檫吔缡且?經(jīng)知道的)。因此通過執(zhí)行包括如上所述的限定和/或記錄的壓縮和/或解壓縮的方 法,可確定每個(gè)虛擬塊和物理塊之間的相應(yīng)性。圖9A是在RAM中解壓縮形式的原始版本9A01及其更新版本9A02 的實(shí)施例的示意圖。應(yīng)認(rèn)識(shí)到,未壓縮的原始版本9A01被更新為未壓縮 的更新版本9A02。根據(jù)本實(shí)施方式,在RAM中原始版本9A01的虛擬塊 可原位更新,或可更新到RAM中的不同區(qū)域,但在任一情況下,包括9A01 的壓縮版本的物理塊原位更新。為了描述的簡單,在圖9A、 9B和9C的 描述中假定RAM中的虛擬塊原位更新。在本實(shí)施方式中,原始版本9A01 占用至少三個(gè)具體表示為9A03、 9A04和9A05的虛擬塊。更新版本9A02 占用至少相同的虛擬塊H艮定在RAM中原位更新)。然而,為了區(qū)別開原 始內(nèi)容和更新內(nèi)容,9A03,表示當(dāng)更新內(nèi)容存儲(chǔ)在其中時(shí)的虛擬塊9A03; 9A04,表示當(dāng)更新內(nèi)容存儲(chǔ)在其中時(shí)的虛擬塊9A04;以及9A05,表示當(dāng)更 新內(nèi)容存儲(chǔ)在其中時(shí)的虛擬塊9A05。雖然在圖9A中,看起來虛擬塊(其 相應(yīng)于特定的物理塊)在包括更新的未壓縮內(nèi)容時(shí)與在包括原始的未壓縮 內(nèi)容時(shí)是相同的大小,但是大小相等不是必需成立的,且有可能虛擬塊(相 應(yīng)于特定的物理塊)在包括更新的未壓縮內(nèi)容時(shí)可能大于、小于或等于當(dāng) 包括原始的未壓縮內(nèi)容時(shí)的大小。因?yàn)樽x者應(yīng)理解,即使稍微修改的內(nèi)容也可導(dǎo)致完全不同的壓縮行為(因此適合于物理塊的未壓縮內(nèi)容的不同的 虛擬塊大小)。塊9A03包括四個(gè)段9A06、 9A07、 9A08和9A09;塊9A04包括六 個(gè)段9A10、 9A11、 9A12、 9A13、 9A14和9A15;以及塊9A05包括三 個(gè)段9A16、 9A17和9A18。在更新期間,存儲(chǔ)在段9A06中的內(nèi)容被刪除,因此它在更新版本9A02 中沒有相應(yīng)的段。其它刪除的段是9A10、 9A12和9A18。而且,存儲(chǔ)在段 9A07中的內(nèi)容被移動(dòng)(復(fù)制)到塊9A05',因而產(chǎn)生段9A07'。存儲(chǔ)在段 9A08中的內(nèi)容留在塊9A03'中,組成段9A08',但是由于段9A06被刪除, 因此段9A08,(或至少其一部分)現(xiàn)在占用以前由9A06的內(nèi)容占用的塊 內(nèi)地址,或換句話說,它變成塊中的第一段,其屬于更新版本9A02。存儲(chǔ) 在段9A09中的內(nèi)容從塊9A03復(fù)制到塊9A04,,組成其中的段9A09,。注 意,段9A07'、 9A08,和9A09,是在更新版本中分別相應(yīng)于段9A07、 9A08 和9A09的段。段9A11和9A13的內(nèi)容復(fù)制到塊9A03,,分別在其中產(chǎn)生相應(yīng)的段 9A11'和9A13,。然而,在原始版本中,段9A11在段9A13之前,而在更 新版本9A02中,它們各自的順序改變,且段9A13,在段9A11,之前。此外, 內(nèi)容插入塊9A03,中的三個(gè)新段(9A19、 9A20和9A21)中,且注意,這 些新段(9A19、 9A20和9A21)中沒有一個(gè)相應(yīng)于原始版本中的段。類似 地,內(nèi)容插入塊9A04,中的兩個(gè)新—敬(9A22和9A23 )中以及塊9A05'中 的一個(gè)新段(9A24)中。9A22、 9A23和9A24都不相應(yīng)于原始版本中的 段。存儲(chǔ)在塊9A04的段9A14中的內(nèi)容留在相同的塊9A04'中,產(chǎn)生相應(yīng) 的段9A14,,以及存儲(chǔ)在相同塊(9A04 )的段9A15中的內(nèi)容^皮移動(dòng)(復(fù) 制)到塊9A05,中,組成段9A15'。塊9A05的段9A16相應(yīng)于塊9A05,中的段9A16'。類似于段9A16, 其中段9A16是作為原始版本9A01的一部分的塊9A05中的第一段,段 9A16,是作為更新版本9A02的一部分的塊9A05,中的第一段。然而,注意, 段9A16,的更新內(nèi)容不必與存儲(chǔ)在段9A16中的原始內(nèi)容完全一致,且在這種情況下,9A16,的更新內(nèi)容的大小大于9A16的原始內(nèi)容的大小。例如, 更新命令可沿著更新的段的內(nèi)容插入一個(gè)或更多零(0)。這樣的命令可例 如在每一千個(gè)原始字節(jié)后插入一百個(gè)零。允i午9A16的內(nèi)容更新為9A16, 的內(nèi)容的更新命令可表示任何其它轉(zhuǎn)換操作,例如"將小寫字符轉(zhuǎn)變成小 寫字符"等。塊9A05的段9A17相應(yīng)于塊9A05,的段9A17',但它們?cè)趬K 中的位置不同。雖然以前沒有特別提到,但可能存在額外的相應(yīng)段,例如9A14和 9A14',其在它們各自的塊中的位置改變了。注意,根據(jù)本實(shí)施例,有可用于更新過程的保護(hù)緩沖器9A25。雖然保 護(hù)緩沖器的大小不被本發(fā)明限制,但在圖9A的本實(shí)施例中,保護(hù)緩沖器 大小等于兩個(gè)(物理)存儲(chǔ)塊的大小,其中一個(gè)保護(hù)塊標(biāo)注為9A26,而另 一個(gè)為9A27。然而,注意,這是非限制性的例子,且保護(hù)緩沖器可具有任 何大小。參考圖9A,注意,存儲(chǔ)在段9A13中的原始內(nèi)容是更新塊9A03,中的 段9A13,所需要的。假定更新次序?yàn)閴K9A05,,然后塊9A04,,接著塊9A03,, 則應(yīng)認(rèn)識(shí)到,當(dāng)更新過程根據(jù)更新命令"將9A09復(fù)制到9A09",操作時(shí), 更新塊9A03,(包括段9A13')的內(nèi)容還沒有產(chǎn)生,其中所述更新命令蓋 寫段9A13 (或至少其一部分)的原始內(nèi)容。因此,應(yīng)認(rèn)識(shí)到,當(dāng)?shù)玫?將 9A13復(fù)制到9A13",的命令時(shí),存儲(chǔ)在段9A13中的內(nèi)容已經(jīng)是作為段 9A09,的一部分的更新內(nèi)容,而不是9A13的原始內(nèi)容。因此,在這種情況 下,要存儲(chǔ)在9A13'中的"更新"內(nèi)容將不是預(yù)期的內(nèi)容(它不是9A13 的原始內(nèi)容的副本)。為了避免這個(gè)錯(cuò)誤,存儲(chǔ)在段9A13中的原始內(nèi)容需 要在用段9A09,蓋寫它之前被保護(hù)(例如,保護(hù)在保護(hù)緩沖器中)。理解了這以后,有可能確定,在蓋寫存儲(chǔ)在段中的原始內(nèi)容之前,如 果產(chǎn)生將存儲(chǔ)在更新次序中較遠(yuǎn)的塊中的更新內(nèi)容的至少一個(gè)更新命令 需要,則應(yīng)保護(hù)該原始內(nèi)容。注意,為了簡單起見,下面描述的實(shí)施方式涉及將未壓縮的原始內(nèi)容 保護(hù)在保護(hù)緩沖器中的選擇。然而,這是非限制性的,且應(yīng)認(rèn)識(shí)到,在其 它實(shí)施方式中,以任何其它方式例如通過加密或另一轉(zhuǎn)換來處理的壓縮的37改為保護(hù)在保護(hù)緩沖器中。參考圖9A,還注意到,段9A17的內(nèi)容復(fù)制到相同的塊(9A05)的段 9A17,中。9A17,出現(xiàn)在9A17之前,即,9A17,的更新內(nèi)容沒有蓋寫9A17 的原始內(nèi)容。因此,明顯地,看起來9A17的原始內(nèi)容被9A17,隱式 (implicitly)保護(hù),且該原始內(nèi)容不需要顯式保護(hù)(例如,在保護(hù)緩沖器 中)。然而,在更新設(shè)備具有包括塊的存儲(chǔ)設(shè)備如閃存的那些情況下,應(yīng) 認(rèn)識(shí)到,通常更新內(nèi)容的副本在例如RAM (隨機(jī)存取存儲(chǔ)器)中產(chǎn)生, 且在完成整個(gè)更新塊(在這種情況下為9A05,)的更新內(nèi)容生成之后,更 新內(nèi)容被壓縮,并在刪除了相應(yīng)于原始的9A05的物理塊的內(nèi)容之后從 RAM復(fù)制到相應(yīng)于更新塊9A05,的物理塊。因此應(yīng)i人識(shí)到,當(dāng)用相應(yīng)于 9A05,的(壓縮的)更新內(nèi)容蓋寫相應(yīng)于9A05的原始物理塊時(shí),如果在刪 除操作成功之后寫操作失敗,則將失去相應(yīng)于9A17的原始?jí)嚎s內(nèi)容,而 不管它沒有一皮相應(yīng)于9A17,的壓縮內(nèi)容蓋寫的事實(shí)。因此應(yīng)注意,在當(dāng)需下,為了可靠性的目的也需要保護(hù)。另一方面,段9A15復(fù)制到塊9A05'的段9A15,中。這在更新塊9A05' 時(shí)完成,即,在更新塊9A04,和塊9A03,之前完成。因此,可認(rèn)識(shí)到,當(dāng) 更新塊9A04,并用段9A23 、 9A14'以及可能還有9A22的更新內(nèi)容蓋寫9A15 的原始內(nèi)容時(shí),9A15的原始內(nèi)容已經(jīng)復(fù)制到9A15,中,在更新次序中, 9A15,在9A04,之前的塊中。因此,在圖9A的實(shí)施例中,不需要顯式保護(hù) 9A15的原始內(nèi)容。更進(jìn)一步地,如果在實(shí)施例中,除了將9A15的內(nèi)容復(fù)制到塊9A05, 內(nèi)的9A15,中的目前存在的復(fù)制命令(注意,在更新次序中塊9A03,在塊 9A05,以后)以外,還有將9A15的原始內(nèi)容復(fù)制到塊9A03,中的相應(yīng)段中 的額外的更新命令,則仍然不需要顯式保護(hù)9A05的內(nèi)容。雖然在更新次 序中塊9A03,在塊9A04,之后,因此在更新塊9A03,之前蓋寫9A15的原始 內(nèi)容,但有可能使用存儲(chǔ)在9A15,中的內(nèi)容,而不是其中顯式存儲(chǔ)在保護(hù) 緩沖器中的副本。因此,如果有在塊中復(fù)制段的內(nèi)容的至少一個(gè)更新命令,其中所述塊在更新次序中在原始段的原始?jí)K之前,則不需要顯式保護(hù)該段的內(nèi)容。理解了這以后,應(yīng)認(rèn)識(shí)到,在塊9A05中,段9A16和9A17或其部分 需要保護(hù)。在塊9A04中,段9A11、 9A13和9A14或其才莫糊部分需要保護(hù), 而在9A03中,是9A08或其模糊部分需要保護(hù)。注意,圖9A的實(shí)施例是非限制性的。在本實(shí)施例中,更新數(shù)據(jù)包允 許更新過程將原始版本9A01更新為更新版本9A02,同時(shí)首先執(zhí)行用于更 新塊9A05,的更新命令,然后是用于更新塊9A04,的更新命令,接著是用 于更新塊9A03,的更新命令??蛇x地,在更新了塊9A05,之后,有可能更 新塊9A03',最后是塊9A04,。還有可能首先更新塊9A04',后面是塊9A03' 和9A05,等。應(yīng)注意,根據(jù)本實(shí)施例,有六個(gè)不同的^皮允許的更新次序。 通常,有n!個(gè)可能的更新次序,其中n為塊的數(shù)量,所述塊包括作為新版 本的一部分的修改的數(shù)據(jù)。所有這些n!個(gè)更新次序都產(chǎn)生相同的更新版本。 "更新次序"或"更新順序"是這種順序,即更新版本的塊根據(jù)該順序來 更新(或?qū)懭?。根據(jù)本發(fā)明,更新設(shè)備的工作環(huán)境可預(yù)先配置成分配存儲(chǔ)設(shè)備103中 的一個(gè)或更多區(qū)域,該區(qū)域用于由設(shè)備執(zhí)行的任何軟件所實(shí)現(xiàn)的操作的備 份和/或保護(hù)的目的。更新的內(nèi)容是這樣的操作的一個(gè)例子。這樣的區(qū)域是 "保護(hù)緩沖器"。根據(jù)參考圖3D作為例子描述的一個(gè)實(shí)施方式,有可能通 過將段的原始內(nèi)容的副本存儲(chǔ)在存儲(chǔ)設(shè)備103中的保護(hù)緩沖器3D03中來 保護(hù)該段的原始內(nèi)容,因而與在其中存儲(chǔ)被保護(hù)段的內(nèi)容的數(shù)據(jù)包相比減 小了更新數(shù)據(jù)包的大小。根據(jù)另一實(shí)施方式,多于一個(gè)的段的內(nèi)容(或其一個(gè)或更多部分)可 存儲(chǔ)在保護(hù)緩沖器中。注意,如果在存儲(chǔ)部分之后,保護(hù)緩沖器包括未使 用的區(qū)域,則有可能使用該未使用的區(qū)域來存儲(chǔ)存儲(chǔ)在需要保護(hù)的其它段 中的內(nèi)容(或其部分)的副本。這些其它的^皮保護(hù)段可存儲(chǔ)在當(dāng)前的塊中, 或它們可存儲(chǔ)在存儲(chǔ)設(shè)備中的其它塊中。也就是說,有可能將段或其內(nèi)容 存儲(chǔ)在保護(hù)緩沖器中,而不是將全部塊復(fù)制到保護(hù)緩沖器。以前注意到,有可能將^^莫糊段分成幾個(gè)段,即,^^莫糊段可分成一個(gè)或 更多模糊段以及一個(gè)或更多不模糊段。接著更新命令適合于與分離的段相對(duì)應(yīng)。實(shí)現(xiàn)了這以后,注意在下文中,不是沖是到才莫糊段和/或其才莫糊部分, 而是討論段(和/或模糊段)。雖然在進(jìn)一步討論下面圖9B和9C的實(shí)施例時(shí),不是將段分成子段(模 糊的和/或不模糊的),以便盡可能保持描述簡單,而是對(duì)全部"原始"段 進(jìn)行參考。例如,從圖9A中看來,9A17應(yīng)分成兩個(gè)部分或子段; 一個(gè)被 段9A16'的更新內(nèi)容蓋寫,另一個(gè)被段9A07,的更新內(nèi)容蓋寫。然而,下 面的描述涉及保護(hù)完整的段9A07的原始內(nèi)容。圖9B是根據(jù)本發(fā)明的一個(gè)實(shí)施方式,當(dāng)將圖9A的原始版本更新為其 更新版本時(shí)使用的保護(hù)緩沖器9B01的示意圖。在本例中,保護(hù)緩沖器9B01 的大小是兩個(gè)存儲(chǔ)塊,正如圖9A的保護(hù)緩沖器9A25的情況,然而,這是 非限制性的,且保護(hù)緩沖器可具有任何可適用的大小。注意,當(dāng)更新過程 開始運(yùn)行時(shí),保護(hù)緩沖器是空的,或換句話說,其未使用區(qū)域的大小類似 于保護(hù)緩沖器的大小。在本實(shí)施例中,選定的更新次序是9A05,、 9A04,以及接著是9A03'。 因此,當(dāng)更新塊9A05,的原始內(nèi)容(這意味著蓋寫存儲(chǔ)在9A05中的原始 內(nèi)容)時(shí),段9A16的原始內(nèi)容需要保護(hù)。段9A16的大小小于保護(hù)緩沖器 的大小,因此段9A16的原始內(nèi)容復(fù)制到保護(hù)緩沖器。段9A17也需要保護(hù)。因?yàn)槎?A17的大小小于保護(hù)緩沖器的未使用區(qū) 域,所以段9A17的原始內(nèi)容也可復(fù)制到保護(hù)緩沖器?,F(xiàn)在,當(dāng)需要保護(hù) 的9A05的所有段被保護(hù)時(shí),存儲(chǔ)在塊9A05中的內(nèi)容可由9A05'的更新內(nèi) 容(即,,殳9A16'、 9A07'、 9A17,、 9A15,和9A24的更新內(nèi)容)安全地蓋 寫。如已經(jīng)解釋的,將原始內(nèi)容復(fù)制到保護(hù)緩沖器提供了對(duì)模糊段的保護(hù) 和/或更新過程的可靠性。而且,在更新塊9A04'(因此蓋寫存儲(chǔ)在9A04中的原始內(nèi)容)之前, 且只要在保護(hù)緩沖器中有未使用的區(qū)域,則段9A11、 9A13和9A14的原 始內(nèi)容就復(fù)制到保護(hù)緩沖器,同時(shí)沒有進(jìn)一步保護(hù)段9A15的原始內(nèi)容的 需要,因此其內(nèi)容沒有復(fù)制到保護(hù)緩沖器(9A15由9A15'隱保護(hù),如前面 參考圖9A解釋的)。此外,在更新塊9A03,之前,且只要在保護(hù)緩沖器中 有足夠的未使用區(qū)域,則9A08的原始內(nèi)容也應(yīng)復(fù)制到保護(hù)緩沖器。40但是注意,現(xiàn)在保護(hù)緩沖器9B01的未使用區(qū)域比一個(gè)存儲(chǔ)塊的大小 大一點(diǎn)。如果保護(hù)緩沖器的大小僅僅是一個(gè)存儲(chǔ)塊,因此沒有足夠的未使用區(qū)域來在其中存儲(chǔ)段9A08的副本。當(dāng)保護(hù)緩沖器沒有足夠的未使用區(qū) 域來保護(hù)所有需要保護(hù)的段時(shí),則它們的內(nèi)容需要備份在可選的存儲(chǔ)區(qū) 中,例如更新數(shù)據(jù)包本身中,如在美國6,018,747中或參考圖3C所述的。圖9C是根據(jù)本發(fā)明的另一實(shí)施方式,當(dāng)將圖9A的原始版本更新為其 更新版本時(shí)使用的保護(hù)緩沖器9C01的示意圖。根據(jù)本實(shí)施方式,選擇更 新次序,以便減少保護(hù)操作的數(shù)量或由保護(hù)的內(nèi)容使用的區(qū)域。例如,保 護(hù)緩沖器9C01的使用示出當(dāng)更新次序?yàn)?A05'、 9A03,和最后9A04,時(shí)需 要的保護(hù)操作。如前面參考圖9B解釋的,段9A16和9A17的原始內(nèi)容在 用塊9A05,的更新內(nèi)容蓋寫它們之前被復(fù)制到保護(hù)緩沖器。在更新塊9A03' 之前,以及參考圖9B的公開內(nèi)容,應(yīng)認(rèn)識(shí)到,段9A07不需要保護(hù)。因此, 需要保護(hù)的段9A08和9A09的內(nèi)容復(fù)制到保護(hù)緩沖器9C01的未使用區(qū)域, 而沒有復(fù)制9A07的內(nèi)容。現(xiàn)在,轉(zhuǎn)向塊9A04,,應(yīng)理解,段9A11、 9A13和9A15不需要顯式保 護(hù),因?yàn)樗鼈兊膬?nèi)容以前被復(fù)制到塊9A03,和9A05'(其原始內(nèi)容被隱保 護(hù))。需要保護(hù)的塊9A04中唯一的原始內(nèi)容是存儲(chǔ)在段9A14中的原始內(nèi) 容,因此該內(nèi)容復(fù)制到保護(hù)緩沖器9C01的未使用區(qū)域。通過比較保護(hù)緩沖器犯Ol的使用與保護(hù)緩沖器9C01的使用,有可能 看到,保護(hù)緩沖器9C01比保護(hù)緩沖器9B01包括更少的段的內(nèi)容(在9C01 中五段,與9B01中的六段不同)。精通本領(lǐng)域的人員應(yīng)認(rèn)識(shí)到,由于通過 在塊9A04,之前更新塊9A03,而獲得的三個(gè)段(9A11、 9A13和9A15)的 隱式保護(hù),導(dǎo)致了被保護(hù)段的數(shù)量的減少。此外,注意,在保護(hù)所需要的所有三個(gè)塊中段的內(nèi)容之后,保護(hù)緩沖 器9C01的使用區(qū)域小于保護(hù)緩沖器9B01的使用區(qū)域。這再次是由于通過 選擇上述更新次序(9A05'、 9A03,和接著9A04,),隱式保護(hù)較大的段。因此通常,通過選擇確定的更新次序,能夠減小備份操作的數(shù)量和/ 或在更新過程期間所需要的保護(hù)緩沖器空間。記住,備份操作是耗費(fèi)時(shí)間 的,減少備份操作在獲得較快的更新過程方面是有利的。此外,考慮到將41數(shù)據(jù)寫到包括塊的存儲(chǔ)設(shè)備中的塊中是耗費(fèi)時(shí)間的,應(yīng)認(rèn)識(shí)到,減小用于 保護(hù)的空間(因此也可能是用在保護(hù)緩沖器中的塊的數(shù)量)在獲得較快的 更新過程方面也可能是有利的。而且,注意,更新次序影響需要將段的原始內(nèi)容的副本保持在保護(hù)緩沖器中的持續(xù)時(shí)間。在圖9A的實(shí)施例中,例如段9A09是更新塊9A04'所 需要的。如果更新次序確定塊9A03,應(yīng)在塊9A04,之前更新,則段9A09的 原始內(nèi)容應(yīng)復(fù)制到保護(hù)緩沖器中。有可能(雖然在圖中沒有示出)在更新 塊9A03,和9A04,之間更新其它塊(沒有示出額外的塊),同時(shí)9A04,是根 據(jù)更新次序更新的最后一個(gè)塊。在這樣的情況下,應(yīng)認(rèn)識(shí)到,需要將段9A09 的^皮保護(hù)內(nèi)容保持在保護(hù)緩沖器中,直到塊9A04,被更新為止,或換句話 說,幾乎直到更新過程結(jié)束為止。在所有這些時(shí)間期間,段9A09的被保 護(hù)內(nèi)容占用保護(hù)緩沖器的區(qū)域。然而,有可能在這這種情況下修改更新次序,在其它段之前更新塊 9A04'。已經(jīng)注意到,如果9A09,包括的內(nèi)容與9A09的內(nèi)容完全一致,則 它可用作其隱式保護(hù),因此在這種情況下有可能在更新塊9A04,之后釋放 (或重新使用)由段9A09的被保護(hù)內(nèi)容占用的保護(hù)緩沖器的區(qū)域。然而,甚至在9A09,的內(nèi)容不同于9A09的內(nèi)容時(shí)的那些情況下,仍 然有可能選擇更新次序,該更新次序允許在更新其余塊之前更新依賴于 9A09的原始內(nèi)容來更新的塊,因而允許釋放或重新使用以前由9A09的原 始內(nèi)容的^皮保護(hù)副本占用的保護(hù)緩沖器的區(qū)域。如上所提到的,在圖9A、 9B和9C的上面描述中,假定在RAM中未 壓縮的更新虛擬塊蓋寫未壓縮的原始虛擬塊,以及因此為了方便起見,在 將更新次序用于RAM中的蓋寫之前,發(fā)生段的保護(hù)。應(yīng)理解,在其它實(shí) 施方式中,段可改為在RAM中的蓋寫之前被保護(hù)在RAM中的另一位置, 或可在RAM中的蓋寫之前根本不被保護(hù),因?yàn)樵純?nèi)容可在任何情況下 從存儲(chǔ)設(shè)備取回并解壓縮,只要存儲(chǔ)(物理)塊還沒有被蓋寫。在這些其 它實(shí)施方式中或在未壓縮的更新虛擬塊改為寫到RAM中分離的區(qū)域的實(shí) 施方式中,可推遲非易失性存儲(chǔ)器中段的保護(hù),直到在將壓縮內(nèi)容寫到物 理塊中之前的任何時(shí)間。當(dāng)更新到RAM的分離區(qū)域時(shí),段的保護(hù)不是相關(guān)的,因?yàn)闆]有涉及RAM中的原始虛擬塊。然而,在壓縮的更新內(nèi)容根 據(jù)更新次序蓋寫存儲(chǔ)器中的原始內(nèi)容之前,可能需要保護(hù)某些段,如上所 解釋的。本發(fā)明因此適合于包括物理塊的存儲(chǔ)設(shè)備,其中將更新內(nèi)容寫到物理 塊中影響存儲(chǔ)在其中的其它內(nèi)容。因此,就訪問效率的考慮因素來說,有 可能將把內(nèi)容寫到特定的物理塊中的更新命令聚集在一起,在將內(nèi)容寫到不同的塊中之前,根據(jù)這些更新命令來操作。在圖9A的實(shí)施例中,更新 過程更新塊9A05,,然后是塊9A04',接著是塊9A03'。注意,在RAM (隨機(jī)存取存儲(chǔ)器)中沒有關(guān)于存儲(chǔ)內(nèi)容的這樣的限 制。RAM不包括塊,因此,寫到RAM中的內(nèi)容不影響寫在其中的其它內(nèi) 容。例如,不需要在將內(nèi)容的任何片段(例如,段)寫到塊之前刪除存儲(chǔ) 在塊中的內(nèi)容,類似地,不需要在一個(gè)寫操作期間寫塊的完整內(nèi)容。因此, 有可能在RAM中一段接一段地(例如根據(jù)更新命令操作)產(chǎn)生更新塊的 副本,接著將完整的塊的內(nèi)容壓縮并寫到存儲(chǔ)設(shè)備中的塊中。此外,與一 個(gè)更新塊有關(guān)的更新命令不是特別重要,雖然在一些情況下可考慮訪問效 率。也就是說,更新數(shù)據(jù)包包括命令"插入9A24",接著是"將9A15復(fù) 制到9A15",,后面是"將9A17復(fù)制到9A17",、"將9A07復(fù)制到9A07", 以及"更新9A16以產(chǎn)生9A16,"。然而,就訪問效率考慮因素來說,這等 同于"將9A17復(fù)制到9A17,",后面是"更新9A16以產(chǎn)生9A16,"、"將 9A15復(fù)制到9A15,"、"將9A07復(fù)制到9A07,"以及"插入9A24"。在繼續(xù)進(jìn)行用于確定更新次序的實(shí)施方式的描述之前,應(yīng)注意,段的 "大小是由該段占用的字節(jié)的數(shù)量。然而,這是非限制性的,且 有可能通過任何其它可適用的測量標(biāo)準(zhǔn)如比特、字等來測量段的大小。此外,每個(gè)原始?jí)K都具有表示為DEP (塊)的相關(guān)性值。應(yīng)理解,因 為每個(gè)虛擬塊相應(yīng)于一個(gè)物理塊(以及可確定相應(yīng)于物理塊的每個(gè)虛擬塊 的邊界,如在方法700或800中的),塊B、 Bi等可等同地表示物理塊或虛 擬塊。然而,如上所解釋的,在一些情況下,相應(yīng)于特定物理塊的虛擬塊 在包括舊內(nèi)容時(shí)的大小/邊界可不同于相應(yīng)于相同的特定物理塊的虛擬塊在包括新內(nèi)容時(shí)的大小,因此為了下面容易描述,更新次序表示更新物理 塊的次序。在下面描述的實(shí)施方式中,因?yàn)楦掳l(fā)生在內(nèi)容沒有被壓縮時(shí),所以 當(dāng)計(jì)算等式1和2時(shí)(下面進(jìn)一步地),假定段的大小表示相應(yīng)于物理塊 的虛擬塊中未壓縮段的大小。然而,在其它實(shí)施方式中,大小可表示被壓 縮時(shí)的段的大小。相應(yīng)于更新版本中更新(未壓縮)段的塊B的原始(未 壓縮)段組成"原始的相應(yīng)段CS"。理解了在舊塊中可能需要保護(hù)的段是 原始的相應(yīng)段,塊的相關(guān)性值被確定為包括在其中的所有原始的相應(yīng)段的總大小。最初,塊的DEP值由等式1給出。等式1 其中B,是第i個(gè)塊(注意,這里提到的塊是更新塊,即,原始內(nèi)容被更新 內(nèi)容蓋寫的塊,雖然不必保護(hù)存儲(chǔ)在沒有被更新的那些塊中的內(nèi)容);m是塊中可能需要保護(hù)的原始段的數(shù)量(m〉=0);以及CSj是Bi中相應(yīng)于更新的(未壓縮)段的原始段,其中j=l,2,...,m。如果m-O,則在B,中沒有相應(yīng)的段,因此DEP(B,)二0。例如,在圖9A中,塊9A04的初始相關(guān)性是DEP(9A04)=wm(9 Al 1 )+w'ze(9 Al 3)+wze(9Al 4)+wze(9 Al 5)圖IO是詳細(xì)示出用于確定更新次序的一個(gè)實(shí)施方式的流程圖。注意, 確定由所示實(shí)施方式確定的更新次序,以便減小由被保護(hù)內(nèi)容使用的區(qū)域 或空間。還應(yīng)理解,更新塊根據(jù)一定順序在存儲(chǔ)設(shè)備中被更新,總是結(jié)合 更新數(shù)據(jù)包確定更新次序(因?yàn)樗谴_定更新次序的更新數(shù)據(jù)包,而更新 過程根據(jù)該更新次序進(jìn)行操作)。在1001中分析更新數(shù)據(jù)包,以便例如通過識(shí)別原始段和/或更新段來識(shí)別相應(yīng)的段,其中原始段的內(nèi)容復(fù)制到更新版本的段中,而更新段的內(nèi)容根據(jù)原始段的內(nèi)容來計(jì)算,等等。如上所解釋的,假定在圖10中表示的段是相應(yīng)于物理塊的虛擬塊中的內(nèi)容的未壓縮段。注意,包括在更新版 本中的不相應(yīng)的段(即,與原始版本中的段沒有相應(yīng)性的段),例如插入 更新版本中而與原始版本沒有任何相應(yīng)性的新內(nèi)容不必影響更新次序??蛇x地,可預(yù)先識(shí)別相應(yīng)的段(見例如圖11 ),在此情況下可省略1001。此外,預(yù)先準(zhǔn)備的更新數(shù)據(jù)包不是必不可少的。如果沒有預(yù)先準(zhǔn)備的 更新數(shù)據(jù)包,則有可能例如通過利用本領(lǐng)域中已知的微分工具,或通過任何其它方式如通過美國5,546,552、 WO2004/114130或WO2005/003963中 描述的方法來產(chǎn)生一個(gè)更新數(shù)據(jù)包。在1002中,被更新而用于更新版本的所有塊在被表示為"塊列表" 的列表中列出,其中k是列出的塊的數(shù)量。對(duì)列表中的每個(gè)塊i( i=l,2,...,k) (見1003 )計(jì)算DEP(BO (在1004中)。根據(jù)所示實(shí)施方式,當(dāng)相關(guān)性(DEP)最低的塊被首先插入"更新次 序隊(duì)列,,(因此它將是第一個(gè)取出的)時(shí),塊將在"更新次序隊(duì)列"中列 出。應(yīng)理解,因?yàn)槊總€(gè)虛擬塊相應(yīng)于一個(gè)物理塊(以及可確定相應(yīng)于物理 塊的每個(gè)虛擬塊的邊界,如在方法700或800中的),因此塊列表和更新 次序隊(duì)列可等同地表示物理塊或虛擬塊。然而,如上所解釋的,在一些情 況下,相應(yīng)于特定物理塊的虛擬塊在包括舊內(nèi)容時(shí),其大小/邊界可不同于 當(dāng)相應(yīng)于相同的特定物理塊的虛擬塊包括新內(nèi)容時(shí)的大小,因此為了下面 容易描述,更新次序表示更新物理塊的次序。因此,在1005中初始化空的隊(duì)列。然而,本實(shí)施方式是非限制性的, 也可使用其它數(shù)據(jù)結(jié)構(gòu)如堆棧,如本領(lǐng)域中的技術(shù)人員可認(rèn)識(shí)到的。根據(jù) 更新次序?qū)皮更新的第一個(gè)塊,即,-故推到更新次序隊(duì)列中的第一個(gè)塊是 DEP最低的塊。在1006中,選擇在塊列表中DEP值最小的塊。注意,如果有幾個(gè)(多 于一個(gè))具有相同的最小DEP值的塊,則例如根據(jù)最小的i來選擇其中之 一。選定的塊被表示為Bj。在1007中將Bj推到更新次序隊(duì)列中,而在1008 中將它從塊列表中刪除。接著,在1012中,如果塊列表為空(k=0),則 過程終止。已經(jīng)解釋了 Bj可能依賴于其它塊。也就是說,在Bj中(或更具體地, 在Bj的更新版本中)可能有更新段,其相應(yīng)的原始段在其它原始?jí)K中。對(duì)于仍然在塊列表中列出的每個(gè)這樣的其它塊B。,相應(yīng)于Bj的更新版本中 的段的段被識(shí)別(可能根據(jù)在塊列表中列出的其它塊的起始和終止地址來 識(shí)別段)及其大小從DEP(B。)中減去。為了這么做,測試仍然在塊列表中列出的每個(gè)塊B。(見1009和1010) 以查看Bj是否依賴于B。(即,存儲(chǔ)在Bj中的更新內(nèi)容是否包括這種段, 即該段的相應(yīng)源段在塊B。的舊版本中)。如果Bj依賴于所測試的塊B。,則 在1011中識(shí)別依賴的段,其總的(未壓縮)大小從所測試的塊B。的相關(guān) 性值(DEP)中減去。也就是說,如果在Bj中有t個(gè)相應(yīng)于B。中的舊段的 更新段,則等式2 '° 其中B。是在塊列表中Bj依賴的塊(還不在更新列表中); t是B。中相應(yīng)于Bj中更新段的相應(yīng)段(CS)的數(shù)量(t>=l);以及 C&是B。中相應(yīng)于Bj中更新段的舊段。在DEP值可能在1011中被修 文之后,選擇具有最小相關(guān)性值的下一 塊(1006),且過程本身重復(fù),直到發(fā)現(xiàn)塊列表是空的為止(接著,應(yīng)認(rèn) 識(shí)到k=0 )。當(dāng)終止時(shí),更新次序隊(duì)列表示確定的更新次序。應(yīng)注意,根據(jù)一個(gè)實(shí) 施方式,更新數(shù)據(jù)包可重新排列以反映更新次序??蛇x地,有可能將更新 次序,或更具體地,它的表示,與更新數(shù)據(jù)包關(guān)聯(lián)起來。更新次序的表示 可以是例如通過依照更新次序,根據(jù)目標(biāo)段地址來分類和存儲(chǔ)更新數(shù)據(jù)包 中的更新命令。應(yīng)認(rèn)識(shí)到,方法1000假定不需要更新塊Bj所需要的塊B。的任何段 CS來更新其它塊。然而,在B。的任何特定段可能需要更新除了 Bj外的其它塊的實(shí)施方式中,可修改等式2,使得如果所有相關(guān)的塊都在B。之前,則CS的大小只從B。的DEP中減去。例如,可將階段1010修改成詢問"Bj 是更新次序中依賴于B。的最后的塊嗎?"。圖11是示出根據(jù)本發(fā)明的一個(gè)實(shí)施方式的更新數(shù)據(jù)包的產(chǎn)生的流程 圖。在提供該流程圖的詳細(xì)解釋之前,應(yīng)認(rèn)識(shí)到,當(dāng)產(chǎn)生更新數(shù)據(jù)包時(shí), 發(fā)生器必須預(yù)測更新設(shè)備的行為,包括保護(hù)緩沖器的使用,因而允許例如 通過確定更新次序來提高其使用率。只有當(dāng)預(yù)測到保護(hù)緩沖器被完全占用 (或不可利用)時(shí),才用插入命令代替復(fù)制命令,例如在美國6,018,747 中進(jìn)行的。在1101中,通過任何方法來獲得更新數(shù)據(jù)包(組成第一更新數(shù)據(jù)包)。 它可在本地產(chǎn)生,或從外部源接收,例如通過通信網(wǎng)絡(luò)、在進(jìn)程間通信中、 通過從任何類別的存儲(chǔ)設(shè)備中讀取它等。為了這個(gè)目的,更新數(shù)據(jù)包(組 成第一更新數(shù)據(jù)包)可通過任何已知的方法產(chǎn)生,例如根據(jù)美國6,546,552、 WO 2004/114130或WO 2005/003963或通過利用已知的自身微分工具。在一個(gè)實(shí)施方式中,作為更新數(shù)據(jù)包產(chǎn)生的一部分,舊版本被解壓縮 并裝入RAM中和/或新版本#皮解壓縮并裝入RAM中。在該實(shí)施方式中, 例如通過4丸行方法800或在前面方法700或800的執(zhí)行期間/人前面虛擬塊 邊界的存儲(chǔ)開始,確定解壓縮的舊內(nèi)容的虛擬塊和壓縮的舊內(nèi)容的物理塊 之間的相應(yīng)性,和/或類似地,確定解壓縮的新內(nèi)容的虛擬塊和壓縮的新內(nèi) 容的物理塊之間的相應(yīng)性。例如,在一個(gè)實(shí)施方式中,4妄收的更新數(shù)據(jù)包 可以可選地包括虛擬塊邊界,或可選地,作為在階段1101中執(zhí)行的解壓縮 的一部分,虛擬邊界(例如,如方法800中定義的)可祐L存儲(chǔ)在本地產(chǎn)生 的更新數(shù)據(jù)包中。如果(或者舊的未壓縮內(nèi)容的、或者新的未壓縮內(nèi)容的)虛擬塊和物 理壓縮塊之間的相應(yīng)性是已知的,則對(duì)其執(zhí)行更新命令的虛擬塊中的源未 壓縮的段和目標(biāo)未壓縮的段可容易地與相應(yīng)的壓縮物理塊關(guān)聯(lián)起來,以便除非另外特別說明,假定源段和目標(biāo)段是未壓縮的。在1102中分析更新數(shù)據(jù)包,以便識(shí)別相應(yīng)的(未壓縮)段和更新次序。例如根據(jù)上面描述的圖IO可確定更新次序。注意,在確定更新次序之前, 有可能分析更新數(shù)據(jù)包,以便識(shí)別其中的相應(yīng)段。可選地,有可能在確定 更新次序時(shí)識(shí)別相應(yīng)的段(見例如圖10中的1001)。此外,在那些情況下, 當(dāng)才艮據(jù)優(yōu)選的更新次序預(yù)先組織更新數(shù)據(jù)包時(shí),或當(dāng)更新數(shù)據(jù)包例如與布 置優(yōu)選更新次序(如列表)的信息相關(guān)時(shí),可省略1102。為了根據(jù)本實(shí)施方式產(chǎn)生更新數(shù)據(jù)包,需要獲得可利用來用作更新設(shè) 備中的保護(hù)緩沖器的存儲(chǔ)區(qū)的大小(1103),因而產(chǎn)生用于此設(shè)備的最優(yōu)化 的更新數(shù)據(jù)包。該實(shí)施方式假定根據(jù)所產(chǎn)生的更新數(shù)據(jù)包更新的所有存儲(chǔ) 設(shè)備都具有可利用的存儲(chǔ)器,其大小實(shí)質(zhì)上等于所得到的大小??蛇x地,根據(jù)另一實(shí)施方式,可能具有用于保護(hù)緩沖器的預(yù)定大小。 根據(jù)后面這個(gè)實(shí)施方式產(chǎn)生的更新數(shù)據(jù)包適合于具有大小上大于或等于 預(yù)定大小的空閑區(qū)域的更新設(shè)備。例如,有可能確定例如在更新數(shù)據(jù)包發(fā) 生器中的保護(hù)緩沖器的所需要的大小(例如預(yù)定大小),并將所需要的大小存儲(chǔ)在更新數(shù)據(jù)包中。當(dāng)更新設(shè)備接收更新數(shù)據(jù)包時(shí),或當(dāng)更新過程相 應(yīng)地開始操作時(shí),更新設(shè)備可試圖根據(jù)存儲(chǔ)在更新數(shù)據(jù)包中的需要的大小 來分配保護(hù)緩沖器。如果在設(shè)備中沒有用于分配保護(hù)緩沖器的足夠的空閑 存儲(chǔ)區(qū),則有可能終止更新過程的操作,因而避免例如存儲(chǔ)器溢出。更進(jìn)一步地,有可能通知更新數(shù)據(jù)包服務(wù)器105這種情況,可能包括更新的可 用存儲(chǔ)區(qū)的大小,因而允許更好地適合于更新設(shè)備的更新數(shù)據(jù)包的傳輸和 重新傳輸。注意,這樣的更新數(shù)據(jù)包可由更新數(shù)據(jù)包發(fā)生器104預(yù)先準(zhǔn)備 并預(yù)先存儲(chǔ)在更新服務(wù)器中,如下所述。可選地,更新服務(wù)器可指示更新 數(shù)據(jù)包發(fā)生器104產(chǎn)生適合于可用大小的更新數(shù)據(jù)包等等。然而,也可允許其它實(shí)施方式。例如,有可能與更新設(shè)備通信,以獲 得其可用作保護(hù)緩沖器的有效存儲(chǔ)器(與當(dāng)傳輸給設(shè)備不適合的更新數(shù)據(jù) 包時(shí)從設(shè)備接收信息不同),以及接著產(chǎn)生適合于所得到的大小的更新數(shù) 據(jù)包,并將它傳送到更新設(shè)備。也允許上述實(shí)施方式的組合。精通本領(lǐng)域的人員應(yīng)認(rèn)識(shí)到,當(dāng)更新設(shè)備接收到更新數(shù)據(jù)包時(shí),更新 設(shè)備將更新數(shù)據(jù)包存儲(chǔ)在可訪問的存儲(chǔ)區(qū)中。因此,當(dāng)考慮更新設(shè)備中的 可用存儲(chǔ)區(qū)時(shí),還應(yīng)考慮也需要將更新數(shù)據(jù)包存儲(chǔ)在其中。類似地,確定的存儲(chǔ)區(qū)可能是更新過程的操作等所需要的。返回到圖11,為了根據(jù)本實(shí)施方式產(chǎn)生更新數(shù)據(jù)包,在1104中啟動(dòng) 指針以表示更新次序中的第一更新命令。該指針組成"命令指針"。在所 述實(shí)施方式中,更新命令涉及未壓縮的內(nèi)容(即,虛擬塊的段)。在繼續(xù) 描述圖ll之前,注意,通常根據(jù)本實(shí)施方式將更新命令分成三種主要的類 別。 一種類別包括根據(jù)存儲(chǔ)在原始版本的段中的原始內(nèi)容建立的或基于其 的命令,或換句話說,這樣的命令使用原始內(nèi)容,以便產(chǎn)生更新內(nèi)容。這 些命令組成"建立的命令,,或"轉(zhuǎn)換命令"。例如,"復(fù)制命令"屬于轉(zhuǎn)換 命令的類別。轉(zhuǎn)換命令因此具有"源段"(原始段,命令基于其原始內(nèi)容) 和"目標(biāo)段"(更新段,其更新內(nèi)容通過轉(zhuǎn)換更新命令來產(chǎn)生)。第二種類 別,"合并命令"包括將不基于原始內(nèi)容的更新內(nèi)容合并入更新版本的更新命令。例如,"插入命令,,將內(nèi)容引入更新版本;該內(nèi)容不是從原始版本獲得,而是更可能從更新數(shù)據(jù)包或從任何其它源獲得。第三種類別是"擦 除命令"。擦除命令擦除了包括在原始版本的段中的原始內(nèi)容,而沒有在 更新版本中產(chǎn)生其相應(yīng)的段。擦除命令的例子是"刪除"更新命令。注意,復(fù)制命令不是唯一的轉(zhuǎn)換命令。具有源段和目標(biāo)段的任何命令 都是轉(zhuǎn)換命令。例如, 一個(gè)這樣的轉(zhuǎn)換命令可將存儲(chǔ)在源段中的所有小寫 字符轉(zhuǎn)換成大寫。另一轉(zhuǎn)換命令可用某個(gè)值乘以存儲(chǔ)在源段中的數(shù)字,等等。此外,被轉(zhuǎn)換命令影響的內(nèi)容組成"修改的內(nèi)容"。當(dāng)考慮源段所駐 留的塊(組成"源塊")和目標(biāo)段所駐留的塊(組成"目標(biāo)塊")時(shí),應(yīng)認(rèn) 識(shí)到,源塊的內(nèi)容的至少一部分在目標(biāo)塊中^皮修改。也就是說,有可能源 塊的那部分例如被刪除,因此不形成存儲(chǔ)在更新塊中的內(nèi)容的一部分。根據(jù)圖11中示出的實(shí)施方式,對(duì)于更新數(shù)據(jù)包中的每個(gè)更新命令(見1105),如果在1106中確定了命令指針是否表示轉(zhuǎn)換命令,且如果是表示 的話,則應(yīng)檢查源段的原始內(nèi)容是否需要顯式保護(hù)。例如參考圖9A和9B,前面證實(shí),當(dāng)更新更新塊中的內(nèi)容時(shí),如果根 據(jù)更新次序,相應(yīng)于轉(zhuǎn)換命令的目標(biāo)未壓縮的段的虛擬塊的物理(壓縮) 塊在相應(yīng)于轉(zhuǎn)換命令的源未壓縮的段的虛擬塊的物理(壓縮)塊之前,則49說明書第41/79頁 不需要原始段的內(nèi)容的顯式保護(hù)。因此,在1107中,檢查相應(yīng)于源未壓縮 的段的虛擬塊的物理(壓縮)塊是否在相應(yīng)于目標(biāo)未壓縮的段的虛擬塊的 物理(壓縮)塊之前,或者相應(yīng)于源未壓縮的段的虛擬塊的物理(壓縮) 塊是否與相應(yīng)于目標(biāo)未壓縮的段的虛擬塊的物理(壓縮)塊相同,且如果是這樣,則源段的內(nèi)容需要保護(hù)。在保護(hù)內(nèi)容之前,進(jìn)一步1108中檢查保護(hù)緩沖器是否有足夠的可用存儲(chǔ)區(qū)來存儲(chǔ)源段的被保護(hù)副本。如果在保護(hù)緩沖器中有足夠的可利用的空間,則在1109中,可用大小 減小了源段的大小(例如以未壓縮的格式),且可選地在1110中,源段被 標(biāo)記為空閑的。注意,不是將源段標(biāo)記為空閑的,可選的實(shí)施方式可刪除 源段的原始內(nèi)容或執(zhí)行任何其它可適用的操作,包括根本不執(zhí)行操作。在llll中,命令指針根據(jù)更新次序前進(jìn)到下一更新命令。為了這個(gè)目 的,注意,在更新數(shù)據(jù)包產(chǎn)生期間,不需要將原始版本更新為更新版本, 且其中的"模擬,,就足夠了。因此,當(dāng)根據(jù)圖11的流程圖操作時(shí),更新數(shù) 據(jù)包發(fā)生器(或相應(yīng)地產(chǎn)生更新數(shù)據(jù)包的任何其它處理器)不必根據(jù)更新 命令來操作。返回到1108,如果發(fā)現(xiàn)在保護(hù)緩沖器中沒有足夠的可用空間來存儲(chǔ)源 段的被保護(hù)內(nèi)容,則應(yīng)理解,在用更新內(nèi)容蓋寫相應(yīng)的壓縮段之前必須將 該內(nèi)容保護(hù)在其它地方。以前參考圖3B和3C注意到,該內(nèi)容可例如通過 將其副本存儲(chǔ)在更新數(shù)據(jù)包本身中被保護(hù)。在下文中假定待保護(hù)的未壓縮 內(nèi)容存儲(chǔ)在更新數(shù)據(jù)包中,但可選地,待保護(hù)的壓縮內(nèi)容存儲(chǔ)在更新數(shù)據(jù) 包中。因此,在1112中,由命令指針指示的更新命令用插入命令代替,并 且在1113中,源段的原始內(nèi)容通過將其副本存儲(chǔ)在更新數(shù)據(jù)包中來被保護(hù) (見例如,美國6,018,747 )。在圖11中描述的實(shí)施方式中,當(dāng)可用的保護(hù)緩沖器大小太小時(shí)(見 1108),需要保護(hù)的內(nèi)容存儲(chǔ)在更新數(shù)據(jù)包中。應(yīng)理解,即使源段對(duì)于保護(hù) 緩沖器中的保護(hù)太大,但是只要保護(hù)緩沖器的可用大小大于零,則其它源 段的內(nèi)容(在更新次序中較遠(yuǎn)的其它轉(zhuǎn)換更新命令的源段)對(duì)于其中的保 護(hù)來說足夠小是可能的??蛇x地,在一個(gè)實(shí)施方式中,如果對(duì)1108的回答是預(yù)定的次數(shù)的"否",50則當(dāng)處理時(shí)隨后的轉(zhuǎn)換命令時(shí),1112直接跟在1107之后(即,假定不考 慮管源段的大小,在保護(hù)緩沖器中沒有任何空間,因而在隨后的重復(fù)中繞過1108到1110)。在一個(gè)實(shí)施方式中,在1107中還可檢查源段是否復(fù)制到更新次序中較 前的更新虛擬塊,以便可改為在更新較后的虛擬段時(shí)使用復(fù)制的段。在這 種情況下,更新命令可修改成涉及復(fù)制的段,且方法直接繼續(xù)到1111 (繞 過1108到1113)。在一個(gè)實(shí)施方式中,1107可修改成也檢查例如由于較早處理的轉(zhuǎn)換命 令,在保護(hù)緩沖器/更新數(shù)據(jù)包中是否已經(jīng)保護(hù)了源段。在一個(gè)實(shí)施方式中, 如果在保護(hù)緩沖器/更新數(shù)據(jù)包中已經(jīng)保護(hù)了源段,則只要在更新期間可容 易獲得源段,方法就直接繼續(xù)到1111 (繞過1]08到1113)。在另一實(shí)施方 式中,不是再次保護(hù)源段,可改為存儲(chǔ)指向被保護(hù)的源段的指針。對(duì)讀者來說明顯的是,根據(jù)本實(shí)施方式,可以用更新數(shù)據(jù)包為代價(jià)來 減小保護(hù)緩沖器的大小或反之亦然,例如以滿足系統(tǒng)限制。應(yīng)注意,更新數(shù)據(jù)包可以可選地包括解壓縮命令,用于解壓縮存儲(chǔ)在 存儲(chǔ)塊中的壓縮的原始內(nèi)容。更新數(shù)據(jù)包也可以可選地包括壓縮命令,用 于將更新部分壓縮成存儲(chǔ)在壓縮的更新版本的塊中的內(nèi)容。根據(jù)本實(shí)施方式,使用更新數(shù)據(jù)包構(gòu)造器和更新設(shè)備允許的壓縮方 法,更新數(shù)據(jù)包可在提供到更新設(shè)備之前被壓縮,如下面參考圖12A和12B 描述的。在轉(zhuǎn)向描述在更新設(shè)備中運(yùn)行的更新過程之前,應(yīng)認(rèn)識(shí)到,根據(jù)一些 實(shí)施方式,可重新使用保護(hù)緩沖器,以便增加其效率,如已經(jīng)參考圖9A、 9B和9C提到的。換句話說,當(dāng)不再需要存儲(chǔ)在保護(hù)緩沖器中的內(nèi)容時(shí), 一些實(shí)施方式可釋放由此不需要的內(nèi)容使用的區(qū)域(例如,通過物理刪除 該內(nèi)容或通過將它標(biāo)記為自由的,等等),因而允許更新過程重新使用空 閑區(qū)域,用于進(jìn)一步備份在更新時(shí)需要的操作。有效地重新使用保護(hù)緩沖 器允許執(zhí)行更多的保護(hù)操作,因此可減小更新數(shù)據(jù)包大小(較少的被保護(hù) 內(nèi)容需要存儲(chǔ)在其中)。在產(chǎn)生更新數(shù)據(jù)包期間模擬重新使用,因而允許發(fā)生器知道保護(hù)緩沖器何時(shí)是滿的,以及何時(shí)在保護(hù)緩沖器中有空閑的空 間。在考慮用于產(chǎn)生更新數(shù)據(jù)包的實(shí)施方式之后,根據(jù)本發(fā)明的一個(gè)實(shí)施方式,描述現(xiàn)在轉(zhuǎn)向圖12A和12B,其一起示出描繪原始版本更新為其更 新版本的流程圖。在圖12A和12B中描繪的流程圖例如可適用于在更新設(shè) 備中可操作的更新過程。應(yīng)認(rèn)識(shí)到,所示實(shí)施方式適合于在具有包括塊的 存儲(chǔ)設(shè)備的更新設(shè)備中操作。當(dāng)更新過程開始運(yùn)行時(shí),在1201中,它獲得或訪問存儲(chǔ)在存儲(chǔ)設(shè)備 103中例如在易失性或非易失性存儲(chǔ)器中的更新數(shù)據(jù)包。應(yīng)i^識(shí)到,更新 設(shè)備可接收以前來自更新服務(wù)器105的更新數(shù)據(jù)包??蛇x地,更新數(shù)據(jù)包 通過任何可使用的方式裝入存儲(chǔ)設(shè)備,例如通過從便攜式存儲(chǔ)設(shè)備(例如, 軟盤或光盤)復(fù)制更新數(shù)據(jù)包,或通過從互聯(lián)網(wǎng)接收更新數(shù)據(jù)包。根據(jù)本 實(shí)施方式,更新數(shù)據(jù)包可以需要或可以不需要使用更新數(shù)據(jù)包構(gòu)造器和更 新設(shè)備允許的解壓縮方法來解壓縮。應(yīng)進(jìn)一步認(rèn)識(shí)到,根據(jù)本實(shí)施方式, 被訪問的更新數(shù)據(jù)包有確定的更新次序。例如,如果不同于在數(shù)據(jù)包中命 令出現(xiàn)的次序,則該更新次序可簡單地由更新數(shù)據(jù)包中更新命令的順序確 定,或它可根據(jù)所存儲(chǔ)的與更新數(shù)據(jù)包相關(guān)的其它信息確定,如確定用于 執(zhí)行更新命令的次序的列表。根據(jù)本實(shí)施例,更新次序適合于減少保護(hù)緩 沖器在更新設(shè)備中的使用,或至少改進(jìn)其中可用的保護(hù)緩沖器的利用。根 據(jù)一個(gè)實(shí)施方式,依照?qǐng)D10和11的流程圖,可產(chǎn)生更新數(shù)據(jù)包并可確定 更新次序(例如,在更新數(shù)據(jù)包發(fā)生器中)。在1201中,原始的壓縮版本從存儲(chǔ)設(shè)備取回并被解壓縮到RAM中。 例如通過執(zhí)行圖8的方法或在前面執(zhí)行圖7或8的方法期間從以前虛擬塊 邊界的存儲(chǔ)開始,可確定解壓縮的原始版本中的虛擬塊和壓縮的原始版本 中的物理塊之間的相應(yīng)性。例如在一個(gè)實(shí)施方式中,獲得的更新數(shù)據(jù)包可 以可選地包括解壓縮的原始版本的虛擬塊邊界。在任何情況下,對(duì)其執(zhí)行 更新命令的虛擬塊中的源未壓縮的段可容易與相應(yīng)的(壓縮)物理塊關(guān)聯(lián) 起來,以便確定源未壓縮的段何時(shí)以更新次序更新。在一個(gè)實(shí)施方式中,所獲得的更新數(shù)據(jù)包包括新的未壓縮版本的虛擬邊界,例如該虛擬邊界早些時(shí)候通過執(zhí)行圖7或8的方法被確定和存儲(chǔ)。 在這種情況下,對(duì)其執(zhí)行更新命令的虛擬塊中的目標(biāo)未壓縮的段可容易地 與相應(yīng)的(壓縮)物理塊聯(lián)系起來,以便確定目標(biāo)未壓縮的段何時(shí)在更新 次序中更新。因此為了描述的簡單,假定在更新數(shù)據(jù)包中接收虛擬邊界。 在說明書中當(dāng)描述另 一實(shí)施方式時(shí),該假定被進(jìn)一步放寬。根據(jù)本實(shí)施方式,在更新任何內(nèi)容(因而有蓋寫需要保護(hù)的原始內(nèi)容 的危險(xiǎn))之前,在1202中,更新過程檢查在更新設(shè)備中有足夠的存儲(chǔ)設(shè)備可利用,以根據(jù)在1201中獲得的更新數(shù)據(jù)包運(yùn)行更新過程。根據(jù)本實(shí)施方式,如果更新數(shù)據(jù)包包括需要的保護(hù)緩沖器大小的指示,則此需要的保護(hù)緩沖器大小在1202中與在更新設(shè)備中有效的保護(hù)緩沖器大小比較, 如果有效的保護(hù)緩沖器大小不夠就終止更新過程。而且,在更新任何內(nèi)容之前,更新過程保護(hù)所有需要保護(hù)的原始內(nèi)容。 由于在1202中執(zhí)行的驗(yàn)證,應(yīng)保證可利用的保護(hù)緩沖器足以存儲(chǔ)需要保 護(hù)的所有數(shù)據(jù),因此進(jìn)一步的測試如"有效的保護(hù)緩沖器大小>=被保護(hù)的 段的大小"是多余的。為了允許保護(hù),在1203中根據(jù)更新次序啟動(dòng)指示符(pointer)或指針 以指示第一更新命令。該指針組成"命令指針"。命令指針進(jìn)一步根據(jù)更 新次序前進(jìn)。而且,在1204中,啟動(dòng)指向保護(hù)緩沖器的指示符,組成"保護(hù)指示 符"。保護(hù)指示符指示在保護(hù)緩沖器中被保護(hù)的數(shù)據(jù)應(yīng)被接著寫入的位置。 注意,根據(jù)本實(shí)施方式,更新設(shè)備可例如在RAM中產(chǎn)生被保護(hù)內(nèi)容的副 本(組成"RAM保護(hù)緩沖器"),然后,當(dāng)RAM復(fù)制結(jié)束(即,它包括所 有需要保護(hù)的內(nèi)容)時(shí),將它寫到非易失性存儲(chǔ)設(shè)備中的"非易失性保護(hù) 緩沖器"(也組成"非易失性備份緩沖器")中。將存儲(chǔ)在RAM保護(hù)緩沖 器中的被保護(hù)內(nèi)容寫到非易失性備份緩沖器中稱為"備份塊存儲(chǔ)操作"。 當(dāng)非易失性存儲(chǔ)設(shè)備是包括塊的存儲(chǔ)設(shè)備(與RAM不同)時(shí),該方法比 將每個(gè)被保護(hù)段的內(nèi)容直接寫到非易失性保護(hù)緩沖器中更有效。為了這個(gè) 目的,應(yīng)認(rèn)識(shí)到,在這種情況下,保護(hù)指示符指示在RAM保護(hù)緩沖器中 被保護(hù)的數(shù)據(jù)應(yīng)被接著寫入的位置。然而注意,在下文中,除非特別說明,該描述表示"保護(hù)緩沖器",而沒有在RAM和非易失性保護(hù)緩沖器之間進(jìn)行區(qū)分。注意,"RAM保護(hù)緩沖器"只是"易失性保護(hù)緩沖器"的一個(gè)例子。現(xiàn)在檢查在保護(hù)緩沖器中是否需要保護(hù)虛擬塊中的任何段。對(duì)于每個(gè) 更新命令(見1205 ),更新過程檢查命令指針是否指示轉(zhuǎn)換更新命令(在 1206中)。應(yīng)認(rèn)識(shí)到,不是轉(zhuǎn)換更新命令的更新命令不需要保護(hù),因此, 在1207中,命令指針可前進(jìn)到下一個(gè)更新命令。然而,如果在1206中, 更新過程確定更新命令是轉(zhuǎn)換命令,則它在1208中進(jìn)一步檢查相應(yīng)于包的虛擬塊的物理塊之前,還是與相應(yīng)于包括目標(biāo)段的虛擬塊的物理塊相 同。此外,應(yīng)理解,如果相應(yīng)于包括目標(biāo),殳的虛擬塊的物理塊在相應(yīng)于包 括命令的源段的虛擬塊的物理塊之前,則不需要保護(hù),且更新過程可使命 令指針前進(jìn)(在1207中)。然而,如果相應(yīng)于包括命令的源段的虛擬塊的應(yīng)于包括目標(biāo)段的虛擬塊的物理塊相同,則需要保護(hù)。因此,在1209中, 更新過程將源段復(fù)制到保護(hù)緩沖器,即,到保護(hù)指示符,而在1210中, 更新過程使保護(hù)指更新過程前進(jìn)了源段大小的距離。在源段復(fù)制到在更新 次序中較前的更新虛擬塊且更新命令被修改以從復(fù)制的段中將目標(biāo)段復(fù) 制到更新塊中的實(shí)施方式中,保護(hù)也不是必須的。在源段已經(jīng)^皮保護(hù)在保 護(hù)緩沖器/更新數(shù)據(jù)包中(例如因?yàn)橐呀?jīng)對(duì)源段執(zhí)行轉(zhuǎn)換命令)的實(shí)施方式 中,例如如果在更新過程中可用容易地得到原段,則相同源段的保護(hù)可能 也不是必須的。在另一實(shí)施方式中,不是再次保護(hù)源段,可改為存儲(chǔ)指向 被保護(hù)的源段的指示符。如上所述,為了筒單起見,假定被保護(hù)的段是未壓縮的,而在其它實(shí) 施方式中,可壓縮和/或另外地處理該段。如前所迷,到目前為止參考1206、 1207、 1208、 1209和1210所述的 過程重復(fù)(見1205 ),直到更新過程保護(hù)所有需要保護(hù)的段為止。當(dāng)此過 程結(jié)束之后,在保護(hù)緩沖器中保護(hù)需要保護(hù)的內(nèi)容。用于在保護(hù)緩沖器中 保護(hù)被保護(hù)內(nèi)容的保護(hù)操作的數(shù)量表示為p。然而注意,如果保護(hù)緩沖器是RAM保護(hù)緩沖器,則在開始更新原始版本的原始內(nèi)容之前,其內(nèi)容應(yīng) 存儲(chǔ)在非易失性保護(hù)緩沖器中,因而蓋寫原始內(nèi)容的至少一部分,因而萬 一過程被異常中斷并恢復(fù),也給更新過程提供了可靠性。非易失性保護(hù)緩沖器中的存儲(chǔ)可發(fā)生在例如1205之后和前進(jìn)到1221之前。在保護(hù)緩沖器中保護(hù)內(nèi)容之后,更新過程可開始更新最初存儲(chǔ)在存儲(chǔ) 設(shè)備中的原始內(nèi)容,因而產(chǎn)生更新版本。為了這么做,應(yīng)認(rèn)識(shí)到,以前在 保護(hù)緩沖器中保護(hù)的原始內(nèi)容應(yīng)從其讀取,而不是從原始版本讀取。換句 話說,應(yīng)恢復(fù)這樣的內(nèi)容。因此,在1211中,啟動(dòng)組成"恢復(fù)指示符"的 新指示符,其最初指向保護(hù)緩沖器的開始。在1212中,命令指示符被重 新設(shè)置成指示更新數(shù)據(jù)包中的第一個(gè)更新命令。^^定在所示實(shí)施方式中,相應(yīng)于壓縮的物理塊的虛擬更新的未壓縮塊 的虛擬邊界是已知的,且因此每個(gè)更新的虛擬塊可被有效和獨(dú)立地壓縮到 物理塊中。以前解釋到,所示實(shí)施方式適合于包括塊的存儲(chǔ)設(shè)備,因而在RAM 中(或通常在"易失性更新緩沖器"中)產(chǎn)生更新的虛擬塊的副本,并接 著將整個(gè)虛擬塊的內(nèi)容壓縮到非易失性存儲(chǔ)i殳備中相應(yīng)的物理塊。將存儲(chǔ) 在易失性更新緩沖器中的內(nèi)容壓縮到非易失性存儲(chǔ)設(shè)備中的物理塊中的 操作稱為"更新塊存儲(chǔ)操作"。因此,在1213中啟動(dòng)組成"塊指針"的其 它指針,以根據(jù)更新次序指示第一個(gè)更新塊。在下文中,更新塊存儲(chǔ)操作和備份塊存儲(chǔ)操作的數(shù)量表示為m。然而 這是非限制性的,且m表示塊存儲(chǔ)操作的總數(shù),其包括將內(nèi)容存儲(chǔ)在非易 失性存儲(chǔ)設(shè)備中的塊中的每個(gè)操作。如果在1214中確定命令指針指示不是轉(zhuǎn)換更新命令的更新命令,則 應(yīng)理解,該更新命令不是基于最初作為原始版本的一部分的內(nèi)容,即,它 不基于存儲(chǔ)在原始版本或保護(hù)緩沖器中的內(nèi)容,因此在1215中,更新過 程可根據(jù)命令來操作,因而在RAM中產(chǎn)生目標(biāo)段的副本。不是轉(zhuǎn)換命令 的更新命令可以可選地包括在1112中插入在更新數(shù)據(jù)包中的插入命令。返回到1214,如果更新過程確定命令指針指示轉(zhuǎn)換命令,則它進(jìn)一步否在相應(yīng)于包括目標(biāo)段的虛擬塊的物理塊之前,或與相應(yīng)于包括目標(biāo)段的 虛擬塊的物理塊相同。如上面在所示實(shí)施方式中提到的,分析與虛擬塊中 的未壓縮段以及涉及虛擬塊中的未壓縮段的命令有關(guān)。記住,對(duì)于包括在 相應(yīng)于物理塊的虛擬塊中的源段來說不需要保護(hù),根據(jù)更新次序所述物理塊在相應(yīng)于目標(biāo)段的虛擬塊的物理塊后面,應(yīng)認(rèn)識(shí)到,更新過程在1208 和1209中不保護(hù)此更新命令的源段,保持原始內(nèi)容存儲(chǔ)在原始段中,而 不是將它復(fù)制到保護(hù)緩沖器中。因此,在1217中,更新過程從更新命令 的源段讀取源內(nèi)容,而在1215中,更新過程根據(jù)更新命令來操作,因而 在RAM中產(chǎn)生目標(biāo)段的副本。然而,如果在1216中,更新過程確定相應(yīng)于源段的虛擬塊的物理塊 在相應(yīng)于目標(biāo)段的虛擬塊的物理塊之前或與相應(yīng)于目標(biāo)段的虛擬塊的物 理塊相同,則它應(yīng)從保護(hù)緩沖器中讀取原始內(nèi)容(或其副本)。因此,在 1218中,更新過程從恢復(fù)指示符指示的地址讀取源內(nèi)容,在1219中,恢 復(fù)指示符前進(jìn)了源段大小的距離,因而指向下一個(gè)被保護(hù)的段,以及在 1215中,更新過程根據(jù)更新命令來操作,因而在RAM中產(chǎn)生目標(biāo)段的副 本。無論如何,在1215 (執(zhí)行更新命令,在RAM中產(chǎn)生目標(biāo)段)之后, 應(yīng)認(rèn)識(shí)到,如果在1215中,更新過程將更新塊的最后一個(gè)目標(biāo)段的內(nèi)容 寫到RAM中,則它可將存儲(chǔ)在RAM中的內(nèi)容壓縮到更新塊中。因此, 在1220中,更新過程檢查命令指針是否指示由塊指針指示的塊中的最后 一個(gè)更新命令,如果是這樣,則在1221中,目前存儲(chǔ)在RAM中的更新虛 擬塊的未壓縮內(nèi)容被壓縮到存儲(chǔ)設(shè)備中的更新物理塊中,而在1222中, 塊指針前進(jìn)到下一個(gè)更新塊。可選地,在一些情況下,更新虛擬塊的內(nèi)容 首先纟皮壓縮到(物理塊大小的)RAM中,接著復(fù)制到存儲(chǔ)器。在可選的 實(shí)施方式中,虛擬塊中每個(gè)更新段可被分別地壓縮到RAM中,且當(dāng)在RAM 中達(dá)到物理塊的正確大小時(shí),壓縮塊復(fù)制到存儲(chǔ)器。然而注意,如果在1220中,更新過程確定更新命令不是更新塊中的 最后一個(gè)(如塊指針?biāo)甘镜?,則命令指針前進(jìn)(見1223 )而沒有復(fù)制RAM存儲(chǔ)的內(nèi)容以及沒有使塊指針前進(jìn)。進(jìn)一步注意,通過使命令指針 前進(jìn)(在1223中)而超過更新虛擬塊中最后一個(gè)命令,它變成指示下一 更新虛擬塊中的第一個(gè)更新命令。因此,如果根據(jù)更新次序,前進(jìn)的命令 指針在最后一個(gè)更新命令之前或與最后一個(gè)更新命令相同(見1224),則 更新過程可根據(jù)此更新命令來操作,因而產(chǎn)生更新內(nèi)容(見1214、 1215、 1216等)??蛇x地,當(dāng)更新版本存儲(chǔ)在存儲(chǔ)設(shè)備中時(shí),如果在1224中,更 新過程確定它移動(dòng)而超過最后一個(gè)更新命令,則它可終止。在另一實(shí)施方式中,不是如上所述分別地壓縮每個(gè)塊,其中分別地壓 縮每個(gè)塊是假定虛擬邊界已知或有效的壓縮不重要,而是階段1221改為 在1224后面,即,例如使用方法700來實(shí)現(xiàn)逐塊壓縮。在另一實(shí)施方式中,假定原始版本被解壓縮到RAM中,以及更新的 未壓縮版本寫到RAM中不同的區(qū)域(即,沒有蓋寫RAM中的原始版本)。 在本實(shí)施方式中,在階段1207之前(即,在前進(jìn)到下一更新命令之前), 可執(zhí)行當(dāng)前的更新命令,因而在RAM的不同的區(qū)域中建立完全更新的未 壓縮版本。在本實(shí)施方式中,可省略階段1211和1212。在階段1213中, 塊指針指向RAM中相應(yīng)于更新次序中第一個(gè)物理塊的更新虛擬塊。在本 實(shí)施方式中可省略階段1214到1220,因?yàn)樵及姹救匀辉赗AM中,因 此在更新期間可訪問所有的原始段。階段1221和1222緊接在階段1213 后面,即,每個(gè)虛擬塊的壓縮和寫到存儲(chǔ)器以更新順序出現(xiàn)(假定相應(yīng)于 壓縮的物理塊的更新的未壓縮虛擬塊的虛擬邊界是已知的)。階段1221和 1222重復(fù),直到達(dá)到更新順序中最后一個(gè)塊。省略了階段1223和1224。在其它實(shí)施方式中,假定從更新數(shù)據(jù)包或從執(zhí)行方法1200之前,更 新版本中虛擬塊的虛擬邊界不是已知的。還假定更新數(shù)據(jù)包中的更新命令 與更新版本中塊的虛擬邊界無關(guān)。例如更新數(shù)據(jù)包可指定在RAM中應(yīng)為 更新的未壓縮版本分配的地址范圍,且命令可與該范圍內(nèi)的地址有關(guān)(例 如相對(duì)于范圍的下邊界或上邊界)。在這些實(shí)施方式中,更新命令不以特 定的順序執(zhí)行,在RAM中建立更新的未壓縮版本(沒有蓋寫舊的未壓縮 版本)。然后可例如使用方法700將未壓縮的更新版本壓縮在RAM中,其 中RAM中相同大小的區(qū)域代替每個(gè)物理塊。 一旦完成壓縮,未壓縮的更新版本的虛擬塊邊界就是已知的。在這些實(shí)施方式的一個(gè)中,更新版本的 這些虛擬邊界存儲(chǔ)在非易失性存儲(chǔ)器中,例如在保護(hù)緩沖器中。接著例如 以更新次序(或以在方法1100中遵循的任何次序)分析更新命令,以便保護(hù)需要保護(hù)在保護(hù)緩沖器中的任何源段,見階段1203、 1204、 1206、 1208、 1209、 1210、 1207和1205的上面描述。接著可將壓縮的更新版本以更新 順序?qū)懙酱鎯?chǔ)器(階段1221 )。在一些實(shí)施方式中,除了或代替恢復(fù)指示符,還使用用于在保護(hù)緩沖 器中定位被保護(hù)內(nèi)容的另 一媒介,例如在保護(hù)緩沖器中被保護(hù)段的位置和 源段/塊和/或目標(biāo)段/塊之間的交叉參照表。在這些實(shí)施方式中,不需要完 整地處理每個(gè)塊,即,在處理另一個(gè)塊之前更新、使恢復(fù)指針前進(jìn)、壓縮 和寫到存儲(chǔ)器,以便如果被中斷,則恢復(fù)指針將指向保護(hù)緩沖器中的正確 段。進(jìn)一步參考圖12A和12B的流程圖以及進(jìn)一步參考圖9A、 9B和9C 的實(shí)施例,應(yīng)認(rèn)識(shí)到,在一個(gè)實(shí)施方式中,^皮保護(hù)內(nèi)容的大小(恰好在將 它存儲(chǔ)在非易失性保護(hù)緩沖器之前)可包括比在更新版本中修改的原始版 本的塊的數(shù)量n(n〉1)少的塊。也就是說,在本實(shí)施方式中,需要少于n 個(gè)的操作,以便將被保護(hù)內(nèi)容存儲(chǔ)在非易失性保護(hù)緩沖器中。如果指定塊 存儲(chǔ)操作的數(shù)量為m,則應(yīng)認(rèn)識(shí)到,在本實(shí)施方式中2<=m<2n。進(jìn)一步注意,重新使用保護(hù)緩沖器可能是有利的。在產(chǎn)生更新數(shù)據(jù)包 期間才莫擬的重新使用(參考圖11)反映圖12A和12B中描述的更新過程 的行為。因此,如果利用重新使用,則有可能進(jìn)一步到1221,檢查剛剛存 儲(chǔ)的更新的壓縮內(nèi)容是否使用被保護(hù)內(nèi)容,且如果是這樣,只要被保護(hù)內(nèi) 容不是更新其它的段所需要(相應(yīng)于相同的物理塊或相應(yīng)于根據(jù)更新次序 按順序后面的其它物理塊),就可將該被保護(hù)內(nèi)容標(biāo)記為空閑。在本實(shí)施 方式中,當(dāng)存儲(chǔ)在非易失性保護(hù)緩沖器的一個(gè)塊中的所有被保護(hù)內(nèi)容^皮標(biāo) 記為空閑時(shí),可刪除該被保護(hù)內(nèi)容并可重新使用塊。如上所述,在一些情況下,用于新版本的壓縮算法和/或壓縮比不必與 用于原始版本的壓縮算法和/或壓縮比相同。方法1200充分考慮這個(gè)可能 性,因?yàn)閷?duì)用在新版本中的壓縮與用在原始版本中的壓縮是否相同或不同58沒有限制。應(yīng)進(jìn)一步理解,在一些實(shí)施方式中,可能沒有未壓縮內(nèi)容的更 新,而僅有使用不同壓縮算法和/或壓縮比的原始內(nèi)容的解壓縮。在這些實(shí) 施方式中,更新數(shù)據(jù)包可包括使用不同壓縮算法和/或壓縮比來重新壓縮原 始內(nèi)容的命令。因?yàn)樵谶@些實(shí)施方式中沒有轉(zhuǎn)換命令,沒有源段需要保護(hù), 因此在這些實(shí)施方式中可省略方法1100中保護(hù)緩沖器中段保護(hù)的模擬以 及用插入命令對(duì)更新命令的替換。類似地,在這些實(shí)施方式中可省略方法 1200中在保護(hù)緩沖器中源段的實(shí)際保護(hù)。原位更新因此應(yīng)被理解為包括用 新("更新")版本原位更新原始版本的實(shí)施方式,其中新版本根據(jù)與原始 版本不同的壓縮算法和/或壓縮比來壓縮,而不管未壓縮的原始版本中的內(nèi) 容與未壓縮的更新版本中的內(nèi)容是否相同或不同?,F(xiàn)在假定當(dāng)根據(jù)圖12更新塊時(shí),過程由于任何原因而異常中斷,且 RAM中的內(nèi)容被擦除。在這種情況下,不擦除(非易失性)存儲(chǔ)設(shè)備中 的物理塊內(nèi)容、更新數(shù)據(jù)包和保護(hù)緩沖器。然而根據(jù)上面的討論,讀者應(yīng) 理解, 一旦對(duì)至少一個(gè)塊執(zhí)行階段1221或等效地到存儲(chǔ)器的寫操作,則 由于已經(jīng)發(fā)生的更新,最初包括舊(壓縮)內(nèi)容的一些物理塊就在異常中 斷的時(shí)刻改為包括新(壓縮)內(nèi)容。在一些實(shí)施方式中,因?yàn)樾枰Wo(hù)的 段在階段1209中被保護(hù),因此更新可以根據(jù)更新次序可靠地繼續(xù)處理將 被更新的下一塊。例如在Meller等人的美國公布的申請(qǐng)?zhí)?0050216530中 可確定重新開始的位置,該申請(qǐng)?jiān)谶@里通過引用被并入。在這些實(shí)施方式 的一個(gè)中,假定相應(yīng)于物理塊的更新虛擬塊的虛擬邊界是已知的,則不必 進(jìn)一步處理包括新內(nèi)容的物理塊。因此,在本實(shí)施方式中,可例如根據(jù)方 法800將還沒有更新(即,包括舊內(nèi)容)的所有物理塊解壓縮到RAM中, 接著該方法可繼續(xù)進(jìn)行階段1213,其中塊指針指向在更新次序中還沒有被 更新的第一個(gè)塊。在這些實(shí)施方式的一些中,1218的恢復(fù)指示符可以是不 相關(guān)的,且例如使用交叉參照表可取回來自保護(hù)緩沖器的內(nèi)容。雖然參考圖11和12描述的實(shí)施方式假定,與轉(zhuǎn)換命令有關(guān)的源段可 在保護(hù)緩沖器和/或更新數(shù)據(jù)包中#:潛在地保護(hù),但是應(yīng)理解,在其它實(shí)施 方式中,可另外或代替地保護(hù)與轉(zhuǎn)換命令有關(guān)的其它數(shù)據(jù)。例如在這些其 它實(shí)施方式的一個(gè)中,代替或除了源段外,還可潛在地保護(hù)目標(biāo)段。作為另一例子,在這些其它實(shí)施方式的一個(gè)中,可保護(hù)源段和/或目標(biāo)段的經(jīng)處 理的形式,其中該處理可以與或不與命令指定的轉(zhuǎn)換有關(guān)。到現(xiàn)在為止描述的實(shí)施方式假定每個(gè)虛擬塊被獨(dú)立地壓縮到物理塊 中。因此在本實(shí)施方式中,每個(gè)物理塊可被獨(dú)立地解壓縮到相應(yīng)的虛擬塊 中。在理解了單個(gè)塊的實(shí)施方式之后,應(yīng)注意,有時(shí)每次對(duì)多個(gè)塊執(zhí)行壓 縮(即, 一個(gè)塊的壓縮可能依賴于其它塊的壓縮)。例如,如果原始和更 新版本被預(yù)先準(zhǔn)備好并預(yù)先壓縮,則接著被傳送到用于更新數(shù)據(jù)包產(chǎn)生的 更新數(shù)據(jù)包發(fā)生器(同時(shí)更新數(shù)據(jù)包具有關(guān)于壓縮次序和壓縮算法的信 息)。因此下面描述稱為"多塊實(shí)施方式"的可選實(shí)施方式。在多塊實(shí)施方式中,為了能夠成功地解壓縮存儲(chǔ)在包括壓縮的原始版 本的一部分的某些塊中的確定的壓縮內(nèi)容,有時(shí)需要解壓縮存儲(chǔ)在其它塊 中的壓縮內(nèi)容,所述確定的壓縮內(nèi)容依賴于所述其它塊。例如,在一些壓縮方法(例如由在下文中稱為'zip,的zip工具l吏用的一個(gè)方法)中,如 果內(nèi)容片段在內(nèi)容中重新出現(xiàn)多次,則一次出現(xiàn)(appearance)保持在壓 縮版本的一個(gè)塊中,而其它出現(xiàn)用所述一次出現(xiàn)的指示符或"壓縮參考 (compression reference )"代替,因而防止重復(fù)該片段的出現(xiàn)(可進(jìn)一步 壓縮指針,等等)。該實(shí)施例在圖13中示出,其中1301表示未壓縮的版 本。未壓縮版本1301包括幾個(gè)虛擬塊,其中示出1302、 1303和1304。虛 擬塊1302包括內(nèi)容片段1305。虛擬塊1303包括與1305的內(nèi)容完全一致 的兩個(gè)內(nèi)容片段1306和1307。虛擬塊1304還包括片段1308,其內(nèi)容與 1305的內(nèi)容完全一致。版本1309是相應(yīng)于未壓縮版本1301的壓縮版本。 壓縮版本1309以橫跨至少三個(gè)塊1310、 1311和1312的版本存儲(chǔ)在存儲(chǔ)設(shè) 備中,其中塊1310、 1311和1312分別相應(yīng)于虛擬塊1302、 1303和1304。 片段1305的內(nèi)容復(fù)制為壓縮版本,產(chǎn)生片段1313。注意,可使用其它壓 縮方法來壓縮該片段1313,但為了描述的簡單起見在圖13的說明中忽略 了這個(gè)可能性。塊1311包括都表示片段1313的兩個(gè)壓縮參考1314和1315,而塊1312 也包括一個(gè)這樣的壓縮參考1316。壓縮參考1314、 1315和1316分別代替60片段1306、 1307和1308。如果壓縮參考的大小小于它代替的相應(yīng)片段的 大小,則應(yīng)認(rèn)識(shí)到,這樣的壓縮參考的使用減小了存儲(chǔ)在版本中的內(nèi)容的 大小,或換句話說,它壓縮內(nèi)容。進(jìn)一步注意,壓縮參考1314、 1315和 1316可涉及相應(yīng)于1313的未壓縮片^殳1305、以及^f壬何其它相應(yīng)的未壓縮 或壓縮片段。也就是說,圖13示出塊之間的壓縮相關(guān)性。為了解壓縮包括這樣的 壓縮參考的塊的內(nèi)容,需要解壓縮包括壓縮的一次出現(xiàn)或至少該內(nèi)容的一 部分的塊的內(nèi)容,其中該部分包括所述一次出現(xiàn)。例如,為了解壓縮塊1312 的內(nèi)容,必須解壓縮片段1313的內(nèi)容。以前注意到,與圖13的筒化實(shí)施 例不同,其中1313的內(nèi)容出現(xiàn)好像它是未壓縮的一樣,1313的內(nèi)容通常 進(jìn)一步^f皮壓縮,因此它必須在可解壓縮塊1311和1312之前,即,在1313 的未壓縮內(nèi)容復(fù)制到塊1311和312之前被解壓縮。如果存儲(chǔ)在一個(gè)塊中的內(nèi)容(包括所述一次出現(xiàn))在解壓縮其它出現(xiàn) 之前(即,在解壓縮存儲(chǔ)指示器(indicator)的其它塊的內(nèi)容之前)被更 新,則可能結(jié)果是不可能解壓縮其它塊。在本例中,在更新了 1313的內(nèi) 容之后,就不能夠復(fù)制1313的原始內(nèi)容(或1305的內(nèi)容)以代替指示器 1314、 1315和1316。根據(jù)本發(fā)明的實(shí)施方式,克服這種限制的一個(gè)方法是,在用更新內(nèi)容 蓋寫1313的內(nèi)容之前,將1313的內(nèi)容復(fù)制到例如備份存儲(chǔ)器。接著,當(dāng) 解壓縮塊1311和1312時(shí),1313的原始內(nèi)容可從備份存儲(chǔ)器而不是從1313 復(fù)制。此外或代替地,解壓縮特定的塊所需的計(jì)算可能需要被保護(hù)。其中計(jì) 算的例子包括狀態(tài)寄存器的內(nèi)容、在解壓縮特定的塊之前的解壓縮期間 計(jì)算的計(jì)數(shù)器和/或表格、被產(chǎn)生的并被寫到以前壓縮的塊(多個(gè)塊)中的 一個(gè)或更多表格,所述壓縮塊也是解壓縮特定的塊所需要的,例如Zlib或 Gzip壓縮方法的霍夫曼樹。讀者應(yīng)理解,在一些實(shí)施方式中,除了圖13中示出的壓縮相關(guān)性以 外,還可能有其更新需要修改的段的原始內(nèi)容的段,如上所討論的。例如 在一個(gè)實(shí)施方式中,除了圖13中示出的壓縮相關(guān)性以外,還可能有其更61新需要例如在圖9中的原始內(nèi)容的段。因此通常,當(dāng)更新將被壓縮和將蓋寫原始的壓縮內(nèi)容的段時(shí),如果當(dāng) 前塊中的其它段的更新需要或相應(yīng)于根據(jù)更新次序較遠(yuǎn)的物理塊的其它 虛擬塊的更新需要(見例如圖10、 11和12),如果更新次序中較遠(yuǎn)的原始 物理塊的解壓縮需要,和/或如果更新次序中較前的新(更新)物理塊的解 壓縮需要,則原始內(nèi)容的至少一部分(例如當(dāng)未壓縮時(shí))需要被保護(hù)(例 如在備份存儲(chǔ)器中)。如上所解釋的,也可能或代替地需要保護(hù)其它計(jì)算。以前參考圖13注意到,為了解壓縮包括壓縮參考的塊的內(nèi)容,需要 解壓縮包括參考的內(nèi)容片段的塊的內(nèi)容。見例如圖13中的塊1311,當(dāng)將 版本1309更新為圖中沒有示出的另一版本時(shí),為了解壓縮塊1311,塊1310 也必須被解壓縮。然而,假定圖13中的塊與舊版本有關(guān),如果在更新次序中塊1310在 塊1311之前,則參考的內(nèi)容片段(存儲(chǔ)在塊1310中的)將在更新過程到 達(dá)塊1311之前更新是可能的。如果是這種情況,解壓縮存儲(chǔ)在塊1311中 的內(nèi)容可能變得不可能。因此,存儲(chǔ)在參考片段中的內(nèi)容應(yīng)被保護(hù)在例如 備4分存儲(chǔ)器中,因而即使最初包括在其中的壓縮-參考已經(jīng)^^皮超過并因而是 不可利用的內(nèi)容片段時(shí),也允許塊1311的解壓縮。通常,當(dāng)更新存儲(chǔ)在原始?jí)K(更新塊)中的壓縮內(nèi)容以及壓縮的原始 內(nèi)容包括根據(jù)更新次序在更新塊之前的塊的壓縮參考(組成"后向參考") 時(shí),向后參考的內(nèi)容片段(壓縮的或沒有被壓縮的)應(yīng)被保護(hù)在例如備份 存儲(chǔ)器中。通過保護(hù)非易失性存儲(chǔ)器(例如備份存儲(chǔ)器)中的內(nèi)容,也確 保當(dāng) 一些塊包括壓縮的更新內(nèi)容而其它塊包括壓縮的原始內(nèi)容時(shí),如果更 新過程在終止之前失敗可重新開始更新過程。也就是說,在這種情況下保 護(hù)提供了可靠性。此外,應(yīng)考慮,用于原始?jí)K的壓縮-參考可參考在更新次序中對(duì)更新塊 較遠(yuǎn)的內(nèi)容片段(組成"后向參考")。如前面提到的,應(yīng)認(rèn)識(shí)到,在解壓 縮參考的內(nèi)容片段之前,更新塊的原始內(nèi)容不能被解壓縮且確定地不能被 更新。因此,如果更新過程在更新更新塊之前失敗,則確保前向參考的內(nèi) 容片段還沒有被蓋寫,因而有可能再次解壓縮前向參考的內(nèi)容片段。因此,不需要將前向參考的內(nèi)容片段保護(hù)在非易失性存儲(chǔ)器(例如備份存儲(chǔ)器)中,以及因此將它們解壓縮在RAM (組成RAM-存儲(chǔ)器)中就足夠了。根據(jù)本發(fā)明的一個(gè)實(shí)施方式,在更新內(nèi)容和用更新的壓縮內(nèi)容蓋寫原 始的壓縮內(nèi)容之前,在更新過程開始時(shí)前向參考的原始內(nèi)容片段可存儲(chǔ)在 RAM存儲(chǔ)器中。應(yīng)認(rèn)識(shí)到,有可能解壓縮存儲(chǔ)在塊中的內(nèi)容,其中前向 參考的內(nèi)容片段存在于這些塊之間,接著在RAM存儲(chǔ)器中只存儲(chǔ)由前向 參考的片段使用的內(nèi)容。以類似的方式,可在更新開始之前將所有后向參 考的內(nèi)容片段保護(hù)在備份存儲(chǔ)器中。應(yīng)認(rèn)識(shí)到,如果所有前向參考的原始內(nèi)容片段都存儲(chǔ)在RAM存儲(chǔ)器 中以及所有后向參考的內(nèi)容片段都被保護(hù)在備份存儲(chǔ)器中,則可根據(jù)任何 需要的次序繼續(xù)進(jìn)行更新,所述任何需要的次序包括不同于壓縮次序的更 新次序,因?yàn)榍跋騾⒖嫉膬?nèi)容片段備份在RAM存儲(chǔ)器中而后向參考的內(nèi) 容片段被保護(hù)在備份存儲(chǔ)器中。進(jìn)一步解釋到,當(dāng)利用線性壓縮時(shí),壓縮參考通常指根據(jù)壓縮次序在 壓縮-參考之前的內(nèi)容片段。然而,可能出現(xiàn)例外。例如,霍夫曼編碼是一 種線性壓縮,其中精通本領(lǐng)域的人員應(yīng)認(rèn)識(shí)到,霍夫曼編碼壓縮的版本包 括霍夫曼表。然而,這個(gè)例子是非限制性的,也可存儲(chǔ)其它對(duì)象,例如不 同類別的目錄等。在當(dāng)目錄和其它對(duì)象存儲(chǔ)在原始的壓縮版本的末尾(再 次根據(jù)更新次序)時(shí)的那些情況下,例如通過將專用的更新命令插入更新 數(shù)據(jù)包中可在備份存儲(chǔ)器中保護(hù)這些對(duì)象。類似地,應(yīng)認(rèn)識(shí)到,如果更新的(新的)壓縮內(nèi)容參考在更新順序中 處于較后面的內(nèi)容,則更新塊的新內(nèi)容不能在解壓縮參考的新內(nèi)容片段之 前被解壓縮。然而,如果更新過程在參考的內(nèi)容和被參考的內(nèi)容的更新之 間失敗,則除非已經(jīng)保護(hù)被參考的內(nèi)容,否則新的壓縮內(nèi)容的解壓縮是不 可4亍的。現(xiàn)在詳述用于更新內(nèi)容的非限制性方法的實(shí)施方式,其中使用多塊壓 縮來壓縮舊的壓縮版本和/或新的壓縮版本,因此在塊之間可能有壓縮相關(guān) 性。為了限制說明書的長度,當(dāng)描述相同時(shí),下面為多塊實(shí)施方式介紹的 所有流程圖保留上面用于逐塊實(shí)施方式中的階段的引用,且讀者參考上面 的那些階段的描述,而不重復(fù)這里的描述。圖14示出根據(jù)本發(fā)明的實(shí)施方式的多塊壓縮的流程圖。在方法1400的階段1402中,壓縮內(nèi)容指針(跟蹤壓縮內(nèi)容)被置于壓縮內(nèi)容的起始 地址,即,第一個(gè)物理塊的開始,未壓縮內(nèi)容根據(jù)與本實(shí)施方式的壓縮方 案相關(guān)的壓縮次序^皮壓縮到該物理塊。應(yīng)注意,在一些實(shí)施方式中,用于 壓縮內(nèi)容的原始版本的壓縮算法和/或壓縮比可不同于用于壓縮內(nèi)容的新 版本的壓縮算法和/或壓縮比,其中新版本原位更新原始版本。還要注意, 雖然這里使用術(shù)語物理塊,但是內(nèi)容被壓縮到RAM中與物理塊相等大小 的區(qū)域是可能的。在階段1404中,未壓縮內(nèi)容指針(跟蹤未壓縮內(nèi)容) 被置于未壓縮內(nèi)容的起始地址,即,其內(nèi)容將被壓縮的第一個(gè)虛擬塊的開 始。在階段1406中,虛擬塊的下邊界被限定和/或記錄為未壓縮內(nèi)容指針 的位置。在階段1408中,使用任何適當(dāng)?shù)膲嚎s方案來壓縮來自虛擬塊的 內(nèi)容的單元,例如一個(gè)字節(jié)。接著增加壓縮內(nèi)容指針和未壓縮內(nèi)容指針, 以分別^皮定位在壓縮的內(nèi)容單元和相應(yīng)的未壓縮的內(nèi)容單元的終止地址 處(階段1410)。如果壓縮內(nèi)容指針不在物理塊的末尾且未壓縮內(nèi)容指針 不在未壓縮內(nèi)容的末尾(階段1412),則壓縮另一內(nèi)容單元(階段1408 ) 并相應(yīng)地增加壓縮內(nèi)容指針和未壓縮內(nèi)容指針(階段1410)。在壓縮內(nèi)容指針到達(dá)物理塊的末尾或未壓縮內(nèi)容指針到達(dá)未壓縮內(nèi) 容的末尾之后(階段1412 ),接著在階段1414中,虛擬塊的上邊界被限定 和/或記錄為未壓縮內(nèi)容指針的位置。在階段1416中可更新一個(gè)或更多解 壓縮記錄,如下面更詳細(xì)討論的。如果到達(dá)未壓縮內(nèi)容的末尾(1418), 則方法結(jié)束。否則增加壓縮內(nèi)容指針和未壓縮內(nèi)容指針(階段1420),以 便表示下一個(gè)塊。對(duì)下一個(gè)塊的過程接著重復(fù)到階段1406,直到到達(dá)最后 一個(gè)塊且過程結(jié)束(階段1418中的"是")。因此,通過遵循圖14的方法或類似的方法,可在壓縮期間限定和/或 記錄相應(yīng)于每個(gè)物理塊的每個(gè)虛擬塊的邊界。階段1416根據(jù)舊版本或新版本是否被壓縮來變化。在任一情況下,解壓縮記錄允許確定最佳的更新次序并保護(hù)解壓縮所需要的段。如上所 述,期望更新在更新次序中較后面的內(nèi)容,需要該內(nèi)容以其原始形式來解 壓縮其它原始內(nèi)容。相反,期望更新在更新次序中較前面的內(nèi)容,需要該 內(nèi)容以其更新形式來解壓縮其它更新內(nèi)容。因此,為了維持上面研究的大 小相關(guān)性的方法,其中具有較大相關(guān)性的塊在更新次序中稍后被更新,對(duì) 于舊版本來說,解壓縮其它塊所需要的來自特定塊的內(nèi)容的大小被用于確 定該特定塊的大小相關(guān)性。然而,對(duì)于新版本來說,用于解壓縮特定塊的 來自其它塊的內(nèi)容的大小影響該特定塊的大小相關(guān)性。
因此,假定舊版本被壓縮,則對(duì)于每個(gè)塊來說,保存解壓縮其它塊所 需要的來自該塊的內(nèi)容的解壓縮記錄。例如在一個(gè)實(shí)施方式中,用于特定 塊的記錄可包括另一塊所需要的每個(gè)內(nèi)容片段、該內(nèi)容片段的大小(以任 何預(yù)定的單位)以及需要內(nèi)容片段的塊數(shù)量。繼續(xù)本實(shí)施例,用于每個(gè)塊
的記錄可包括一個(gè)或更多元組(tuple ),每個(gè)元組的形式為 <需要用于解 壓縮的內(nèi)容的塊、所需內(nèi)容、所需內(nèi)容的大小>。在一個(gè)實(shí)施方式中,如 果需要內(nèi)容片段來解壓縮多個(gè)塊,則DR記錄只包括用于該內(nèi)容片段的一 個(gè)元組,該元組包括需要內(nèi)容片段的塊的陣列。例如形式可為<需要用于
解壓縮的內(nèi)容的塊1.....需要用于解壓縮的內(nèi)容的塊n、所需內(nèi)容、所
需內(nèi)容的大小>。該實(shí)施方式假定被保護(hù)的內(nèi)容片段可被取回多于一次, 用于解壓縮在更新次序中較后面的原始?jí)K。
然而,假定新版本被壓縮,接著對(duì)于每個(gè)特定塊,保存解壓縮特定塊 所需要的來自其它塊的內(nèi)容的解壓縮記錄。例如在一個(gè)實(shí)施方式中,用于 特定塊的記錄可包括所需要的來自另 一塊的每個(gè)內(nèi)容片段、內(nèi)容片段的大 小(以任何預(yù)定的單位)以及提供內(nèi)容片段的塊數(shù)量。繼續(xù)本實(shí)施例,用 于每個(gè)塊的記錄可包括一個(gè)或更多元組,每個(gè)元組的形式為 <提供解壓
縮所需要的內(nèi)容的塊、所需內(nèi)容、所需內(nèi)容的大小〉。
在一個(gè)實(shí)施方式中,相同的記錄可適用于一個(gè)塊,而不管該塊是否包 括原始和更新內(nèi)容,以及在本實(shí)施方式中,元組可包括內(nèi)容是否與原始或 更新內(nèi)容相關(guān)的二進(jìn)制表示。因此,根據(jù)該二進(jìn)制表示,可理解,元組中 的內(nèi)容是否是解壓縮另一塊(原始)所需要的、或解壓縮與記錄(更新)相關(guān)的塊所需要的。
在一個(gè)實(shí)施方式中,任何元組中的內(nèi)容可以是以未壓縮的或壓縮的形 式,這取決于解壓縮所需要的內(nèi)容的形式,內(nèi)容的大小反映以該形式的內(nèi) 容的大小。
在另一實(shí)施方式中,包括在元組中的內(nèi)容是未壓縮的內(nèi)容,且記錄的 大小是未壓縮內(nèi)容的大小,因?yàn)榧俣ūWo(hù)緩沖器或更新數(shù)據(jù)包存儲(chǔ)未壓縮 內(nèi)容中的任何被保護(hù)內(nèi)容。在其它實(shí)施方式中,例如其中被保護(hù)內(nèi)容在存 儲(chǔ)在保護(hù)緩沖器或更新數(shù)據(jù)包中之前被壓縮,元組可記錄壓縮內(nèi)容和壓縮 內(nèi)容的大小。
解壓縮記錄的格式和內(nèi)容可根據(jù)實(shí)施方式來變化。例如,在一個(gè)實(shí)施 方式中,可不記錄大小。
解壓縮所需要的內(nèi)容可為塊中的實(shí)際內(nèi)容(即,作為塊的一部分的內(nèi) 容,而不考慮壓縮算法如何)、在壓縮期間添加到塊的內(nèi)容例如存儲(chǔ)的表 格或任何其它計(jì)算、或沒有真正存儲(chǔ)在任何塊中例如狀態(tài)寄存器、存儲(chǔ)器 計(jì)數(shù)器、工作表格的內(nèi)容、或任何其它計(jì)算。為了解壓縮記錄的目的,假 定在一個(gè)實(shí)施方式中,任何沒有真正存儲(chǔ)在任何塊中的內(nèi)容被"虛擬地" 存儲(chǔ)在塊中,該塊在壓縮順序中緊接地在需要用于解壓縮的內(nèi)容的塊之 前。除非另外說明,下面在解壓縮記錄中列出的實(shí)際內(nèi)容、添加的內(nèi)容、 或虛擬地存儲(chǔ)的內(nèi)容的處理中沒有區(qū)別。
除了圖13所示的壓縮參考例子之外,解壓縮所需要的塊中實(shí)際內(nèi)容 的另一例子是與命令有關(guān)的內(nèi)容,該命令的相關(guān)內(nèi)容越過塊邊界。例如假 定存在合并(incorporating)命令,其相關(guān)內(nèi)容延伸到后面的塊(多個(gè)塊) 中。在這種情況下,與該命令有關(guān)的前面塊(多個(gè)塊)中的內(nèi)容可能是解 壓縮與該命令有關(guān)的后面塊(多個(gè)塊)中內(nèi)容所需要的。
此外,在壓縮內(nèi)容越過塊邊界的這樣的情況下,為了準(zhǔn)確起見,被"越 過的,,內(nèi)容壓縮的未壓縮內(nèi)容與后面虛擬塊的一部分有關(guān),因而正好在此 未壓縮內(nèi)容的片段之前設(shè)定邊界。
讀者應(yīng)理解,在壓縮每個(gè)塊之后的階段1416可更新用于該塊的解壓縮記錄和/或用于其它塊的解壓縮記錄。
在一些實(shí)施方式中,例如如果解壓縮記錄是在壓縮內(nèi)容的解壓縮期間 準(zhǔn)備的且在那個(gè)時(shí)間之前并不需要(見下面對(duì)解壓縮記錄的使用),則可 省略階段1416。
在一個(gè)實(shí)施方式中,解壓縮記錄存儲(chǔ)在分離的存儲(chǔ)區(qū),例如在RAM
中的表格中。
在一些實(shí)施方式中,解壓縮記錄還可存儲(chǔ)在非易失性存儲(chǔ)器中或更新
數(shù)據(jù)包中。在其它實(shí)施方式中,解壓縮記錄保留在RAM中,并可在處理 以后被蓋寫(例如,使用方法1700或1800 )。
應(yīng)理解,因?yàn)槊總€(gè)虛擬塊相應(yīng)于一個(gè)物理塊(以及可確定相應(yīng)于物理 塊的每個(gè)虛擬塊的邊界,例如在下面的方法1400或1500中),因此解壓 縮記錄可等同地與虛擬塊或物理塊相關(guān)/表示虛擬塊或物理塊。然而,因?yàn)?虛擬塊當(dāng)包括相應(yīng)于特定物理塊的舊內(nèi)容時(shí)的大小/邊界可能在一些情況 下不同于虛擬塊包4舌相應(yīng)于相同的特定物理塊的新內(nèi)容時(shí)的大小/邊界,為 了簡單起見,解壓縮記錄被處理為與物理塊相關(guān)/表示物理塊。如上解釋的 解壓縮記錄中的內(nèi)容和/或大小可以如上解釋的未壓縮和/或壓縮格式。
解壓縮記錄還可以或可選地在多塊解壓縮期間確定。多塊解壓縮的一 個(gè)例子在圖15中示出。假定物理塊的解壓縮根據(jù)解壓縮次序出現(xiàn),該解 壓縮次序取決于所使用的解壓縮方法。
在所示實(shí)施方式中,例如在方法800中,解壓縮遵循與壓縮次序相同 的次序繼續(xù)進(jìn)行物理塊的解壓縮。然而,每當(dāng)物理塊被解壓縮時(shí),在階段 1515中,更新需要被更新的任何解壓縮記錄,其中上面在方法1400的階 段1416中解釋了解壓縮記錄。
在一些實(shí)施方式中,例如如果解壓縮記錄或等效物在壓縮內(nèi)容的壓縮 期間已經(jīng)被準(zhǔn)備并在解壓縮期間可訪問,則可省略階段1515。例如,在這 些實(shí)施方式的一些中,解壓縮記錄可存儲(chǔ)在非易失性存儲(chǔ)器中或更新數(shù)據(jù) 包中,且在方法1500的解壓縮期間,解壓縮記錄可裝入分別的存儲(chǔ)區(qū), 例如RAM中的表格。既然已經(jīng)參考圖13理解了多塊解壓縮和壓縮,應(yīng)理解,如果原始?jí)K
1310在原始?jí)K1311和1312之前更新,則會(huì)造成困難,除非段1313的內(nèi) 容存儲(chǔ)在其它地方(例如,以任何適當(dāng)?shù)男问皆诒Wo(hù)緩沖器中或在更新數(shù) 據(jù)包中)。因此,如果存儲(chǔ)器的減小是期望的特征,則當(dāng)確定更新次序時(shí) 應(yīng)考慮塊之間的解壓縮相關(guān)性。
然而,在很多情況下,除了例如通過圖13所示的解壓縮相關(guān)性以外, 還有例如圖9A所示的更新相關(guān)性。因此,為了提供可最小化存儲(chǔ)空間和/ 或備份操作的更新次序,提供了一種方法,該方法根據(jù)實(shí)施方式可潛在地 考慮解壓縮相關(guān)性和/或更新相關(guān)性。讀者應(yīng)理解,在一些情況下,例如如 果存儲(chǔ)器大小不是與確定更新次序的計(jì)算復(fù)雜性 一樣重要的因素,則可能 期望忽略解壓縮相關(guān)性和/或更新相關(guān)性,并且不去試圖確定最佳更新次 序。
然而通常,期望通過選擇確定的更新次序來減少在更新過程期間所需 要的備份操作的數(shù)量和/或保護(hù)緩沖器。記住,備份操作是耗費(fèi)時(shí)間的,減 少備份操作在實(shí)現(xiàn)較快的更新過程方面是有利的。此外,考慮到將數(shù)據(jù)寫 到包括塊的存儲(chǔ)設(shè)備中的塊中是耗費(fèi)時(shí)間的,應(yīng)認(rèn)識(shí)到,減小用于保護(hù)的 空間(以及因此也可能減少在保護(hù)緩沖器中使用的塊的數(shù)量)在實(shí)現(xiàn)較快 的更新過程方面是有利的。
在繼續(xù)進(jìn)行用于確定更新次序的實(shí)施方式的描述之前,應(yīng)注意,段的 "大小"是被該段占用的字節(jié)的數(shù)量。然而,這是非限制性的,且通過任 何其它可適用的測量單位如比特、字等來測量段的大小是可能的。
此外,每個(gè)塊都有表示為DEP (塊)的相關(guān)性值。應(yīng)理解,因?yàn)槊總€(gè) 虛擬塊相應(yīng)于一個(gè)物理塊(以及可確定每個(gè)相應(yīng)于物理塊的虛擬塊的邊 界,例如在方法1400或1500中),塊B、 Bi可等同地表示虛擬塊或物理塊。 然而,因?yàn)樘摂M塊當(dāng)包括相應(yīng)于特定物理塊的舊內(nèi)容時(shí)的大小/邊界可能在
小/邊界,為了簡單起見,更新次序指更新物理塊的次序。
相應(yīng)于更新版本中的更新(未壓縮)段的塊B的原始(未壓縮)段組 成"原始的相應(yīng)段CS"。假定CS是未壓縮的,因?yàn)楸緦?shí)施方式假定更新發(fā)生在內(nèi)容是未壓縮的時(shí),因此^^定CS的大小表示未壓縮的大小。然而, 在其它實(shí)施方式中,大小可表示當(dāng)CS被壓縮時(shí)的大小。解壓縮其它原始
塊所需要的原始?jí)KB的段或解壓縮緊接在塊B之后的塊所需要的工作計(jì)算 結(jié)果組成"舊的解壓縮段DSoW。需要解壓縮更新塊B的段或工作計(jì)算結(jié) 果組成"新的解壓縮段DSwew"。假定每個(gè)DSoW或DS"ew的形式(壓縮 或未壓縮)與當(dāng)該DSo/t/或DSwew在包括該DSo/t/或DS"ew的解壓縮記 錄中被列為需要的內(nèi)容時(shí)的形式相同,其中在DR中列出的需要的內(nèi)容的 形式可根據(jù)如上解釋的實(shí)施方式變化。
因此,最初,塊的DEP值由下列等式給出<formula>formula see original document page 69</formula>
等式3
其中
Bi是第i個(gè)塊(注意,這里提到的塊是更新塊,即,原始內(nèi)容由更新 內(nèi)容蓋寫的塊,同時(shí)不需保護(hù)存儲(chǔ)在沒有被更新的塊中的內(nèi)容);
m是可能需要保護(hù)的塊中的原始段的數(shù)量(m>=0 );
CSj是Bi中相應(yīng)于更新段的原始段,其中j=l,2,...,m(m>0,這種段的 數(shù)量);
DSoldr是在解壓縮的B,中或壓縮的B,中的段,或者是用于Bw (壓縮 順序中的下一塊)的解壓縮的工作計(jì)算結(jié)果(例如存儲(chǔ)器計(jì)數(shù)器或工作壓 縮算法的表格),其中其它塊(多個(gè)塊)在被解壓縮時(shí)表示所述段,同時(shí) Bi包括舊內(nèi)容。注意,r=l,2,...,s (s〉0,這種段/結(jié)果的數(shù)量)。
DSneWu是任何段(在壓縮或未壓縮的塊中)或工作計(jì)算結(jié)果,該工作 計(jì)算結(jié)果是解壓縮包括新內(nèi)容時(shí)的B,所需要的,其中u=l,2,...,v(v>0,這 種^/結(jié)果的數(shù)量)。
例如,假定圖9A和圖13的相關(guān)性以及原始?jí)K9A04與原始?jí)K1310 相同,則塊9A04/1310的最初相關(guān)性為
D五P(9 A04/1310)= ze(9 Al 1 )+咖(9Al 3)+蟲e(9Al 4)+咖(9 Al 5)+應(yīng)注意,根據(jù)在壓縮和/或解壓縮期間產(chǎn)生的解壓縮記錄,可容易確定 用于特定塊的每個(gè)DSold和DSnew的大小,如上面參考圖14或15討論 的。例如,如果包括所需要的內(nèi)容的大小,連同在解壓縮記錄中的需要的 內(nèi)容,則可在DEP的計(jì)算中使用記錄的大小。作為另一例子,如果記錄在 解壓縮記錄中的需要的內(nèi)容的大小沒有包括在解壓縮記錄中,則可在DEP 的計(jì)算期間計(jì)算所需要的內(nèi)容的大小。圖16示出根據(jù)本發(fā)明的實(shí)施方式用于確定多塊壓縮的更新次序的實(shí) 施方式。在1601中,分析預(yù)先準(zhǔn)備的更新數(shù)據(jù)包,以便識(shí)別如上定義的相應(yīng) 段。為了筒單起見,假定在圖16中表示的相應(yīng)段CS是內(nèi)容的未壓縮段。注意,包括在更新版本中的不相應(yīng)的段(即,與原始版本中的段沒有 相應(yīng)性的段),例如插入更新版本中而與原始版本沒有任何相應(yīng)性的新內(nèi) 容不必影響更新次序??蛇x地,可預(yù)先識(shí)別相應(yīng)的段(見例如圖17),其 中可忽略框1601。此外,預(yù)先準(zhǔn)備的更新數(shù)據(jù)包不是必不可少的。如果沒 有預(yù)先準(zhǔn)備的更新數(shù)據(jù)包,則有可能例如通過利用本領(lǐng)域中已知的微分工 具,或通過任何其它方式如通過美國6,546,552、 WO2004/114130或 WO2005/003963中描述的方法來產(chǎn)生一個(gè)。此外,還可識(shí)別如上關(guān)于等式3定義的舊的解壓縮段和新解壓縮^:。 例如,在一個(gè)實(shí)施方式中,從解壓縮記錄中可獲得舊解壓縮段和新解壓縮 段。例如當(dāng)新的和舊的壓縮塊被解壓縮并裝入RAM中時(shí),可產(chǎn)生解壓縮 記錄,如下面關(guān)于圖17描述的。作為另一例子,解壓縮記錄可已包括在 預(yù)先封裝的更新數(shù)據(jù)包中。假定每個(gè)舊的解壓縮段或新的解壓縮段的形式 (壓縮或未壓縮)與當(dāng)該舊的或新的解壓縮段在解壓縮記錄中被列為需要 的內(nèi)容時(shí)的形式相同,其中在DR中列出的需要的內(nèi)容的形式可根據(jù)如上 解釋的實(shí)施方式變化。如在方法1000中的(見上面的描迷),對(duì)于塊列表(即,將被更新的 塊)中的每個(gè)塊i (i=l,2,...,k),方法1600繼續(xù),但如在等式3中一樣計(jì)70算DEP(Bi)(在1604中)。一旦B^皮置于更新隊(duì)列中,仍然在塊列表中(即,還沒有在更新隊(duì)列 中)的任何塊的DEP值就可適合于考慮Bj將在較早的時(shí)候被更新。已經(jīng) 解釋了 Bj可能依賴于其它塊。也就是說,在Bj中(或更具體地,在B,的 更新版本中)可能有更新段,其相應(yīng)的原始段在其它原始?jí)K中??蛇x地或 另外,Bj的解壓縮(當(dāng)Bj有舊內(nèi)容時(shí))可能依賴于其它塊中的(實(shí)際的和 /或添加的)內(nèi)容和/或依賴于與壓縮順序中緊接地在前面的塊相關(guān)的工作 計(jì)算結(jié)果。也可能其它塊的解壓縮可依賴于Bj (當(dāng)Bj有新內(nèi)容時(shí))或當(dāng) Bj是壓縮順序中緊接在前面的塊時(shí)依賴于與Bj相關(guān)的工作計(jì)算結(jié)果。因此,對(duì)于仍然被列在塊列表中的每個(gè)這樣的其它塊B。,相應(yīng)于Bj 的更新版本中的段的段被識(shí)別,且其大小從DEP(B。)中減去。此外或代 替地,在階段1610和1611中,原始B。中的同樣或代替地是解壓縮原始 Bj所需要的(實(shí)際的、添加的和/或虛擬地存儲(chǔ)的)段被識(shí)別,且其大小從 DEP(B。)中減去。(如上所述,解壓縮所需要的段可包括存儲(chǔ)在塊中不用 考慮壓縮的實(shí)際內(nèi)容,在壓縮期間添加到塊的添加內(nèi)容和/或解壓縮緊接在 后面的塊所需要的虛擬地"存儲(chǔ)"的內(nèi)容,然而所有這些都可被類似地處 理)。此外或代替地,在階段1613和1614中,更新的Bj中的解壓縮更新 的B。所需要的(實(shí)際的、添加的和/或虛擬地存儲(chǔ)的)段被識(shí)別,且其大 小從DEP (B。)中減去。明顯地是,因?yàn)槔缡褂梅椒?400或1500產(chǎn)生 的解壓縮記錄列出需要來自原始B。的其解壓縮的內(nèi)容的塊,并列出提供解 壓縮更新的B。所需要的內(nèi)容的塊,1611和1614中的計(jì)算所需要的的Bj 和B。之間的壓縮相關(guān)性可容易地從解壓縮記錄得到。如果例如使用方法 1400或1500在1611和1614中使用的大小被記錄在解壓縮記錄中,則可 直接從解壓縮記錄得到該大小。否則可從記錄在解壓縮記錄中的所需要的 內(nèi)容計(jì)算該大小。階段1611和1614的計(jì)算通過等式4概括= D五尸CB。) + 2^e(C《)+2版(腸/《)+ 2^eCaS"腳。)v'=0 『0等式4其中71t是相應(yīng)于段Bi的B。中的相應(yīng)段(CS )的數(shù)量(t〉=l);z是用于解壓縮原始Bi的舊的B。中的解壓縮段(無論是實(shí)際的、添加 的還是虛擬地存儲(chǔ)的)的數(shù)量(z>=l);b是用于解壓縮新的B。的新的Bi中的解壓縮段(無論是實(shí)際的、添加 的還是虛擬存儲(chǔ)的)的數(shù)量(b〉=l)。在DEP值可能—皮修改之后,如在等式4中,對(duì)于保留在塊列表中的所 有塊,選擇具有最小相關(guān)性值的下一個(gè)塊(1006 ),且過程自身重復(fù),直 到發(fā)現(xiàn)塊列表是空的為止(然后應(yīng)認(rèn)識(shí)到,k=0)。當(dāng)終止時(shí),更新次序隊(duì)列表示考慮了更新和壓縮相關(guān)性的所確定的更 新次序。應(yīng)注意,在其它實(shí)施方式中,更新次序可通過修改等式3或4來 只考慮更新相關(guān)性或只考慮壓縮相關(guān)性。例如,如果只考慮更新相關(guān)性, 則等式3或4分別簡化為等式1或2。作為另一例子,如果只考慮壓縮相 關(guān)性,則等式3變成 vr=l w二l而等式4簡化為讀者應(yīng)理解,上面對(duì)等式3和4的修改不是限制性的,且根據(jù)本實(shí)施 方式,更新次序可考慮更新相關(guān)性、解壓縮相關(guān)性(原始版本)和解壓縮 相關(guān)性(更新版本)的任何組合,等式3和4相應(yīng)地被調(diào)整。應(yīng)注意,根據(jù)一個(gè)實(shí)施方式,可重新排列更新數(shù)據(jù)包以反映更新次序。 可選地,有可能使更新次序或更準(zhǔn)確地,其表示與更新數(shù)據(jù)包關(guān)聯(lián)起來。 更新次序的表示可為例如通過依照更新次序,根據(jù)更新命令的目標(biāo)段地址 來分類更新命令并將其存儲(chǔ)在更新數(shù)據(jù)包中。應(yīng)認(rèn)識(shí)到,方法1600假定任何段CS和更新和/或解壓縮塊Bj所需要 的塊B。的DSoW不需要更新或解壓縮任何其它塊。然而,在B。的任何特 定段可能是更新和/或解壓縮除了 Bj外的其它塊所需要的實(shí)施方式中,可 修改等式4,使得如果所有相關(guān)的塊都在B。之前,則CS和/或DSoW的大小只從B。的DEP中減去。換句話說,可將階段1610修改成詢問"Bj是更 新順序中依賴于B。來更新和/或解壓縮舊塊的最后的塊嗎?"。圖17是根據(jù)本發(fā)明的一個(gè)實(shí)施方式示出更新數(shù)據(jù)包的產(chǎn)生的流程圖。 在提供該流程圖的詳細(xì)解釋之前,應(yīng)認(rèn)識(shí)到,如上面討論的,當(dāng)產(chǎn)生更新 數(shù)據(jù)包時(shí),發(fā)生器必須預(yù)測更新設(shè)備的行為,包括保護(hù)緩沖器的使用,因 而允許例如通過確定更新次序來提高其使用率。只有當(dāng)預(yù)測到保護(hù)緩沖器 被完全占用(或不可利用)時(shí),才用插入命令代替復(fù)制命令,例如在美國 6,018,747中完成的,且更新或解壓縮所需要的其它內(nèi)容插入更新數(shù)據(jù)包 中。應(yīng)注意,方法1700包括在保護(hù)緩沖器中內(nèi)容保護(hù)的模擬,以便能夠 將不適合于保護(hù)緩沖器的任何^皮保護(hù)內(nèi)容插入更新數(shù)據(jù)包中。例如在下面 討論的方法1800或1900期間,內(nèi)容被模擬插入保護(hù)緩沖器中的順序和內(nèi) 容被插入更新數(shù)據(jù)包中的實(shí)際順序(當(dāng)保護(hù)緩沖器被模擬為充滿的時(shí))可 遵循內(nèi)容的預(yù)測使用(即,需要)。在另一實(shí)施方式中,內(nèi)容進(jìn)入保護(hù)緩 沖器的模擬存儲(chǔ)和內(nèi)容進(jìn)入更新數(shù)據(jù)包的實(shí)際存儲(chǔ)的順序可遵循不同的 順序。在這個(gè)其它實(shí)施方式中,可能有允許在例如方法1800或1900期間 從保護(hù)緩沖器或更新數(shù)據(jù)包取回正確的內(nèi)容的媒介(medium )。在又一實(shí) 施方式中,保護(hù)緩沖器和/或更新數(shù)據(jù)包中的區(qū)域可被描繪在不同的區(qū)域 中,以便標(biāo)記用于更新所需要的段的區(qū)域、用于解壓縮(舊)的所需要的 段的區(qū)域和/或用于需要解壓縮(新)的所需要的段的區(qū)域。在這些其它實(shí) 施方式的一個(gè)中,在所描繪的區(qū)域內(nèi)的順序遵循內(nèi)容的預(yù)測使用,然而, 這些區(qū)域可按與訪問區(qū)域的預(yù)測次序不同的物理地址的次序布置(即,即 使假定要求解壓縮舊的所需要的段在解壓縮新的所需要的段之前,解壓縮 新的所需要的段可能布置在比解壓縮舊的所需要的段較低的地址)。然而, 在任何情況下,優(yōu)選地,在方法1700中的模擬正確地模擬(即,預(yù)測) 在保護(hù)緩沖器中內(nèi)容保護(hù)的順序,如在方法1800中的,以便方法1800可 有理由地假定更新數(shù)據(jù)包包括不適合于保護(hù)緩沖器的任何被保護(hù)內(nèi)容。為了說明的筒單而描述了實(shí)施方式,其中內(nèi)容進(jìn)入保護(hù)緩沖器的模擬 存儲(chǔ)和內(nèi)容進(jìn)入更新數(shù)據(jù)包的實(shí)際存儲(chǔ)的順序不必遵循該內(nèi)容的預(yù)測使用,但有允許取回正確存儲(chǔ)的內(nèi)容的媒介。該媒介可包括例如交叉參照表 (也稱為相應(yīng)性表),其提供塊、DR元組和/或與被保護(hù)內(nèi)容以及被保護(hù)內(nèi) 容的存儲(chǔ)位置(例如,在保護(hù)緩沖器或更新數(shù)據(jù)包中的位置)有關(guān)的更新 命令(例如,用于解壓縮具有舊內(nèi)容的塊、用于解壓縮具有新內(nèi)容的塊、 或用于更新具有舊內(nèi)容的塊)之間的相應(yīng)性。該相應(yīng)性表可被例如存儲(chǔ)在 保護(hù)緩沖器、更新數(shù)據(jù)包中或其它地方。階段1701包括準(zhǔn)備工作。例如,更新數(shù)據(jù)包(組成第一更新數(shù)據(jù)包)通過任何方法來獲得。它可在本地產(chǎn)生,或從外部源接收,例如通過通信 網(wǎng)絡(luò)、在過程間通信中、通過從任何類型的存儲(chǔ)設(shè)備讀取它,等等。為了 這個(gè)目的,更新數(shù)據(jù)包(組成第一更新數(shù)據(jù)包)可通過任何已知的方法產(chǎn)生,例如根據(jù)美國6,546,552、 WO 2004/114130或WO 2005/003963或通過 利用已知的自身微分工具。在一個(gè)實(shí)施方式中,作為更新數(shù)據(jù)包產(chǎn)生的一部分,使用多塊壓縮而 被壓縮的舊版本被解壓縮并裝入RAM中以及使用多塊壓縮而被壓縮的新 版本解壓縮并裝入RAM中。確定在解壓縮的舊內(nèi)容的虛擬塊和壓縮的舊 內(nèi)容的物理塊之間,和/或類似地,在解壓縮的新內(nèi)容的虛擬塊和壓縮的新 內(nèi)容的物理塊之間的相應(yīng)性,如通過執(zhí)行圖15的方法或根據(jù)前面執(zhí)行圖 14或15的方法期間虛擬塊邊界的以前存儲(chǔ)所確定的。此外,與舊內(nèi)容有 關(guān)的和與新內(nèi)容有關(guān)的DR通過執(zhí)行圖15的方法或根據(jù)前面執(zhí)行圖14或 15的方法期間虛擬塊邊界的以前存儲(chǔ)來確定。例如在一個(gè)實(shí)施方式中,接收到的更新數(shù)據(jù)包可以可選地包括虛擬塊 邊界和/或用于舊內(nèi)容和/或新內(nèi)容的DR,或可選地,作為在階段1701中 執(zhí)行的解壓縮的一部分,虛擬塊和/或DR(如在圖15的方法中定義的)可 存儲(chǔ)在更新數(shù)據(jù)包中。在1702中分析更新數(shù)據(jù)包,以便獲得更新次序。例如根據(jù)上面描迷 的圖16可確定更新次序。此外,在那些情況下,當(dāng)根據(jù)優(yōu)選的更新次序 預(yù)先組織更新數(shù)據(jù)包時(shí),或當(dāng)它例如與布置優(yōu)選更新次序(如列表)的信 息相關(guān)時(shí),可省略1702。在一個(gè)實(shí)施方式中,可使更新命令和/或解壓縮 記錄重新排序以反映更新序列。方法1700如方法1100 (階段1103到1113,見上面的描述)中的一樣 繼續(xù),然而由于在指定的保護(hù)緩沖器中的;f莫擬空間限制,代替在到達(dá)最后 的更新命令時(shí)終止(階段1105中的"否"),本方法繼續(xù)確定DR中的哪個(gè) 內(nèi)容將被包括在更新數(shù)據(jù)包中。對(duì)于關(guān)于DR的更多細(xì)節(jié),讀者參考上面 方法1400和1500的描述。應(yīng)注意,因?yàn)楸緦?shí)施方式卩叚定相應(yīng)性表、更新 命令不需以更新順序處理,但是,處理的模擬順序應(yīng)優(yōu)選地模仿在下面討 論的方法1800中處理的實(shí)際順序。在階段1714中,啟動(dòng)DR指針以指向與待處理的第一塊相關(guān)的DR的 第一元組。為了描述的筒單,在所述實(shí)施方式中,假定與相同塊的DR(多 個(gè)DR)相關(guān)的元組纟皮順序地處理。處理塊的次序可遵循任何順序,例如 根據(jù)更新次序、根據(jù)壓縮次序或依照任何其它次序。在另一實(shí)施方式中, 與相同塊的DR (多個(gè)DR)有關(guān)的元組不必順序地處理。優(yōu)選地,處理元 組的模擬順序應(yīng)模仿在下面討論的方法1800中處理的實(shí)際順序。為了描 述的簡單還假定,對(duì)于每個(gè)塊都有一個(gè)DR,該DR包括與具有新內(nèi)容的 塊有關(guān)的元組和與具有原始內(nèi)容的塊有關(guān)的元組。例如,每個(gè)元組可包括 元組是否與解壓縮原始或新內(nèi)容有關(guān)的二進(jìn)制表示??蛇x地,對(duì)每個(gè)塊可 能有多個(gè)DR,例如兩個(gè), 一個(gè)與具有新內(nèi)容的塊有關(guān), 一個(gè)與具有舊內(nèi) 容的塊有關(guān)。在任何情況下,只要DR指針沒有前進(jìn)而超過階段1716中的最后一個(gè) DR,則在階段1718中確定目前檢查的元組是否表示更新順序中較后面的 塊。如果該元組與具有舊內(nèi)容的塊有關(guān),則確定在檢查的元組中的內(nèi)容是 否是解壓縮在更新順序中較后面的至少一個(gè)塊所需要的(例如通過檢查元 組中的塊參考(多個(gè)參考))。如果元組與具有新內(nèi)容的塊有關(guān),則確定解 壓縮檢查的塊所需要的在檢查的元組中的內(nèi)容是否由在更新順序中較后 面的塊提供(例如通過檢查元組中的塊參考)。應(yīng)注意,如果塊元組具有< 在DR中需要/提供用于解壓縮的內(nèi)容的塊(多個(gè)塊)、在DR中需要的內(nèi) 容、需要的內(nèi)容的大小>的格式,則僅僅通過檢查DR和了解更新順序可確 定階段1716。如果檢查的元組只表示較前面的塊,則不需要進(jìn)一步的處理,且方法可移到用于該塊的DR (多個(gè)DR)中的下一元組,或如果元組對(duì)檢查的塊 來說是最后一個(gè)則移到與下一個(gè)塊有關(guān)的DR (階段1726 )。另一方面,如果DR的元組表示至少一個(gè)較后面的塊,則在階段1722 中,確定在保護(hù)緩沖器中是否有剩余的空間以存儲(chǔ)DR內(nèi)容。如果在保護(hù) 緩沖器中有空間,則剩余的空間減小了 DR內(nèi)容的大小(階段1722),且 可選地在1724中內(nèi)容被標(biāo)記為空閑的。例如可使用記錄在元組中的內(nèi)容 的大小,或可計(jì)算記錄在元組中的內(nèi)容的大小。如果在保護(hù)緩沖器中沒有 任何空間,則在階段1725中DR的元組中的內(nèi)容^皮插入更新數(shù)據(jù)包中。在 一個(gè)實(shí)施方式中,DR的元組中的內(nèi)容^^照原樣插入更新數(shù)據(jù)包中(即, 如果在DR中是未壓縮的則存儲(chǔ)為未壓縮的,以及如果在DR中是壓縮的 則存儲(chǔ)為壓縮的),而在另一實(shí)施方式中,該內(nèi)容可在存儲(chǔ)在更新數(shù)據(jù)包 中之前可被處理,例如壓縮、解壓縮等。在有交叉參照表的實(shí)施方式中, 在交叉參照表中可制定記錄項(xiàng),例如參考更新數(shù)據(jù)包中的位置和需要用于 解壓縮的內(nèi)容的塊(多個(gè)塊)和/或提供用于解壓縮的內(nèi)容的塊。在一個(gè)實(shí)施方式中,在對(duì)1720 "否定,,了預(yù)定的數(shù)量之后和/或從方 法1700的1108的以前執(zhí)行開始,可假定在保護(hù)緩沖器中沒有更多的空間 而不管DR元組中內(nèi)容的大小如何,以及隨后階段1725 (更新數(shù)據(jù)包中的 保護(hù))可直接跟隨"是"到階段1718。在一個(gè)實(shí)施方式中,在階段1718中,例如由于較早時(shí)候處理的元組, 還可檢查元組內(nèi)容是否已經(jīng)保護(hù)在更新數(shù)據(jù)包和/或保護(hù)緩沖器中,且在這 種情況下,如果在更新期間可容易獲得^皮保護(hù)的元組內(nèi)容,本方法可直接 繼續(xù)進(jìn)行到階段1726。在另一實(shí)施方式中,代替再次保護(hù)元組內(nèi)容,可改 為存儲(chǔ)指向纟皮保護(hù)的元組內(nèi)容的指示符。過程繼續(xù)進(jìn)行1726,然后繼續(xù)進(jìn)行到階段1728中的下一元組,或如 果該元組對(duì)于所檢查的塊是最后一個(gè)元組,則繼續(xù)進(jìn)行到階段1730中的 下一塊的DR。 一旦處理了最后一個(gè)塊的DR中的最后一個(gè)元組,本方法 就結(jié)束。對(duì)讀者應(yīng)^L明顯,根據(jù)本實(shí)施方式,例如為了滿足系統(tǒng)限制,可以用 更新數(shù)據(jù)包為代價(jià)來減小保護(hù)緩沖器的大小,或反之亦然。應(yīng)注意,更新數(shù)據(jù)包可以可選地包括解壓縮命令,用于解壓縮存儲(chǔ)在 存儲(chǔ)塊中的壓縮的原始內(nèi)容。它也可以可選地包括壓縮命令,用于將更新 的虛擬塊壓縮成存儲(chǔ)在壓縮的更新版本的塊中的內(nèi)容。根據(jù)本實(shí)施方式,使用更新數(shù)據(jù)包構(gòu)造器和更新設(shè)備允許的壓縮方 法,更新數(shù)據(jù)包可在提供到更新設(shè)備之前被壓縮,如下面參考圖18描述 的。在轉(zhuǎn)向描述在更新設(shè)備中運(yùn)行的更新過程之前,應(yīng)認(rèn)識(shí)到,根據(jù)一些 實(shí)施方式,可重新使用保護(hù)緩沖器,以便增加其效率。換句話說,當(dāng)不再 需要存儲(chǔ)在保護(hù)緩沖器中的內(nèi)容時(shí), 一些實(shí)施方式可釋放被此不需要的內(nèi) 容^f吏用的區(qū)域(例如,通過物理刪除這些內(nèi)容或通過將它標(biāo)記為空閑的, 等等),因而允許更新過程重新使用空閑區(qū)域,用于進(jìn)一步備份在更新時(shí) 需要的操作。有效地重新使用保護(hù)緩沖器允許執(zhí)行更多的保護(hù)操作,因此 可減小更新數(shù)據(jù)包大小(較少的被保護(hù)內(nèi)容需要存儲(chǔ)在其中)。在產(chǎn)生更 新數(shù)據(jù)包期間模擬重新使用,因而允許發(fā)生器知道保護(hù)緩沖器何時(shí)是滿 的,以及其中何時(shí)有空閑的空間。在考慮用于產(chǎn)生更新數(shù)據(jù)包的實(shí)施方式1700之后,根據(jù)本發(fā)明的一 個(gè)實(shí)施方式,圖18示出更新被多塊壓縮的版本的方法。圖18可適用于例 如在更新設(shè)備中可操作的更新過程。應(yīng)認(rèn)識(shí)到,所示實(shí)施方式適合于在具 有包括塊的存儲(chǔ)設(shè)備的更新設(shè)備中操作。作為準(zhǔn)備工作的一部分(階段1801 ),當(dāng)更新過程開始運(yùn)行時(shí),它獲 得或訪問存儲(chǔ)在存儲(chǔ)設(shè)備103例如易失性或非易失性存儲(chǔ)器中的更新數(shù)據(jù) 包。應(yīng)認(rèn)識(shí)到,更新設(shè)備可已經(jīng)接收以前來自更新服務(wù)器105的更新數(shù)據(jù) 包??蛇x地,更新數(shù)據(jù)包通過任何可適用的方式裝入存儲(chǔ)設(shè)備,例如通過 從便攜式存儲(chǔ)設(shè)備(例如,軟盤或光盤)復(fù)制它,或通過從互聯(lián)網(wǎng)接收它。 應(yīng)進(jìn)一步認(rèn)識(shí)到,根據(jù)本實(shí)施方式,被訪問的更新數(shù)據(jù)包有確定的更新次如果不同于在命令數(shù)據(jù)包中出現(xiàn)的次序,則它可根據(jù)所存儲(chǔ)的與更新數(shù)據(jù) 包相關(guān)的額外信息確定,如確定用于執(zhí)行更新命令的次序的列表。根據(jù)本 實(shí)施例,更新次序適合于減少更新設(shè)備中保護(hù)緩沖器的使用,或至少提高77其中可用的保護(hù)緩沖器的利用率。根據(jù)一個(gè)實(shí)施方式,依照?qǐng)D16和17的 流程圖可能已經(jīng)產(chǎn)生更新數(shù)據(jù)包并且可能已經(jīng)確定更新次序(例如,在更 新數(shù)據(jù)包發(fā)生器中)。在1801中,舊的壓縮版本從存儲(chǔ)設(shè)備取回,并例如以壓縮順序被解 壓縮到RAM中。例如通過執(zhí)行圖15的方法,或根據(jù)在前面執(zhí)行圖14或 15的方法期間虛擬塊邊界的以前存儲(chǔ),可確定解壓縮的舊版本和壓縮的舊 版本中的虛擬塊之間的相應(yīng)性。此外,通過執(zhí)行圖15的方法,或才艮據(jù)前 面執(zhí)行圖14或15的方法期間虛擬塊邊界的以前存儲(chǔ),可確定與舊內(nèi)容有 關(guān)的DR元組。例如在一個(gè)實(shí)施方式中,所獲得的更新數(shù)據(jù)包可以可選地 包括虛擬塊邊界和/或與舊內(nèi)容有關(guān)的DR元組。在任何情況下,對(duì)其執(zhí)行 更新命令的虛擬塊中的源未壓縮的段可容易地與相應(yīng)的壓縮的物理塊關(guān) 聯(lián)起來,以便確定未壓縮的源段何時(shí)以更新次序更新。在一個(gè)實(shí)施方式中,獲得的更新數(shù)據(jù)包包括新的未壓縮版本的虛擬邊 界以及可選地相關(guān)的DR記錄,例如其被通過執(zhí)行圖14或15的方法較早 地確定和存儲(chǔ)。在這種情況下,對(duì)其執(zhí)行更新命令的虛擬塊中的目標(biāo)未壓 縮的段可容易地與相應(yīng)的(壓縮的)物理塊關(guān)聯(lián)起來,以便確定目標(biāo)未壓 縮的段何時(shí)以更新次序更新。因此為了描述的簡單,假定在更新數(shù)據(jù)包中 接收虛擬邊界。進(jìn)一步地,在說明書中當(dāng)描述另一實(shí)施方式時(shí),該假定被 放寬。如在方法1200中的,方法1800接著優(yōu)選地以與被模擬的相同的順序 繼續(xù)進(jìn)行更新命令的處理(見上面的方法1700)。在具有交叉參照表的實(shí)施方式中,對(duì)于在保護(hù)緩沖器中保護(hù)的每個(gè) 段,例如在保護(hù)緩沖器中的位置和更新命令、源段的塊和/或目標(biāo)段的塊之 間制定位置記錄項(xiàng)。在這樣的實(shí)施方式中,恢復(fù)指示符可能是不重要的, 且在這種情況下,可省略階段1211 (恢復(fù)指針的初始化),以及在階段1218 中可使用交叉參照表從保護(hù)緩沖器取回內(nèi)容。在方法1800中省略了方法1200的階段1221,即,物理存儲(chǔ)塊沒有用 RAM中的內(nèi)容更新。在階段1224之后,不是過程結(jié)束,而是使用階段1826中的多塊壓縮 將更新(即,新)版本壓縮到RAM中,如在方法1500中的。假定用于每 個(gè)塊的虛擬塊(其相應(yīng)于RAM中的壓縮塊)邊界和用于RAM中新的壓 縮塊的DR元組可通過執(zhí)行階段1826或從更新數(shù)據(jù)包中得到??蛇x地,如 果用于每個(gè)新塊的DR包括在更新數(shù)據(jù)包中,則階段1826中的多塊壓縮可 被推遲到稍后進(jìn)行(例如在階段1842之前)。DR元組(解壓縮舊塊或新塊所需要的)以與方法1700中模擬的相同 的順序纟皮處理。在階段1828中,啟動(dòng)DR指針以指向與待處理的第一塊相關(guān)的DR的 第一元組。為了描述的簡單,在所述實(shí)施方式中,假定與相同塊的DR(多 個(gè)DR)相關(guān)的元組纟皮順序地處理。處理塊的次序可遵循任何順序,例如 根據(jù)更新次序、根據(jù)壓縮次序或依照任何其它次序。在另一實(shí)施方式中, 與相同塊的DR (多個(gè)DR)有關(guān)的元組不必順序地處理。優(yōu)選地,處理元 組的實(shí)際順序應(yīng)模仿在上面討論的方法1700中處理的才莫擬順序。為了描 述的簡單還^^定,對(duì)于每個(gè)塊都有一個(gè)DR,所述DR包括與具有新內(nèi)容 的塊有關(guān)的元組和與具有原始內(nèi)容的塊有關(guān)的元組。例如,每個(gè)元組可包 括該元組是否與解壓縮原始或新內(nèi)容有關(guān)的二進(jìn)制表示??蛇x地,對(duì)每個(gè) 塊可能有多個(gè)DR,例如兩個(gè), 一個(gè)與具有新內(nèi)容的塊有關(guān), 一個(gè)與具有 舊內(nèi)容的塊有關(guān)。只要DR指針沒有前進(jìn)而超過階段1830中的最后一個(gè)DR,則在階段 1832中確定目前檢查的元組是否表示更新順序中較后面的塊。如果元組與 具有舊內(nèi)容的塊有關(guān),則確定所檢查的元組中的內(nèi)容是否是解壓縮在更新 順序中較后面的至少一個(gè)塊所需要的(例如通過檢查元組中的塊參考(多 個(gè)參考))。如果元組與具有新內(nèi)容的塊有關(guān),則確定解壓縮所檢查的塊需 要的所檢查的元組中的內(nèi)容是否由在更新順序中較后面的塊提供(例如通 過氺全查元組中的塊參考)。應(yīng)注意,如果塊元組具有〈在DR中需要/提供用 于解壓縮的內(nèi)容的塊(多個(gè)塊)、在DR中需要的內(nèi)容、所需要的內(nèi)容的大 小>的格式,則僅僅通過檢查DR和了解更新順序就可確定階段1832。如果所檢查的元組只表示較前面的塊,則不需要任何進(jìn)一步的處理,且方法可移到用于該塊的DR (多個(gè)DR)中的下一元組,或如果元組對(duì)所 檢查的塊是最后一個(gè)則移到與下一個(gè)塊有關(guān)的DR(階段1839,接著到1840 或1841 )。另一方面,如果DR的元組表示至少一個(gè)較后面的塊,則在1834中, 確定在保護(hù)緩沖器中是否有剩余的空間以存儲(chǔ)DR內(nèi)容。如果沒有任何空 間,則假定元組內(nèi)容以前被存儲(chǔ)在更新數(shù)據(jù)包中(見方法1700),且過程 前進(jìn)到階段1839。如果有空間,則元組的內(nèi)容復(fù)制到保護(hù)緩沖器,且保護(hù)緩沖器的剩余 空間減小了元組內(nèi)容的大小(階段1836 )。在一個(gè)實(shí)施方式中,DR的元組 中的內(nèi)容照原樣插入保護(hù)緩沖器中(即,如果在DR中是未壓縮的,則存 儲(chǔ)為未壓縮的,以及如果在DR中是壓縮的,則存儲(chǔ)為壓縮的),而在另一 實(shí)施方式中,內(nèi)容在被存儲(chǔ)在保護(hù)緩沖器中之前可被處理,例如壓縮、解 壓縮等。在具有交叉參照表的實(shí)施方式中,在參照表中可制定記錄項(xiàng),例 如參考保護(hù)緩沖器中的位置和需要用于解壓縮的內(nèi)容的塊和/或提供用于 解壓縮的內(nèi)容的塊。可選地,DR內(nèi)容在1838中^皮標(biāo)記為空閑的。在一個(gè)實(shí)施方式中,在階段1832中,例如由于在方法1800中較早時(shí) 候處理的元組,還可檢查元組內(nèi)容是否已經(jīng)被保護(hù)在更新數(shù)據(jù)包和/或保護(hù) 緩沖器中,且在這種情況下,本方法可前進(jìn)到階段1839,假定可容易地訪 問元組內(nèi)容或可選地可改為存儲(chǔ)指向被保護(hù)內(nèi)容的指針。在一個(gè)實(shí)施方式中,在對(duì)1834 "否定"了預(yù)定的數(shù)量之后,可假定在 保護(hù)緩沖器中沒有更多的空間而不管DR元組中內(nèi)容的大小如何,以及隨 后繼續(xù)進(jìn)行階段1842。過程前進(jìn)到1839,然后到階段1840中的下一元組,或如果元組對(duì)所 檢查的塊是最后一個(gè)元組,則到下一塊的DR (階段1841 )。一旦到達(dá)最后一個(gè)塊的DR中的最后一個(gè)元組,就根據(jù)更新順序?qū)K 指針置于RAM中的第一個(gè)更新的壓縮塊(階段1842)。在階段1844中, 更新的壓縮塊從RAM復(fù)制到存儲(chǔ)器中相應(yīng)的物理塊。塊以更新順序復(fù)制 (階段1848 ),直到到達(dá)最后一個(gè)塊(階段1846 ),且本方法結(jié)束。在另一實(shí)施方式中,^底定原始版本^皮解壓縮到RAM中,以及更新的未壓縮版本被寫到RAM中的不同區(qū)域(即,不蓋寫RAM中的原始版本)。 在本實(shí)施方式中,在階段1207之前(即,在前進(jìn)到下一更新命令之前), 可執(zhí)行當(dāng)前的更新命令,因而在RAM中的不同區(qū)域中建立完整的更新的 未壓縮版本。在本實(shí)施方式中,可省略階段1211和1224,本方法繼續(xù)進(jìn) 行階段1826,如上所述。在其它實(shí)施方式中,假定從更新數(shù)據(jù)包中或從執(zhí)行方法1800之前中 不知道更新版本中虛擬塊的虛擬邊界。還假定,更新數(shù)據(jù)包中的更新命令 與更新版本中塊的虛擬邊界無關(guān)。例如更新數(shù)據(jù)包可指定應(yīng)在RAM中為 更新的未壓縮版本分配的地址范圍,且命令可與該范圍內(nèi)的地址有關(guān)(例 如相對(duì)于范圍的下限或上限)。在這些實(shí)施方式中,更新命令不以特定的 順序執(zhí)行,在RAM中建立更新的未壓縮版本(舊的壓縮版本沒有被蓋寫)。 接著例如使用方法700可將未壓縮的更新版本壓縮在RAM中,其中RAM 中相同大小的區(qū)域代替每個(gè)物理塊。 一旦實(shí)現(xiàn)了壓縮,未壓縮的更新版本 的虛擬塊邊界和相關(guān)的DR就是已知的。在這些實(shí)施方式的一個(gè)中,更新 版本的這些虛擬邊界存儲(chǔ)在非易失性存儲(chǔ)器中,例如在保護(hù)緩沖器中。接 著例如以更新次序(或以方法1700中遵循的任何次序)分析更新命令, 以便保護(hù)需要被保護(hù)在保護(hù)緩沖器中的任何源段,見上面階段1203、 1204、 1206、 1208、 1209、 1210、 1207和1205的描述。在分析了最后一個(gè)命令 之后,方法可繼續(xù)進(jìn)行階段1828,如上所述。應(yīng)認(rèn)識(shí)到,進(jìn)一步對(duì)于圖18的流程圖,被保護(hù)內(nèi)容的大小(恰好在 將它存儲(chǔ)在非易失性保護(hù)緩沖器中之前)在一個(gè)實(shí)施方式中可包括比原始 版本的塊的數(shù)量n(nM )少的塊,這些塊被在更新版本中修改。也就是說, 在本實(shí)施方式中,要求少于n個(gè)的操作,以便將被保護(hù)內(nèi)容存儲(chǔ)在非易失 性保護(hù)緩沖器中。如果指定塊存儲(chǔ)操作的數(shù)量為m,則應(yīng)認(rèn)識(shí)到,在本實(shí) 施方式中2<=m<2n。進(jìn)一步注意,重新使用保護(hù)緩沖器可能是有利的。在產(chǎn)生更新數(shù)據(jù)包 期間模擬的重新使用(參考圖17)反映圖18中描述的更新過程的行為。 因此,如果利用重新使用,則有可能進(jìn)一步繼續(xù)到1844,檢查更新的壓縮了所使用的被保護(hù)內(nèi)容,且如果是這樣,則只要被保護(hù) 內(nèi)容不是更新另外的段所需要的(相應(yīng)于相同的物理塊或相應(yīng)于根據(jù)更新 次序隨后的其它物理塊),解壓縮在更新順序中較遠(yuǎn)的另外的原始?jí)K,或 解壓縮在更新順序中較前面的另外的新塊,就可將該^皮保護(hù)內(nèi)容標(biāo)記為空 閑的。在本實(shí)施方式中,當(dāng)存儲(chǔ)在非易失性保護(hù)緩沖器的一個(gè)塊中的所有 被保護(hù)內(nèi)容^皮標(biāo)記為空閑時(shí),可刪除該被保護(hù)內(nèi)容并可重新使用塊。如上所述,在一些情況下,用于新版本的壓縮算法和/或壓縮比不必與 用于原始版本的壓縮算法和/或壓縮比相同。方法1800充分考慮這個(gè)可能 性,因?yàn)閷?duì)于用在新版本中的壓縮與用在原始版本中的壓縮是否相同或不 同沒有限制。應(yīng)進(jìn)一步理解,在一些實(shí)施方式中,可能沒有未壓縮內(nèi)容的 更新,而僅有使用不同壓縮算法和/或壓縮比的原始內(nèi)容的重新壓縮。在這 些實(shí)施方式中,更新數(shù)據(jù)包可包括使用不同壓縮算法和/或壓縮比來重新壓 縮原始內(nèi)容的命令。因?yàn)樵谶@些實(shí)施方式中沒有轉(zhuǎn)換命令,源段不需要被保護(hù),因此可省略方法1700中對(duì)在保護(hù)緩沖器中源段的保護(hù)的模擬以及 用插入命令對(duì)更新命令的替換。此外,在沒有任何未壓縮內(nèi)容被更新的這 些實(shí)施方式中,可能顯示最佳次序是壓縮次序,因此不需要確定(例如在 方法1400或1500中)或保護(hù)DR內(nèi)容。在這些實(shí)施方式中,在方法1700 中可省略保護(hù)緩沖器中DR內(nèi)容保護(hù)的模擬和更新數(shù)據(jù)包中DR內(nèi)容的插 入。類似地,在這些實(shí)施方式中可省略方法1800中在保護(hù)緩沖器中實(shí)際 源段/段的DR內(nèi)容保護(hù)。因此原位更新應(yīng)被理解為包括用新("更新")版 本原位更新原始版本的實(shí)施方式,該新版本根據(jù)與原始版本不同的壓縮算 法和/或壓縮比被壓縮,而不管未壓縮的原始版本中的內(nèi)容與未壓縮的更新 版本中的內(nèi)容是否相同或不同。如果更新過程失敗,則存儲(chǔ)在存儲(chǔ)設(shè)備中的版本可為中間版本,而 RAM存儲(chǔ)的壓縮的更新的版本一皮擦除。為了重新開始將丟失的壓縮的更 新的內(nèi)容寫到包括壓縮的更新的內(nèi)容的中間版本的那些塊中,至少應(yīng)重新 構(gòu)建丟失的RAM存儲(chǔ)的壓縮的更新的內(nèi)容。壓縮的更新的內(nèi)容的一部分 可存儲(chǔ)在中間版本中,但其它部分丟失。應(yīng)認(rèn)識(shí)到,應(yīng)存儲(chǔ)丟失的壓縮的更新內(nèi)容的塊包括壓縮的原始內(nèi)容(組成"剩余壓縮的原始內(nèi)容"的內(nèi)容)。此外,后向參考的內(nèi)容片段存 儲(chǔ)在備份存儲(chǔ)器中。還應(yīng)認(rèn)識(shí)到,可產(chǎn)生用于剩余的壓縮的原始內(nèi)容的RAM存儲(chǔ)器(根據(jù)壓縮次序進(jìn)一步解壓縮剩余的壓縮的原始內(nèi)容)。接著,根據(jù)更新次序從存儲(chǔ)有剩余的壓縮的原始內(nèi)容的第一塊(根據(jù) 更新次序)開始,可重新產(chǎn)生相應(yīng)于丟失的壓縮的更新內(nèi)容的未壓縮的更 新的虛擬塊。由該重新開始的更新過程構(gòu)建的未壓縮的更新內(nèi)容^皮存儲(chǔ)在 RAM中,如以前一樣。應(yīng)認(rèn)識(shí)到,RAM存儲(chǔ)的未壓縮的更新內(nèi)容不是完整的未壓縮的更新 版本(或所需要的多于一個(gè)的虛擬塊)。丟失的這些虛擬塊的那些壓縮內(nèi) 容存儲(chǔ)在中間版本中。因?yàn)橛锌赡芨鶕?jù)壓縮次序來檢查未壓縮的更新虛擬 塊,因而識(shí)別那些丟失的虛擬塊,因此應(yīng)認(rèn)識(shí)到,第一個(gè)丟失的虛擬塊在 任何前面的丟失的虛擬塊之前被識(shí)別(在這種情況下先后次序是根據(jù)壓縮 次序)。因此有可能識(shí)別相應(yīng)于每個(gè)丟失的虛擬塊的壓縮的更新內(nèi)容(壓 縮的更新內(nèi)容存儲(chǔ)在中間版本的塊中),并解壓縮該被識(shí)別的壓縮的更新 內(nèi)容,產(chǎn)生存儲(chǔ)在丟失的虛擬塊中的丟失的未壓縮的更新內(nèi)容。以這種方 式檢查未壓縮的更新版本中的每個(gè)虛擬塊,解壓縮存儲(chǔ)的內(nèi)容以產(chǎn)生那些 被識(shí)別的虛擬塊,產(chǎn)生存儲(chǔ)在RAM中的完整的未壓縮的更新版本(或結(jié) 果通常是在多于一個(gè)的虛擬塊中的RAM存儲(chǔ)的未壓縮內(nèi)容)。現(xiàn)在可重新壓縮RAM存儲(chǔ)的未壓縮的更新版本(或在多于一個(gè)的虛 擬塊中的RAM存儲(chǔ)的未壓縮內(nèi)容),以產(chǎn)生RAM存儲(chǔ)的壓縮的更新版本, 且在中斷之前未被寫入的該內(nèi)容可原位寫到更新塊中。圖19示出根據(jù)本發(fā)明的實(shí)施方式的、用于重新開始在更新塊寫到存 儲(chǔ)器期間被中斷的更新的方法l卯0。假定中斷出現(xiàn)在階段1844中,這時(shí) 一些塊復(fù)制到存儲(chǔ)器中而另一些沒有。因此,假定RAM的內(nèi)容被擦除, 所有剩余部分是存儲(chǔ)器中的塊,其中一些包括舊內(nèi)容, 一些包括新(更新 的)內(nèi)容,且這些被保護(hù)在保護(hù)緩沖器或更新數(shù)據(jù)包中。讀者應(yīng)理解,如果中斷改為在用更新內(nèi)容蓋寫物理存儲(chǔ)器中的塊之前 發(fā)生,則當(dāng)中斷時(shí),方法1800可從頭重新開始而沒有任何問題。在階段1902中,塊指針指向壓縮順序中第一個(gè)剩余的原始?jí)K(即,如果壓縮順序中較前面的塊已經(jīng)被更新,則這些塊目前被忽略)。例如在Meller等人的美國公布的申請(qǐng)?zhí)?0050216530中可確定重新開始的位置, 該申請(qǐng)?jiān)谶@里通過引用被并入。在階段1904中,例如使用方法1500 (但 省略階段1515,因?yàn)樵诜椒?700和/或1800中在較早時(shí)候已經(jīng)確定并處 理了解壓縮紀(jì)錄)將原始?jí)K以壓縮順序解壓縮到RAM中。在1906中,確 定解壓縮是否需要與更新次序中較前面的塊的原始版本相關(guān)的內(nèi)容(其以 前已經(jīng)被更新)。如果需要,則在階段1908中,可從更新數(shù)據(jù)包或保護(hù)緩 沖器中獲得該內(nèi)容,這取決于在方法1700和/或1800中該內(nèi)容被保護(hù)在哪 里。例如,交叉參照表可提供所需要的內(nèi)容的位置。本方法在階段1911 中以壓縮順序解壓縮每個(gè)原始?jí)K(暫時(shí)忽略任何已經(jīng)更新的塊的處理), 直到所有的原始?jí)K被解壓縮為止(階段1910 )。在階段1912中塊指針指向 在更新次序中留下來要被更新的第 一個(gè)原始?jí)K。本方法接著繼續(xù)更新原始 塊,執(zhí)行例如階段1214到1220和1222到1224 (但省略方法1200的階段 1219和1221)。在階段1218中,使用交叉參照表而不是恢復(fù)指示符來取 回4皮保護(hù)內(nèi)容(注意,在方法1800中,使恢復(fù)指針前進(jìn)的更新與更新塊 寫到存儲(chǔ)器的寫入分離,因此當(dāng)寫入中斷時(shí),恢復(fù)指示符已經(jīng)前進(jìn)到保護(hù) 緩沖器的末端,且因此與出現(xiàn)寫入中斷的塊沒有關(guān)系)。一旦執(zhí)行了最后一個(gè)更新命令,則本方法就繼續(xù)進(jìn)行階段1926,塊指 針指向壓縮順序中的第一個(gè)新塊。在階段1928中,例如使用方法1500 (但 省略階段1515,因?yàn)樵诜椒?700和/或1800中在較早時(shí)候已經(jīng)確定并處 理了解壓縮紀(jì)錄)將每個(gè)塊以壓縮順序(階段1935 )解壓縮到RAM中。 如杲對(duì)于任何塊,在階段1930中,解壓縮該塊所需要的內(nèi)容與更新次序 中較后面的塊(因此還沒有被更新)相關(guān),則在階段1932中,可從更新 數(shù)據(jù)包或保護(hù)緩沖器中獲得所需要的內(nèi)容,這取決于在方法1700和/或 1800中該內(nèi)容被保護(hù)在哪里。在最后一個(gè)新塊被解壓縮到RAM中之后(階 段1934),接著在階段1936中,塊指針指向在壓縮次序中的第一個(gè)塊。應(yīng)理解,RAM中的一些塊在中斷之前被更新,而一些塊被作為方法 1900的一部分更新(即,在重新開始更新之后),^旦這些塊一起形成未壓在階段1936中,塊指針指向壓縮順序中的第一個(gè)塊,而在階段1938 中塊以壓縮順序(階段1941)被壓縮到RAM中。 一旦最后一個(gè)塊被壓縮 (階段1940),就可重新開始將壓縮塊寫到存儲(chǔ)器。在階段1942中,塊指 針指向?qū)⒁愿麓涡蚋碌牡谝粋€(gè)剩余的原始?jí)K(壓縮的)。還沒有寫到 存儲(chǔ)器的每個(gè)剩余的塊以更新次序(階段1941 )寫到存儲(chǔ)器中(階段1944 ), 直到到達(dá)最后一個(gè)塊(階段1946)且方法結(jié)束。雖然參考圖17、 18和19描述的所述實(shí)施方式假定與轉(zhuǎn)換命令有關(guān)的 源段可潛在地保護(hù)在保護(hù)緩沖器和/或更新數(shù)據(jù)包中,但是應(yīng)理解,在其它 實(shí)施方式中,與轉(zhuǎn)換命令有關(guān)的其它數(shù)據(jù)可另外或代替地被保護(hù)。例如在 這些其它實(shí)施方式的一個(gè)中,代替或除了源段以外,還可潛在地保護(hù)目標(biāo) 段。作為另一例子,在這些其它實(shí)施方式的一個(gè)中,可保護(hù)源段和/或目標(biāo) 段的經(jīng)處理的形式,其中該處理可以與或不與由命令指定的轉(zhuǎn)換有關(guān)。然而,注意,上述實(shí)施方式是非限制性的,且如果需要,可存在可選 實(shí)施方式。例如,可選實(shí)施方式可在更新數(shù)據(jù)包中保護(hù)數(shù)據(jù)(包括對(duì)象), 而不是在備份存儲(chǔ)器中保護(hù)它。理解了單塊和多塊實(shí)施方式之后,注意,更新數(shù)據(jù)包應(yīng)包括更新命令。 以前解釋到,更新數(shù)據(jù)包可用RAM存儲(chǔ),并可保護(hù)前向和后向參考的內(nèi) 容片段(一起組成"保護(hù)操作")。根據(jù)一個(gè)實(shí)施方式,這些保護(hù)操作可通 過將保護(hù)命令插入更新數(shù)據(jù)包中來實(shí)現(xiàn)。然而,根據(jù)可選實(shí)施方式,當(dāng)在 可更新的設(shè)備上操作時(shí),保護(hù)可通過更新過程引出,因此在更新數(shù)據(jù)包中 不需要顯式保護(hù)命令。依據(jù)為了產(chǎn)生更新數(shù)據(jù)包和為了更新內(nèi)容的原始版本因而產(chǎn)生其更 新版本而描述的方法,進(jìn)一步描述了能夠執(zhí)行這些方法的裝置。圖20示出根據(jù)本發(fā)明的一個(gè)實(shí)施方式的用于產(chǎn)生更新數(shù)據(jù)包的裝置 2001,例如更新數(shù)據(jù)包發(fā)生器104。根據(jù)本實(shí)施方式,更新數(shù)據(jù)包發(fā)生器 104包括更新數(shù)據(jù)包獲得單元2002。由更新數(shù)據(jù)包訪問單元2002得到的 更新數(shù)據(jù)包可為任何更新數(shù)據(jù)包,包括通過應(yīng)用已知的自身微分工具而產(chǎn)85生的簡單增量,或根據(jù)可適用于該情況的任何方法產(chǎn)生的任何其它更新數(shù)據(jù)包。此外,應(yīng)認(rèn)識(shí)到(如在前面參考例如圖11中的1101或圖17中的 1701提到的),更新數(shù)據(jù)包獲得單元可獲得預(yù)先準(zhǔn)備的更新數(shù)據(jù)包或根據(jù) 本領(lǐng)域中已知的任何方法產(chǎn)生更新數(shù)據(jù)包。更新次序分析器2003連接到更新數(shù)據(jù)包訪問單元2002。更新次序分 析器2003從更新數(shù)據(jù)包訪問單元2002接收更新數(shù)據(jù)包,并確定提高保護(hù) 緩沖器使用率的更新次序。例如根據(jù)圖10或圖16所示的方法可確定更新 次序。連接到更新次序分析器2003的更新數(shù)據(jù)包構(gòu)造器2004根據(jù)從更新數(shù) 據(jù)包獲得單元2002接收的更新數(shù)據(jù)包和在更新次序分析器2003中確定的 更新次序來構(gòu)建新的更新數(shù)據(jù)包。圖11和17示出可應(yīng)用在更新數(shù)據(jù)包構(gòu) 造器2004中的方法的實(shí)施方式。根據(jù)本實(shí)施方式裝置2001還包括用于執(zhí) 行逐塊和/或多塊壓縮/解壓縮的壓縮/解壓縮模塊2005。注意,根據(jù)某些實(shí)施方式,本發(fā)明包括用于產(chǎn)生更新數(shù)據(jù)包的裝置 2001,其中更新數(shù)據(jù)包配置成最佳化更新次序。根據(jù)某些實(shí)施方式,所述的被保護(hù)內(nèi)容大小。根據(jù)其它實(shí)施方式,被保護(hù)內(nèi)容大小小于由任何可能 的更新次序獲得的平均的被保護(hù)內(nèi)容大小。仍然根據(jù)其它實(shí)施方式,被保 護(hù)內(nèi)容大小小于被保護(hù)內(nèi)容的任意大小,該任意大小取決于與更新數(shù)據(jù)包 相關(guān)的任意更新次序。此外,其它變形也是可適用的。圖21示出根據(jù)本發(fā)明的另一實(shí)施方式的用于將內(nèi)容的原始版本更新 到其更新版本的裝置2101。裝置2101包括獲得更新數(shù)據(jù)包的接收器2102。 如前面例如參考圖12A和12B中的1201或圖18的1801所解釋的,更新 數(shù)據(jù)包可通過從通信網(wǎng)絡(luò)接收它來獲得,或它可通過任何可選的方法獲 得。裝置2101進(jìn)一步包括更新模塊2103如更新過程,其適合于更新當(dāng)前 存儲(chǔ)在更新設(shè)備的存儲(chǔ)設(shè)備中的原始版本,因而產(chǎn)生更新版本。更新模塊 2103可例如根據(jù)圖12、 18或19所示的流程圖來操作。根據(jù)本實(shí)施方式, 裝置2101還包括用于執(zhí)行逐塊和/或多塊壓縮/解壓縮的壓縮/解壓縮^t塊 2105。應(yīng)該明顯地是,壓縮/解壓縮^t塊2005和/或2105可^皮分離到分開的 壓縮和解壓縮模塊中, 一個(gè)或兩個(gè)壓縮和解壓縮模塊出現(xiàn)在裝置2001和/ 或2101中的任一個(gè)中。例如,在一個(gè)實(shí)施方式中,裝置2001只包括解壓 縮;漠塊或只包括壓縮;溪塊。作為另一例子,在一個(gè)實(shí)施方式中,裝置2101 只包括解壓縮模塊或只包括壓縮模塊。在一個(gè)實(shí)施方式中,用于在裝置2001中的解壓縮和/或壓縮的算法在 準(zhǔn)備更新數(shù)據(jù)包時(shí)考慮用于在裝置2101中的解壓縮和/或壓縮的算法(當(dāng) 按照準(zhǔn)備好的更新數(shù)據(jù)包更新內(nèi)容時(shí)),反之亦然。在一個(gè)實(shí)施方式中,可由安裝在可更新的設(shè)備上并通過更新過程激活 的壓縮和/或解壓縮軟件(組成壓縮模塊和解壓縮模塊,例如2105)來執(zhí) 行壓縮和/或解壓縮。可選地,更新過程可包括用于使壓縮的原始版本解壓 縮的解壓縮;溪塊和/或用于壓縮更新版本,以產(chǎn)生壓縮的更新版本的壓縮才莫 塊。應(yīng)認(rèn)識(shí)到,這是非限制性的,如果可適用,允許任何可選的實(shí)施方式, 例如組合(例如,包括壓縮;漠塊并連接到解壓縮;漠塊的更新過程)或甚至 包括或連接到例如僅僅壓縮;漠塊的更新過程。應(yīng)認(rèn)識(shí)到,后面的更新過程 可更新未壓縮的原始內(nèi)容,壓縮更新內(nèi)容以產(chǎn)生壓縮的更新內(nèi)容。相反的 情況也是正確的。有可能只包括解壓縮模塊,因而允許更新解壓縮的原始 版本,產(chǎn)生未壓縮的更新版本,等等。假定壓縮的原始版本由未壓縮的更新版本代替,則上述方法和系統(tǒng)可 在已作了必要的修正后應(yīng)用,例如省略解壓縮/壓縮、虛擬塊/邊界的計(jì)算 和/或用于更新版本的解壓縮記錄的確定/檢查中的任何一項(xiàng)。假定未壓縮 的原始版本由壓縮的更新版本代替,上述方法和系統(tǒng)可在已作了必要的修 正后應(yīng)用,例如省略解壓縮/壓縮、虛擬塊/邊界的計(jì)算和/或用于原始版本 的解壓縮記錄的確定/一企查中的任何一項(xiàng)。讀者應(yīng)理解,假定原始和更新版本被壓縮地存儲(chǔ)在存儲(chǔ)設(shè)備上,則可 使用上述單塊壓縮來壓縮一個(gè)版本,并可使用上述多塊壓縮來壓縮另一個(gè) 版本。例如在一個(gè)實(shí)施方式中,可逐塊壓縮原始版本,以及可多塊壓縮更 新版本。在另一實(shí)施方式中,可多塊壓縮原始版本,以及可逐塊壓縮更新 版本。上述方法和系統(tǒng)可在已作了必要的修正后應(yīng)用在這些實(shí)施方式中。87例如,對(duì)于逐塊壓縮的版本,可省略解壓縮記錄的確定/檢查。因此其中本發(fā)明的實(shí)施方式包括在存儲(chǔ)設(shè)備中被逐塊壓縮的更新版 本代替的未壓縮的原始版本;被多塊壓縮的更新版本代替的未壓縮的原始版本;被未壓縮的更新版本代替的逐塊壓縮的原始版本;被逐塊壓縮的更 新版本代替的逐塊壓縮的原始版本(使用相同或不同的壓縮算法/比);被 多塊壓縮的更新版本代替的逐塊壓縮的原始版本;被未壓縮的更新版本代 替的多塊壓縮的原始版本;被逐塊壓縮的更新版本代替的多塊壓縮的原始 版本;以及被多塊壓縮的更新版本代替的多塊壓縮的原始版本(使用相同 或不同的壓縮算法/比)。應(yīng)理解,根據(jù)本實(shí)施方式,更新版本的未壓縮內(nèi) 容可與原始版本的未壓縮內(nèi)容相同或不同,如上所討論的。還應(yīng)理解,根據(jù)本發(fā)明的系統(tǒng)可以是適當(dāng)編程的計(jì)算機(jī)。同樣,本發(fā) 明設(shè)想一種^皮計(jì)算機(jī)可讀的用于執(zhí)行本發(fā)明的方法的計(jì)算機(jī)程序。本發(fā)明 進(jìn)一步設(shè)想一種可有形地包括可由用于執(zhí)行本發(fā)明的方法的機(jī)器執(zhí)行的 指令程序的機(jī)器可讀存儲(chǔ)器。此外,精通本領(lǐng)域的人員應(yīng)認(rèn)識(shí)到,根據(jù)本發(fā)明的系統(tǒng)可為硬件???選地,系統(tǒng)可組成硬件和軟件部件。雖然關(guān)于特定的實(shí)施方式示出和描述了本發(fā)明,但是它沒有被這樣限 制。讀者現(xiàn)在會(huì)想到在本發(fā)明的范圍內(nèi)的很多修改、變更和改進(jìn)。
權(quán)利要求
1.一種用于用存儲(chǔ)塊原位更新存儲(chǔ)在非易失性存儲(chǔ)設(shè)備中的內(nèi)容的原始版本以產(chǎn)生內(nèi)容的更新版本的方法,所述方法包括獲得更新數(shù)據(jù)包;將所述原始版本或其一部分復(fù)制到易失性存儲(chǔ)器;更新所述原始版本或其一部分以提供未壓縮的更新版本或其一部分;壓縮所述未壓縮的更新版本或其一部分,以便獨(dú)立地壓縮每個(gè)數(shù)量的未壓縮的更新內(nèi)容;以及將所述壓縮的更新版本或其一部分代替所述原始版本或其一部分寫入所述存儲(chǔ)設(shè)備中,其中每個(gè)所述獨(dú)立地壓縮的數(shù)量被寫到分離的存儲(chǔ)塊中。
2. 如權(quán)利要求1所述的方法,其中所述原始版本被壓縮,復(fù)制所述 原始版本或其一部分的所述步驟包括解壓縮所述原始版本或其 一部分。
3. 如權(quán)利要求2所述的方法,其中所述壓縮的原始版本使用與所述 壓縮的更新版本不同的壓縮算法或壓縮比。
4. 如權(quán)利要求1所迷的方法,其中所述原始版本的n (n>l )個(gè)塊中 的每一個(gè)的內(nèi)容的至少一部分在所述更新版本中被修改,且其中所述更新 步驟和所述寫入步驟包括執(zhí)行m個(gè)塊存儲(chǔ)操作,每個(gè)塊存儲(chǔ)操作包括將內(nèi) 容寫到所述非易失性存儲(chǔ)設(shè)備中的塊中;性存儲(chǔ)設(shè)備中的更新塊存儲(chǔ)操作,所迷更新內(nèi)容至少根據(jù)所述更新數(shù)據(jù)包 來產(chǎn)生;其中2<=m<2n。
5. 如權(quán)利要求1所迷的方法,其中所述原始版本的n (n〉1)個(gè)塊中的每一個(gè)的內(nèi)容的至少 一部分在所述更新版本中被修改,且其中所述更新 步驟和所述寫入步驟包括執(zhí)行塊存儲(chǔ)操作,每個(gè)塊存儲(chǔ)操作包括將內(nèi)容寫 到所述非易失性存儲(chǔ)設(shè)備中的塊中;以及其中所述塊存儲(chǔ)操作還包括至少 一個(gè)備份塊存儲(chǔ)操作,其中每個(gè)備份塊存儲(chǔ)操作包括將被保護(hù)的內(nèi)容存儲(chǔ) 在非易失性保護(hù)緩沖器中。
6. 如權(quán)利要求5所述的方法,其中所迷更新數(shù)據(jù)包包括轉(zhuǎn)換命令,且其中所述被保護(hù)的內(nèi)容包括與轉(zhuǎn)換命令相關(guān)的數(shù)據(jù)。
7. 如權(quán)利要求5所述的方法,其中在所述寫入步驟期間擦除所述易 失性存儲(chǔ)器,進(jìn)一步包括將剩余的原始內(nèi)容或其一部分從所述存儲(chǔ)設(shè)備復(fù)制到易失性存儲(chǔ)器;更新所述剩余的原始內(nèi)容或其一部分,包括取回所述更新步驟需要的 所述被保護(hù)的內(nèi)容的至少 一些;壓縮所述更新的剩余的內(nèi)容或其一部分,以便獨(dú)立地壓縮每個(gè)數(shù)量的 未壓縮的更新的原始內(nèi)容;以及將所述更新的剩余的內(nèi)容或其一部分代替所述原始的剩余的內(nèi)容或 其一部分寫入所述存儲(chǔ)設(shè)備中,其中每個(gè)所迷獨(dú)立地壓縮的數(shù)量被寫到分離的存儲(chǔ)塊中。
8. 如權(quán)利要求5所述的方法,其中 所述更新數(shù)據(jù)包與更新次序相關(guān),以及其中所述非易失性保護(hù)緩沖器中的所述被保護(hù)的內(nèi)容的大小依賴于所述 更新次序;所述大小小于依賴于與所述更新數(shù)據(jù)包相關(guān)的任意更新次序的 被保護(hù)的內(nèi)容的任意大?。凰鋈我飧麓涡驈目膳c所述更新數(shù)據(jù)包相關(guān) 的所有可能的更新次序中^皮任意地選才奪。
9. 如權(quán)利要求5所述的方法,其中 所述更新數(shù)據(jù)包與更新次序相關(guān),以及其中在所述非易失性保護(hù)緩沖器中的所述被保護(hù)的內(nèi)容的大小依賴于所 述更新次序;所述大小是^皮保護(hù)內(nèi)容的大小中最小的大小,所述一皮保護(hù)內(nèi)容的大小依賴于可與所述更新數(shù)據(jù)包相關(guān)的所有可能的更新次序中的任 一更新次序。
10. 如權(quán)利要求l所述的方法,其中所述每個(gè)數(shù)量的未壓縮的更新的 內(nèi)容在被壓縮時(shí)實(shí)質(zhì)上等于存儲(chǔ)塊的大小。
11. 如權(quán)利要求l所述的方法,其中所述更新數(shù)據(jù)包包括用于描述所 述每個(gè)數(shù)量的未壓縮的更新的內(nèi)容的數(shù)據(jù)。
12. 如權(quán)利要求11所述的方法,其中所述每個(gè)數(shù)量中的一個(gè)在更新、 壓縮以及寫入所述每個(gè)數(shù)量中的另 一個(gè)之前被更新、壓縮以及寫入。
13. 如權(quán)利要求l所述的方法,其中所述原始版本被全部更新,并接 著在將所述壓縮的更新版本寫到所述存儲(chǔ)設(shè)備之前被壓縮。
14. 一種用于產(chǎn)生更新數(shù)據(jù)包的方法,用于用存儲(chǔ)塊原位更新存儲(chǔ)在 非易失性存儲(chǔ)設(shè)備中的內(nèi)容的原始版本以產(chǎn)生內(nèi)容的更新版本,所述方法 包括將所述原始和更新版本中的任一個(gè)解壓縮到包括用于每個(gè)獨(dú)立地壓 縮的內(nèi)容的分離的存儲(chǔ)塊的虛擬塊中;以及在保護(hù)緩沖器中^t擬執(zhí)行轉(zhuǎn)換命令所需要的數(shù)據(jù)的保護(hù)。
15. 如權(quán)利要求14所述的方法,進(jìn)一步包括將用于所述原始版本 和更新版本中任一個(gè)的虛擬塊描述存儲(chǔ)在所述更新數(shù)據(jù)包中。
16. 如權(quán)利要求14所述的方法,其中所述更新數(shù)據(jù)包與用于更新所 述存儲(chǔ)塊的更新次序相關(guān),以及其中與轉(zhuǎn)換命令有關(guān)的需要保護(hù)的數(shù)據(jù)的總的大小依賴于所述更新次序; 所述大小小于依賴于與所述更新數(shù)據(jù)包相關(guān)的任意更新次序的被保護(hù)的 內(nèi)容的任意大?。凰鋈我飧麓涡驈目膳c所述更新數(shù)據(jù)包相關(guān)的所有可 能的更新次序中被任意地選擇。
17. 如權(quán)利要求14所述的方法,其中如果所述保護(hù)緩沖器不是充足 的,則在所述更新數(shù)據(jù)包中保護(hù)執(zhí)行轉(zhuǎn)換命令所需要的數(shù)據(jù)在所述更新數(shù) 據(jù)包中的保護(hù)。
18. —種用存儲(chǔ)塊原位更新存儲(chǔ)在存儲(chǔ)設(shè)備中的內(nèi)容的原始版本以產(chǎn)生內(nèi)容的更新版本的方法,所述方法包括 獲得更新數(shù)據(jù)包;將所述原始版本復(fù)制到易失性存儲(chǔ)器,其中如果所述原始版本在多于 一個(gè)的存儲(chǔ)塊中包括被相互依賴地壓縮的內(nèi)容,則所述復(fù)制步驟包括將所 述原始版本解壓縮到易失性存儲(chǔ)器中并保護(hù)解壓縮所述原始版本所需要的至少一些內(nèi)容;更新所述原始版本以提供未壓縮的更新版本;以及將所述更新版本代替所述原始版本復(fù)制回非易失性存儲(chǔ)器中,其中如 果所述更新版本被壓縮地存儲(chǔ)在被相互依賴地壓縮的塊中,則所述復(fù)制步 驟包括保護(hù)解壓縮所述更新版本和相互依賴地壓縮更新塊所需要的至少 一些內(nèi)容;其中所述原始版本和所述更新版本中的至少一個(gè)包括在被相互依賴 地壓縮的多于一個(gè)的存儲(chǔ)塊中的內(nèi)容。
19. 如權(quán)利要求18所述的方法,其中所述被保護(hù)的內(nèi)容包括與壓縮 無關(guān)的版本中的實(shí)際內(nèi)容。
20. 如權(quán)利要求18所述的方法,其中所述被保護(hù)的內(nèi)容包括添加到 與壓縮有關(guān)的版本中的內(nèi)容。
21. 如權(quán)利要求18所述的方法,其中所述被保護(hù)的內(nèi)容包括版本的 塊的解壓縮所需要的數(shù)據(jù),所迷塊實(shí)質(zhì)上與所述版本的緊接在前面的塊相 關(guān)。
22. 如權(quán)利要求18所述的方法,進(jìn)一步包括所述更新數(shù)據(jù)包包括 轉(zhuǎn)換命令,且其中所述更新步驟包括保護(hù)與轉(zhuǎn)換命令有關(guān)的數(shù)據(jù)。
23. 如權(quán)利要求22所述的方法,其中所述原始版本的n (n>l )個(gè)塊 中的每一個(gè)的內(nèi)容的至少一部分在所迷更新版本中凈皮修改,且其中所述復(fù) 制步驟、所述壓縮步驟、所述更新步驟和所述寫入步驟包括執(zhí)行m個(gè)塊存 儲(chǔ)操作,每個(gè)塊存儲(chǔ)操作包括將內(nèi)容寫到所述非易失性存儲(chǔ)設(shè)備中的塊中;所述塊存儲(chǔ)操作包括將所述更新版本的更新內(nèi)容存儲(chǔ)在所述非易失 性存儲(chǔ)設(shè)備中的更新塊存儲(chǔ)操作,所述更新內(nèi)容至少根據(jù)所迷更新數(shù)據(jù)包 來產(chǎn)生;其中2<=m<2n。
24. 如權(quán)利要求18所述的方法,其中所述更新數(shù)據(jù)包與用于更新所 述存儲(chǔ)塊的更新次序相關(guān),且其中解壓縮包括更新內(nèi)容的存儲(chǔ)塊所需要的 所述3皮保護(hù)的內(nèi)容與包括更新內(nèi)容的另 一存儲(chǔ)塊相關(guān),根據(jù)所述更新次序 所述另 一存儲(chǔ)塊晚于所述存儲(chǔ)塊被更新。
25. 如權(quán)利要求18所述的方法,其中所述更新數(shù)據(jù)包與用于更新所 述存儲(chǔ)塊的更新次序相關(guān),且其中解壓縮包括原始內(nèi)容的存儲(chǔ)塊所需要的 所述被保護(hù)內(nèi)容與包括原始內(nèi)容的另 一存儲(chǔ)塊相關(guān),根據(jù)所述更新次序所 述另 一存儲(chǔ)塊先于所述存儲(chǔ)塊-故更新。
26. 如權(quán)利要求18所述的方法,其中所述原始版本的n (n>l)個(gè)塊 中的每一個(gè)的內(nèi)容的至少一部分在所述更新版本中^皮修改,且其中所述復(fù) 制步驟、所述壓縮步驟和所述寫入步驟包括執(zhí)行m個(gè)塊存儲(chǔ)操作,每個(gè)塊 存儲(chǔ)操作包括將內(nèi)容寫到所述非易失性存儲(chǔ)設(shè)備中的塊中;性存儲(chǔ)設(shè)備中的更新塊存儲(chǔ)操作,所述更新內(nèi)容至少根據(jù)所述更新數(shù)據(jù)包 來產(chǎn)生;其中2<=m<2n。
27. 如權(quán)利要求18所述的方法,其中在所述寫入步驟期間擦除所述 易失性存儲(chǔ)器,進(jìn)一步包括將剩余的原始內(nèi)容從所迷存儲(chǔ)設(shè)備復(fù)制到易失性存儲(chǔ)器,其中如果所 述剩余的原始內(nèi)容被壓縮地存儲(chǔ)在所述存儲(chǔ)設(shè)備中,則所述復(fù)制步驟包括 解壓縮所述剩余的原始內(nèi)容;更新所述剩余的原始內(nèi)容;將更新內(nèi)容從所述存儲(chǔ)設(shè)備復(fù)制到易失性存儲(chǔ)器,其中如果所述更新 內(nèi)容被壓縮地存儲(chǔ)在所述存儲(chǔ)設(shè)備中,則所述復(fù)制步驟包括解壓縮所述更 新內(nèi)容;以及當(dāng)解壓縮所述剩余的原始內(nèi)容或所述更新內(nèi)容中的任何一個(gè)時(shí)使用 所述被保護(hù)的內(nèi)容。
28. 如權(quán)利要求18所述的方法,其中使用不同于用于壓縮所述更新 版本的壓縮算法或壓縮比來壓縮所述原始版本。
29. 如權(quán)利要求18所述的方法,其中所述原始版本和所述更新版本 中的一個(gè)包括用于每個(gè)被獨(dú)立地壓縮的內(nèi)容的分離的存儲(chǔ)塊。
30. —種用于產(chǎn)生更新數(shù)據(jù)包的方法,用于用存儲(chǔ)塊原位更新存儲(chǔ)在 非易失性存儲(chǔ)設(shè)備中的內(nèi)容的原始版本以產(chǎn)生內(nèi)容的更新版本,所述方法 包括獲得內(nèi)容的未壓縮的舊版本和未壓縮的新版本;獲得從一個(gè)或兩個(gè)版本的解壓縮和轉(zhuǎn)換命令中的任一項(xiàng)中產(chǎn)生的舊 版本和新版本中任一個(gè)的存儲(chǔ)塊之間的相關(guān)性;以及在保護(hù)緩沖器中模擬執(zhí)行解壓縮一個(gè)或兩個(gè)版本和轉(zhuǎn)換命令中的任 一項(xiàng)所需要的數(shù)據(jù)的保護(hù)。
31. 如權(quán)利要求30所述的方法,其中如果所述保護(hù)緩沖器是不充足 的,則在所述更新數(shù)據(jù)包中保護(hù)執(zhí)行解壓縮一個(gè)或兩個(gè)版本和轉(zhuǎn)換命令中 的任一項(xiàng)所需要的數(shù)據(jù)。
32. 如權(quán)利要求30所述的方法,進(jìn)一步包括將用于所述未壓縮的 舊版本和未壓縮的新版本中任一個(gè)的虛擬塊描述和解壓縮記錄存儲(chǔ)在所 迷更新數(shù)據(jù)包中。
33. 如權(quán)利要求30所述的方法,其中所述更新數(shù)據(jù)包與用于更新所 述存儲(chǔ)塊的更新次序相關(guān),以及其中需要保護(hù)的數(shù)據(jù)的總的大小依賴于所述更新次序;所述大小小于依賴 于與所述更新數(shù)據(jù)包相關(guān)的任意更新次序的被保護(hù)的內(nèi)容的任意大??;所述任意更新次序從可與所述更新數(shù)據(jù)包相關(guān)的所有可能的更新次序中被 任意地選擇。
34. 如權(quán)利要求30所述的方法,其中解壓縮所需要的所述數(shù)據(jù)包括與壓縮無關(guān)的版本中的實(shí)際內(nèi)容。
35. 如權(quán)利要求30所述的方法,其中解壓縮所需要的所述數(shù)據(jù)包括 添加到與壓縮有關(guān)的版本中的內(nèi)容。
36. 如權(quán)利要求30所述的方法,其中解壓縮所需要的所述數(shù)據(jù)包括 版本的塊的解壓縮所需要的數(shù)據(jù),所述塊實(shí)質(zhì)上與所述版本的緊接在前面 的塊相關(guān)。
37. —種用于用存儲(chǔ)塊原位更新存儲(chǔ)在非易失性存儲(chǔ)設(shè)備中的內(nèi)容的 原始版本以產(chǎn)生內(nèi)容的更新版本的裝置,包括接收器,其配置成獲得更新數(shù)據(jù)包;更新才莫塊,其配置成將所述原始版本或其一部分復(fù)制到易失性存儲(chǔ)器 中,并配置成更新所述原始版本或其一部分以提供更新版本或其一部分; 以及壓縮纟莫塊,其配置成壓縮所述更新版本或其一部分,如果通過相互依 賴地壓縮未壓縮數(shù)量的所述更新版本來壓縮所述更新版本或其一部分,則 其中每個(gè)都相應(yīng)于所述存儲(chǔ)設(shè)備中的多于一個(gè)的存儲(chǔ)塊,并保護(hù)解壓縮所述更新版本所需要的至少一些內(nèi)容;或通過獨(dú)立地壓縮相應(yīng)于分離的存儲(chǔ) 塊的每個(gè)數(shù)量的未壓縮的更新內(nèi)容來壓縮所述更新版本或其一部分;其中所述更新模塊還配置成將所述壓縮的更新版本或其一部分代替 所述原始版本或其一部分寫入所述存儲(chǔ)設(shè)備中。
38. —種用于產(chǎn)生更新數(shù)據(jù)包的裝置,用于用存儲(chǔ)塊原位更新存儲(chǔ)在解壓縮;溪塊,其配置成確定每個(gè)存儲(chǔ)塊和未壓縮的虛擬塊之間的相應(yīng) 性并確定塊之間的解壓縮相關(guān)性,或配置成確定每個(gè)存儲(chǔ)塊和當(dāng)被獨(dú)立地 壓縮時(shí)實(shí)質(zhì)上等于存儲(chǔ)塊的大小的未壓縮的虛擬塊之間的相應(yīng)性;以及更新數(shù)據(jù)包構(gòu)造器,其配置成在保護(hù)緩沖器中模擬執(zhí)行解壓縮一個(gè)或 兩個(gè)版本和轉(zhuǎn)換命令中的任一項(xiàng)所需要的數(shù)據(jù)的保護(hù)。
39. —種包括計(jì)算機(jī)程序代碼工具的計(jì)算機(jī)程序,所述計(jì)算機(jī)程序代 碼工具用于當(dāng)所迷程序在計(jì)算機(jī)上運(yùn)行時(shí)執(zhí)行權(quán)利要求1的所有所述步驟。
40. 如權(quán)利要求39所述的計(jì)算機(jī)程序,其被包含在計(jì)算機(jī)可讀介質(zhì)上。
41. 一種包括計(jì)算機(jī)程序代碼工具的計(jì)算機(jī)程序,所述計(jì)算機(jī)程序代 碼工具用于當(dāng)所述程序在計(jì)算機(jī)上運(yùn)行時(shí)執(zhí)行權(quán)利要求14的所有所述步驟。
42. 如權(quán)利要求41所述的計(jì)算機(jī)程序,其被包含在計(jì)算機(jī)可讀介質(zhì)上。
43. —種包括計(jì)算機(jī)程序代碼工具的計(jì)算機(jī)程序,所述計(jì)算機(jī)程序代 碼工具用于當(dāng)所述程序在計(jì)算機(jī)上運(yùn)行時(shí)執(zhí)行權(quán)利要求18的所有所述步驟。
44. 如權(quán)利要求43所述的計(jì)算機(jī)程序,其被包含在計(jì)算機(jī)可讀介質(zhì)上。
45. —種包括計(jì)算機(jī)程序代碼工具的計(jì)算機(jī)程序,所述計(jì)算機(jī)程序代 碼工具用于當(dāng)所述程序在計(jì)算機(jī)上運(yùn)行時(shí)執(zhí)行權(quán)利要求30的所有所述步驟。
46. 如權(quán)利要求45所述的計(jì)算機(jī)程序,其被包含在計(jì)算機(jī)可讀介質(zhì)上。
全文摘要
用于在包括塊的非易失性存儲(chǔ)設(shè)備中將內(nèi)容的原始版本原位更新到更新版本的方法和系統(tǒng),其中原始版本和/或更新版本被壓縮在存儲(chǔ)設(shè)備中。
文檔編號(hào)G06F9/445GK101326492SQ200680046212
公開日2008年12月17日 申請(qǐng)日期2006年10月5日 優(yōu)先權(quán)日2005年10月6日
發(fā)明者埃溫亞特·梅勒, 莎倫·皮萊格 申請(qǐng)人:雷德本德有限公司