用于更新包括压缩版本的内容的方法和系统的制作方法

文档序号:6569926阅读:320来源:国知局
专利名称:用于更新包括压缩版本的内容的方法和系统的制作方法
技术领域
本发明涉及用于原位(in-place )更新存储在存储设备中的内容的方法 和系统。本发明尤其涉及在包括块的非易失性存储设备中将内容的原始版 本原位更新到更新版本,其中原始版本和/或更新版本在存储设备上被压缩。
背景技术
有时需要更新存储在存储设备中的内容。例如,如果内容是软件或程 序(如可执行文件),则有时需要修改其中存在的错误或对其引入新的特 征。然而,在非限制性的后面的例子和其它类型的内容中也可能需要更新, 例如存储在数据库中的文本、数据等。在下文中术语"旧版本"或"原始 版本"指在更新以前内容的版本,而术语"新版本"或"更新版本"指包 括已经更新的内容的版本。换句话说,原始版本包括"原始内容",而更 新版本包括"更新内容"。应注意,更新内容可进一步被更新。在第二次 更新的情况下,例如,第一次更新的更新内容变成第二次更新的原始内容, 而新的更新内容通过第二次更新产生,等等。更新原始内容产生更新内容的过程称为"更新过程"。更新过程通常 需要指示它如何执行更新的指令。提供给更新过程的这样的指令一起组成"更新数据包",其中包括在其中的每个指令组成"更新命令"。也就是说, 更新过程获得更新数据包作为输入,并根据其进行操作,以便将原始内容 更新为更新内容。然而这是非限制性的,有时更新过程可获得多于一个的 更新数据包,允许它一起更新内容。可选地,不是获得更新数据包,更新 过程有时可从存储设备或从数据库等中取回更新数据包(或一组更新命 令)。因此在下文中,当提到术语"获得更新数据包"时,应认识到,更 新过程可被动地获得数据包,它可主动取回数据包或有时它可激活嵌入其 中的数据包(例如, 一组硬编码的更新命令)。将原始版本更新为更新版本的一种方法是除了原始版本外还在存储 设备中存储更新版本。例如,每当用户按PC (个人计算机)视窗桌面上的某个图标时,计算机程序"prog.exe"被激活。为了更新prog.exe,有可能 将该文件的更新版本存储在与目前(原始)版本的不同的位置中,并接着 重新设置与图标相关的路径,以便激活更新版本而不是原始版本。随后, 当确定更新过程成功地结束时,可安全地删除原始版本,因而释放所占用 的空间。此外,后面的这个更新方法要求例如在更新数据包中完整的更新 版本被提供给更新过程。这样的更新数据包在大小(size)上容易变得巨大, 且如果要求通过带宽受限的通信信道将它传送到更新设备,则传送可能变 得不方便且有时甚至是不可能的。因此,减小更新数据包的大小是优选的。另 一更新方法可简单地用更新内容来盖写(overwrite)原始内容。该更 新方法有风险且不可靠,因为如果更新过程在操作的中间失败,则当原始 版本的一部分已经被盖写时,只有更新版本的一部分被写到存储设备,应 认识到,在中断时存储在存储设备上的版本可能是无效或不能操作的。此 外,传送完整的更新版本的要求还不能用本方法解决。然而,注意到通过 用更新的内容盖写原始内容来更新内容在本领域中通常称为"原位更新"。 在下文中,除非特别指明,术语"更新"用于描述"原位更新"。用于减小更新数据包的大小的一种方法是通过在其内包括表示原始 内容和更新内容之间的差异的信息。这样的更新数据包有时也称为"差 异"、"差异结果"或"增量(delta)"。当根据增量操作时,更新过程将其应 用于原始内容,因而产生更新内容。考虑到增量的大小,有试图减小其大小的方法。例如,美国6,546,552 (2003年公布的 "Dz,re"ce 6e wee" /wo vw'o"s (iato-toWescowto/m"g /"fra-re/e/^rtce")公开了用于产生旧程序和新程序之间的紧凑的 (compact)差异结果的方法。每个程序包括参考记录项(reference entry), 其包括参考程序中其它记录项的参考。根据美国6,546,552的方法,旧程 序4皮扫描,且对于每个参考记录项,参考由不同的标签记号代替,由此产 生修改的旧程序。此外,根据美国6,546,552,新程序被扫描,且对于每个 参考记录项,参考由不同的标签记号代替,由此产生修改的新程序。因此, 直接或间接利用修改的旧程序和修改的新程序,产生了不同的结果。WO 2004/114130 (2004年公布的"A^他od amf矽对ew /or w/w^,"g vera/om1 o/co fe f stored / a borage (iev/ce")公开了用于产生内容的旧片反 本和内容的新版本之间的紧凑的更新数据包的方法和系统。WO换元件发生器。它还包括用于产生修改版本的修改版本发生器和用于产生 紧凑的更新数据包的更新数据包发生器。紧凑的更新数据包包括基于修改 版本和新版本的转换元件和修改的增量。WO 2005/003963 (2005年公布的"A/"/20d朋d v员z'o"s q/'co"加,/" g加rage血v/ce")公开了用于更新存储在存储 设备中的内容的版本的方法和系统。WO 2005/003963的系统包括用于获得 转换元件和^:小增量的更新才莫块。它还包括转换的旧项目发生器、数据记 录项发生器和新版本发生器,转换旧项目发生器用于通过将转换元件应用 于旧版本的项目来产生转换的旧项目,数据记录项发生器用于根据修改的数据记录项及根据转换的旧项目来产生数据记录项,以及新版本发生器用 于通过将命令和数据记录项应用于旧版本来产生内容的新版本。注意,在那之前更新程序包有时被称为增量,然而,这是非限制性的, 并且当它从WO 2004/114130和WO 2005/003963出现时,此外更新数据包 有时包括增量。在本领域中存在其它方法,但在提到它们之前,最好应讨论几个考虑 因素。例如,应认识到,内容一般存储在存储设备中。存储设备可为易失性存储设备(例如随机存取存储器RAM)或非易失性存储设备(例如硬 盘或闪存)。存在在分立的地区中组织的、例如称为块或扇区的存储设备,其中一 个块可包括属于多个文件的内容。因此,例如,如果有两个文件存储在存 储设备中,则单个块可包括属于这两个文件中的第一个的几个('x,)字 节,以及属于这两个文件中的第二个的几个('y,)字节。如果块的大小 是'z,个字节,则显然z>=x+y。然而,精通本领域的人员应认识到,将 内容写到块中影响存储在其中的其它内容。也就是说,如果要求重写存储 在第一个文件的x个字节中的内容(例如,在其更新期间),由于存储设 备的局限性,也许不可能只写那x个字节,而可能必须将所有z个字节的 内容写到存储设备。这例如可通过将z个字节中存储的内容从非易失性存 储设备读到不包括块的易失性存储设备如RAM中、只更新存储在易失性 存储设备中x个字节中的内容(即,其中其它z-x个字节的内容保持未受 影响)并接着将z个字节的内容写回到非易失性存储设备中来完成。该局 限性表现闪存设备的特征,例如,其中要求在新内容(包括更新内容)可 写到那里之前彻底删除块的当前内容,且在将数据写到那里之前在硬盘上 不必删除全部扇区,但要求在一个写操作中写块的全部内容(例如,当让 存储在z-x个字节中的内容不受影响时只写入x个字节是不可能的;为了 让z-x个字节不受影响,需要将其内容存储在易失性存储设备中,并将它 们与x个字节一起写回到块中)。因此,更新程序可能需要到包括块的存 储设备的很多写操作,且应认识到,为了获得有效的更新,最好应最佳化 更新。例如,如果x等于例如两个字节,则这两个字节最好应一起^:更新, 而不是更新第一个字节,然后更新第二个字节,将这两个字节分开地写到 块中。而且,当将原始版本(包括原始内容)更新为更新版本(包括更新内 容)时,有时具有使用原始内容的更新命令,以便产生更新内容。例如, 有可能将原始内容复制到存储设备中的不同位置,其中此复制的内容在其 目标位置中形成更新版本的一部分。当将内容复制到目标位置时,应认识 到,在用于存储其它内容(也可能为原始版本的一部分)之前该目标位置可能已经一皮使用。因此,复制的内容可盖写其它原始内容。仍然进一步地, 有可能存在另一更新命令,其使用其它原始内容以便产生更新内容。如果 进一步调用该另 一更新命令来根据第 一更新命令操作,则其它原始内容可 能已经被盖写。这种情况构成"读前写沖突"。读前写沖突是本领域中的已知问题,且美国6,018,747试图处理之。美国 6,018,747 ( 2000年公布的 "MeA^/ /or 朋d recom^rwc"'"gt/e/to力/ei1,,)公开了 一种制造的方法、装置禾口产品, 其用于将文件的可原位重建的软件更新从源计算机产生、传送、复制并重 建到目标计算机。美国6,018,747将文件的第一版本和文件的第一版本的 更新存储在源计算机的存储器中。第一版本也存储在目标计算机的存储器 中。更新接着从源计算机的存储器传送到目标计算机的存储器。这些更新 在目标计算机使用,以原位建立文件的第二版本。根据美国6,018,747,当增量文件试图从存储器读取已经写入的偏移量 时,这将导致不正确的重建,因为已有的版本数据被盖写。这称为读前写 沖突。美国6,018,747教导如何后处理增量文件,以便建立增量文件,最 小化读前写冲突的数量,并接着用添加命令代替复制命令以消除沖突。产 生了用于表示复制命令之间的读前写沖突的有向图(digraph)。产生了程 序表,其通过将该有向图转换成无圈有向图(acyclic digraph)来消除读前 写冲突。然而,美国6,018,747使用增量文件,以便在读前写冲突期间备 份或保护盖写的内容。因此,增量文件被扩大。本领域中另 一 已知的问题出现在更新旧版本的过程在其正常终止之 前被中断时,例如电源故障时。在这样的情况下,有可能在中断期间被更 新的块的内容也许变成破坏的并包括料想不到的内容。以前已经提到,当更新内容块时,块的原始内容有时形成由更新过程 使用的输入的一部分。在这样的情况下,如果需要原始块(其由于中断而 被破坏),则更新过程可能不能恢复。也许不可能重新更新破坏的块。例如美国6,832,373( 2004年公布的朋(i me^od/or w/wto/wg a"<i z力/0m2加朋")试图处理该问题。它公开了用于更新被软件、设备和数据包括的数字信息序列的设备、系统和方法。此外,这些数字信息 序列可以用各种形式存储和使用,包括但不限于文件、存储位置和/或嵌入的存储位置。而且,在美国6,832,373中描述的设备、系统和方法给本领 域中熟练的开发人员提供了按需要产生更新信息的能力,且另外地允许用 户通过不易于产生错误的简化的更新路径继续进行下去,以及根据美国 6,832,373的发明者,所述方法可能比通过使用当美国6,832,373被提交时 存在的技术执行得更快。也就是说,美国6,832,373描述了使用辅助备份块,同时执行所有的 块更新操作,因而使用两个阶段"两阶段协议"或"两阶段提交"。根据 美国6,832,373,在更新块的第一阶段中,更新过程将更新内容写到辅助备 份块中并验证内容被正确地存储。在第二阶段中,更新过程将更新内容写 到其目标块中,以形成更新块的更新内容。然而,存在相同方法的变形, 例如在第一阶段中将更新块的原始内容写到辅助备份块中,而在第二阶段 中更新目标块以存储更新内容。然而,两阶段提交(不管备份的内容是原始内容还是更新内容)是耗 费时间的,因为每个写操作都需要执行两个操作(对两个阶段)。此外, 根据美国6,832,373,每个备份操作都将块的全部(原始或更新)内容备份 在辅助备份块中,因此如果更新过程更新的块的数量为n,则更新过程(包 括更新操作和写到辅助备份块中的操作)所需要的操作的总数量可不小于 2n。如果有在多于一个的写操作中内容被写入其中的块,则更新过程需要 执行的操作的数量将甚至大于2n。因此在本领域中存在对可靠和有效的机制的需要,该机制用于原位更 新原始版本的原始内容,产生更新版本,其中原始版本和/或更新版本^f皮压 缩地存储在存储设备上。发明内容根据本发明,提供了一种方法,其用于以存储块原位更新存储在非易 失性存储设备中的内容的原始版本以产生内容的更新版本,所述方法包括获得更新数据包;将原始版本或其一部分复制到易失性存储器;更新 原始版本或其一部分以l是供未压缩的更新版本或其一部分;压缩未压缩的 更新版本或其一部分,以便单独地压缩每个数量的未压缩的更新内容;以 及将压缩的更新版本或其一部分代替原始版本或其一部分写在存储设备 中,其中每个单独压缩的数量被写到分离的存储块中。根据本发明,还提供了一种用于产生更新数据包的方法,所述方法用 于用存储块原位更新存储在非易失性存储设备中的内容的原始版本以产 生内容的更新版本,所述方法包括将所述原始和更新版本中的任一个解 压缩到包括用于每个单独压缩的内容的分离的存储块的虚拟块中;以及在 保护緩沖器中模拟(simulate)执行转换命令所需要的数据的保护。根据本发明,进一步提供了一种方法,其用于用存储块原位更新存储获得更新数据包;将所述原始版本复制到易失性存储器,其中如果原始版 本包括被相互依赖地压缩的多于一个的存储块中的内容,则所述复制步骤 包括将原始版本解压缩到易失性存储器中,并保护解压缩原始版本所需要 的至少一些内容;更新原始版本以提供未压缩的更新版本;以及将更新版 本代替原始版本复制回非易失性存储器中,其中如果更新版本被压缩地存 储在块被相互依赖地压缩的地方,则所述复制步骤包括保护解压缩更新版 本和相互依赖地压缩更新块所需要的至少一些内容;其中原始版本和更新 版本中的至少 一个包括在被相互依赖地压缩的多于一个的存储块中的内 容。根据本发明,提供了一种用于产生更新数据包的方法,所迷方法用于 用存储块原位更新存储在非易失性存储设备中的内容的原始版本以产生 内容的更新版本,所述方法包括获得内容的未压缩的旧版本和未压缩的 新版本;获得从一个或两个版本的解压缩和转换命令中的任一项产生的新 版本和旧版本中的任一个的存储块之间的相关性;以及在保护緩冲器中模 拟执行解压缩一个或两个版本和转换命令中的任一项所需要的数据的保 护。根据本发明,还提供了一种装置,其用于用存储块原位更新存储在非括接收器,其配置成获得更新数据包;更新一莫块,其配置成将原始版本 或其一部分复制到易失性存储器中,并且配置成更新原始版本或其一部分以提供更新版本或其一部分;以及压缩模块,其配置成压缩更新版本或其 一部分,如果通过相互依赖地压缩未压缩数量的更新版本来压缩更新版本 或其一部分,则其中每个将相应于存储设备中的多个存储块,并保护解压缩更新版本所需要的至少一些内容,或通过单独地压缩相应于分离的存储 块的每个数量的未压缩的更新内容来压缩更新版本或其一部分;其中更新 模块还配置成将压缩的更新版本或其一部分代替原始版本或其一部分写 在所述存储设备中。根据本发明,进一步提供了一种用于产生更新数据包的装置,所述装 置用于用存储块原位更新存储在非易失性存储设备中的内容的原始版本 以产生内容的更新版本,包括解压缩模块,其配置成确定每个存储块和定每个存储块和当被单独压缩时实质上等于存储块大小的未压缩的虚拟 块之间的相应性;以及更新数据包构造器,其配置成在保护緩沖器中模拟 执行解压缩一个或两个版本和转换命令中的任一项所需要的数据的保护。


为了理解本发明并了解它可如何在实践中执行,现在参考附图,只通 过非限制性实施例来描述优选实施方式,其中图1是根据本发明的一个实施方式的用于在蜂窝网络中更新版本的系 统的示意图;图2A示出具有相应段的原始和更新版本的实施例;图2B示出当图2A的原始版本更新为其更新版本时如何形成^t糊 (ambiguous)部分或段;图2C示出解决图2B的读前写冲突的在本领域中已知的一种方法;图2D示出解决图2B的读前写冲突的在本领域中已知的可选方法;图3A示出具有相应段的原始和更新版本的另 一实施例;图3B示出适合于将图3A的原始版本更新为其更新版本的更新数据包;图3C示出将图3A的原始版本更新为其更新版本;图3D示出将图3A的原始版本更新为其更新版本;图4是示出产生冲突解决更新数据包的流程图;图5示出根据本发明的一个实施方式的将压缩的原始版本更新为其压 缩的更新版本;图6示出压缩版本及其相应的未压缩版本;图7是#4居本发明的实施方式的用于压縮内容的方法的流程图;图8是根据本发明的实施方式的用于解压缩内容的方法的流程图;图9A是原始版本及其更新版本的另一实施例的示意图;图9B是根据本发明的一个实施方式当图9A的原始版本更新为其更新 版本时使用的保护緩冲器的示意图;图9C是^^据本发明的另一实施方式当图9A的原始版本更新为其更新 版本时使用的保护緩冲器的示意图;图IO是详细示出用于确定更新次序的一个实施方式的流程图;图11是根据本发明的一个实施方式示出更新数据包的产生的流程图;图12(分成12A和12B)是描述根据本发明的一个实施方式将原始版 本更新为其更新版本的流程图;图13示出包括内容的重复片段的示例性未压缩的版本和相应的压缩 版本;图14是根据本发明的另 一实施方式用于压缩内容的方法的流程图; 图15是4艮据本发明的另一实施方式用于解压缩内容的方法的流程图; 图16是#>据本发明的另一实施方式用于确定更新次序的方法的流程图;图17(分成17A和17B)是根据本发明的另一实施方式用于产生更新 数据包的方法的流程图;图18 (分成18A、 18B和18C)是根据本发明的另一实施方式用于将 内容的原始版本更新为其更新版本的方法的流程图;图19 (分成19A、 19B和19C)是根据本发明的另一实施方式用于重 新开始内容的原始版本到其更新版本的更新的方法的流程图;图20示出根据本发明的实施方式用于产生更新数据包的装置;以及 新版本的装置。
具体实施方式
在下列说明中,对多于一个的图共有的部件由相同的参考数字标注。而且,除非特别说明,术语"更新"在下文中用于指"原位更新"。图1是根据本发明的一个实施方式用于在蜂窝式网络中更新版本的系 统101的示意图。连接到或包括存储设备103的便携式电话102执行实现 其操作的程序。程序一般存储在文件中。目前在便携式电话上执行的程序 的版本在下文中称为"旧版本"或"原始版本"。注意,存储器设备如存储设备103有时也称为"存储器设备"或"存 储器单元"。有时存在更新程序的需要,以便电话102执行其较新版本,組成"更 新版本"或"新版本"。这样的更新版本由在电话中运行的更新过程产生。 更新过程根据电话接收的更新数据包(组成"增量文件")运行。根据本发明,更新数据包在更新数据包发生器104中产生,更新数据 包发生器104例如在个人计算机(PC)中或在任何其它类型的计算机中运 行。更新数据包被存储在更新服务器105中,并通过发射器106传输到便 携式电话102。应注意,图1所示系统101是非限制性的例子,且本发明不限于更新程序。存储在存储设备中的很多其它类型的内容需要更新,例如存储在数 据库中的数据,存储在存储设备中的文件,等等。因此,在下文中将使用 术语"内容"而不是"程序"。同样,本发明不限于蜂窝式网络和/或便携式电话102。应认识到,便 携式电话属于称为嵌入式设备的组。存在其它嵌入式设备,例如个人数字助理(PDA)、机顶盒和连接到用于存储内容的存储设备的其它消费者电 子设备,并且有时需要更新存储在其中的内容。然而,也有可能更新存储 在连接到非嵌入式设备如PC或其它计算机的存储设备中的内容。因此, 存储设备103可为例如硬盘驱动器、闪存设备、EPROM (可擦可编程只读 存储器)和EEPROM (电可擦可编程只读存储器)或任何其它存储设备。例如,PC或任何其它计算机可存储文件,该文件包括其操作或其中执 行的程序的操作所需要的数据(例如,精通本领域的人员已知的"info文 件"或"点文件(dot file )")。有时需要例如通过通信线路,例如通过互联 网或通过任何其它通信方式来更新该数据。理解了这以后,不是使用术语如"电话"、"PDA"、"消费者电子^殳备"、 "计算机"、"PC"等,下文中将使用术语"更新设备",且应注意,术语 "更新设备"可指连接到存储设备并允许更新存储在其中的内容的任何设 备。前面解释到,为了更新存储在存储设备中的内容,更新数据包被产生、 存储在更新服务器105中、并被传送到更新设备(例如便携式电话102) 和与其连接的存储设备。可选地,传送更新数据包而没有将它首先存储在更新服务器105中是可能的。例如,有可能直接从产生更新数据包的更新 数据包发生器传送更新数据包。在这样的情况下,更新发生器运行的机器 或更新发生器本身纟皮看作更新服务器105。而且,在图l所示实施例中,更新数据包通过发射器106来传送。这 也是非限制性的,且可使用可适用于传送更新数据包的任何其它方式。例 如,有可能将更新数据包存储在便携式存储设备如软盘或U盘 (disk-on-key)上,因而允许更新设备(如电话102)通过从其读取更新 数据包来访问更新数据包。当更新设备接收更新数据包时,它可根据更新数据包来运行更新过 程,其中更新过程更新原始版本以产生更新版本。应注意,更新设备可在 收到更新数据包之后立即运行更新过程。可选地,它可将更新数据包存储 在非易失性存储器中,例如在存储设备103中,并在某个以后的时间(例如下次更新设备重新启动(reboot)时)运行更新过程。注意,存储设备可存储多于一个的原始和/或更新版本的内容。例如, 应认识到,可能有安装在单个硬盘中的几个计算机程序。在很多情况下,文件由在逻辑上连续的内容组成。例如,在包括文本 的文件中,其中文本为"123456789",字符"2"在逻辑上与字符T连 续,字符"3"在逻辑上与字符"2"连续,等等。然而,精通本领域的人 员应认识到,当将该文件存储在存储设备中时,存储的文件或包括在其中 的内容可能被分段,即,文件的不同部分可能存储在存储设备的不同部分 或块中。换句话说,在逻辑上连续的内容不必以物理上连续的方式存储在 存储设备中。记住,在逻辑上连续的内容不必以物理上连续的方式存储在存储设备 中和/或在逻辑上连续的内容的大小可能大于块的大小,应认识到,在逻辑 上连续的内容可在几个存储块上扩展。而且, 一个存储块可包括属于几个 在逻辑上连续的内容(例如几个文件)的内容。现在返回到前面的实施例, 其中文本"123456789"组成在逻辑上连续的内容,应认识到,内容"1234" 可存储在一个物理块中,而内容"56789"在本例中可存储在不同的物理 块中,该不同的物理块在物理上在存储有"1234"的块之前(然而显然, 在逻辑上内容"1234"在内容"56789"之前)。在逻辑上连续的文本"123456789"进一步被看作原始版本。根据本 实施例,更新这个文件以包括更新版本是可能的,其中存储在更新版本中 的文本是"123756489"。在此更新版本中,字符"4"和"7"与它们在原 始版本中的位置相比被交换。换句话说,在更新版本中的字符"7"代替 了出现在原始版本中的字符"4",而字符"4"代替了字符"7"。因此应 认识到,为了产生此更新版本,例如将原始版本分成几段(每段组成一个 "逻辑块")是可能的。第一段包括内容"123",第二段内容是"4",第三段包括"56",第四段包括"7"以及第五段包括"89"。当产生更新版本时,使第一、第三和第五段保持原封不动,而第二和第四段的内容交换。 因此,段包括在逻辑上连续的内容。"123456789"文本及其更新为更新版本"123756489"的前面的实施 例是简化的实施例。在其它实施例中,有可能将内容分成占据一个或更多 物理块中物理上连续的区域的段。因此,如果"123"以"12"存储在第 一块中而"3"存储在第二块中的方式被分段,其中"12"在顺序上不在 "3"之前,则才艮据本实施例,"123"虽然在逻辑上连续,也应^皮分成两 段(具体地是"12"和"3")。在后面的这个实施例中,只要块是连续的(第一块在顺序上在第二块 之前),且只要字符"1"存储在第一块终止的区域内,而字符"2"存储 在第二块开始的区域内,则段"12"仍然可驻留在两个不同的块上。后面的这个实施例中是非限制性的。例如,可选的实施方式可将段限 制为占据一个物理块(与前面实施例中的"一个或更多"不同)中物理上 连续的区域。因此,如果"12"被顺序地存储在两个连续的块中,就必须 将它进一步分成两段(一个是"1",而笫二个是"2")。此外,移动段或使它保持原封不动不是被允许的唯一的行为或转换。 例如,检测段或对存储在其中的内容执行计算是可能的。因此,不是交换 "123456789"实施例中的"4"和"7"段,而是有可能将3加到相应于 "4"段中的内容的数值上(4加3产生7)。类似地,有可能从相应于"7" 段中的内容的数值减去3 (7减3产生4)。依照这种情况,"4"和"7"仍 然被看作原始版本中的段。当更新版本中段("更新段,,)的内容相应于原始版本中段("原始段") 的内容时,这些段被看作"相应的段"或"匹配的段"。相应性指段之间 的任何逻辑或算术联系,其中更新段可为原始段的副本,它可为原始段的 修改的副本(例如,复制段的内容并接着修改复制的内容的一部分或全部 有时是优选的),它可包括通过根据原始段的内容计算更新段的内容的所 接收的内容,等等。注意,有时可能有相应于某个原始段的多个更新段(例如,原始^L的内容被复制两次,因而产生相应于其的两个更新段)。相反的情况也成立有时可能有相应于单个更新段的多个原始段(例如,为了计算单个更新段 的内容,有可能使用存储在两个不同的原始段中的内容)。图2A示出存储设备的一部分,其中原始版本2A01和更新版本2A02 具有相应的段。根据本实施例,原始版本2A01中的两个段2A03和2A04 分别相应于更新版本2A02中的段2A03,和2A04,,反之亦然段2A03,和 2A04,相应于段2A03和2A04。根据本实施例,段2A03的内容类似于段 2A03,的内容,以及段2A04的内容类似于段2A04'的内容,虽然段2A03' 和2A04,与段2A03和2A04不同地定位在存储设备中(即,在不同的地址)。 根据具体的实施例,除改变段的位置之外,也改变相对顺序。也就是说, 在存储设备中段2A03物理上在段2A04之前,但段2A04,物理上在段2A03' 之前。图2B示出当将图2A的原始版本2A01更新到其更新版本2A02时, 如何形成段的模糊部分。根据本实施例,在移动段2A03的内容之前移动 段2A04的内容,因而在存储设备中产生中间版本2B01。通过中间版本 2B01示出,段2A04,的一部分与仍然定位在其原始位置的2A03的一部分 重叠。因此,段2A04,的内容盖写段2A03'的内容的一部分。作为2A03的 一部分的段部分2B02的重叠的原始内容丢失。这个段部分(2B02)示出 由重叠引起的"才莫糊部分",且它表示两段之间的"冲突"。冲突,例如图2B中示出的冲突在本领域中称为"读前写冲突"。在一 般的方式中,当仍然被更新过程要求来进一步更新段(例如段2A03,其原 始内容是产生段2A03,的内容所需要的)的原始段或其一部分在它被使用 之前(在本例中是在复制段2A03的内容以产生段2A03,之前)被改变或 失去时,产生了读前写沖突。除非另外说明,简而言之,下面使用术语"冲 突"来指术语"读前写冲突"。目前在本领域中已知,在段2A04,的内容盖写段2A03的内容之前, 可通过将段2A03的内容复制到其新位置(即,到段2A03')来保护它免 受冲突,如在图2C的实施例中示出的。中间版本2C01包括原始段2A04和更新段2A03',接着可将段2A04的内容安全地移到其在新版本2A02中 的新位置(段2A04')。图2A、 2B和2C提供了复制-循环的例子,用于该 复制-循环的正确的复制顺序可解决沖突。在图2D示出的可选实施例中,段2A03的内容复制到被命名为"备份 缓沖器"、"备份存储"或"保护缓沖器"的存储器区域2D01中,将存储 在段2A03中的原始内容转变成冗余内容或释放的内容,而前面由被释放 的内容占用的段或区域称为"释放区",其在中间版本2D03中被标记为 2D02。这允许将段2A04的内容复制到其新位置2A04', 2A04,与释放区 2D02部分地重叠而没有盖写段2A03的内容,如中间版本2D04所示的。 现在有可能将段2A03的内容(或更准确地,其副本)从保护緩冲器2D01 复制到其在更新版本中的位置中,即,复制到更新版本2A02的更新段 2A03,中。注意,根据本实施例,保护缓沖器是更新过程可用的存储区, 即,该存储区不包括用于存储原始和/或更新内容的区域,也不包括用于存 储更新数据包的存储区。图3A示出分别具有相应的段3A03、 3A04和3A03,、 3A04,的原始版 本3A01和更新版本3A02的另一实施例。类似于图2A,更新段3A04'与 由才莫糊部分3A05示出的原始段3A03冲突。然而,与图2A的实施例不同, 这里还有更新段3A03'和原始段3A04之间的沖突,由模糊部分3A06示出。 因此,精通本领域的人员应认识到,图2C的解决方案,即,改变复制顺 序在这里是不适用的。注意,图3A的实施例不允许可避免所示读前写冲 突的复制顺序。图3A提供了复制周期的实施例,对于该复制周期来说不存在用于解 决冲突的正确复制顺序。应认识到,其它复制周期可能存在,其中有所涉 及的多于两个的段("多复制周期")。即使在这样的多复制周期中有时也 没有解决沖突的复制顺序。例如,四个段(A、 B、 C和D)的复制周期可 按下列方式创建更新的A与原始的B冲突,更新的B与原始的C冲突, 更新的C与原始的D沖突,以及更新的D与原始的A冲突。应认识到, 该复制顺序不允许解决冲突的复制顺序。例如美国6,018,747试图通过识别复制周期、以全部的段与其它段冲突的方式将更新版本重新分成段(因此产生"模糊段")、以及用添加命令代替冲突复制命令(添加命令有时称为"插入命令"),来解决读前写沖突。 添加命令要求添加的或插入的数据在更新数据包中是可利用的。因此,当用添加命令代替复制命令时,前面复制的、现在插入的内容^^皮插入更新数 据包中,因而增大了它的大小。应认识到,根据不同的方法,将原始版本3A01更新为更新版本3A02 的更新过程可使用类似于图2D所示的用于解决冲突的方法的方法。更具 体地,它可使用用于存储原始冲突段的副本的保护緩冲器。注意,在确定了沖突存在之后,有可能以类似于美国6,018,747的方 法重新分割段,但不是将模糊段的原始内容存储在更新数据包中,它可存 储在保护緩冲器中。图3B示出适合于将图3A的原始版本3A01更新为其更新版本3A02 的更新数据包3B01 。更新数据包3B01包括3B02—包括类似于原始段3A03 的内容的内容的一个部分,因而使段3A03的原始内容变为冗余的。现在 更新过程可根据更新命令3B03将段3A04的内容安全地复制到其更新的位 置一相应的段3A04,。在将原始段3A04的副本存储到更新段3A04'中之后, 段3A04的内容也变成冗余的,因而允许更新过程用存储在3B02中的内容 盖写它,存储在3B02中的内容是段3A03的原始内容的副本。根据当前的 实施例,依照更新数据包3B01的插入命令3B04来完成此任务。应注意,当有多个沖突时,可能期望在解决其它冲突之前选择一个待 解决的冲突。该选择可由最优化标准指导。例如,被保护段的大小可用作 最优化标准。如果原始段3A04的大小小于原始段3A03的大小,则可能期 望存储段3A04,的内容的副本,而不是存储存储在3A03中的内容的副本, 如图3B所示的。而且,不是存储存储在至少一个冲突段中的内容的副本, 而有可能存储存储在至少一个模糊段中的内容的副本。如果模糊部分的大 小用作最优化标准,则根据本实施例,有可能试图只存储大小较小的这些 (一个或更多)模糊部分。图3C示出将图3A的原始版本3A01更新为其更新版本3A02。当产 生更新数据包3C01时,因为模糊部分3A06的大小小于模糊部分3A05的25大小,此模糊部分3A06的原始内容的副本^皮插入更新数据包中(见3C02 )。 注意,3C02保护部分3A06的内容,因此它允许删除(或修改)其内容。 完成这以后,更新数据包3C01包括下列更新命令更新命令3C03指示更 新过程复制3A03的原始内容,以产生段3A03,的更新内容,盖写段3A04 的部分3A06,然而,部分3A06的原始内容由3C02保护。段3A03现在 变成释放的段;更新命令3C04指示更新过程将3A04的内容复制到3A04' (注意,根据本命令复制的内容还包括存储在段3A03,中的内容的一部分, 即,它包括盖写如图所示的部分3A06的内容的副本,其由部分3C08表示); 以及更新命令3C05指示更新过程将存储在3C02中的内容(即,类似于部 分3A06的原始内容的内容)插入3C08中,用于恢复3A04,的内容。插入 命令3C05是"恢复更新命令",或简言之,"恢复命令",且在图中它被表 示为"恢复,,,以便强调此。然而,注意,3C05可为插入命令(如图3B 中的3B04 )。注意,在本例中假定根据确定的次序(组成"更新次序")来执行更 新,其中3A03被复制到3A03,,然后3A04被复制到3A04,,接着恢复3C08。 在这种情况下,更新次序受小于模糊部分3A05大小的模糊部分3A06的大 小的影响,因而包括其副本的更新数据包小于包括3A05的副本的更新数 据包。精通本领域的人员应认识到,本实施例的变化形式(即,图3C的实 施例)避免复制整个段3A04的原始内容以产生更新的段3A04,,接着由 3C02的被保护内容盖写其中的一部分(3C08)以恢复3A04,的内容。将两 个段3A03和3A04中的每一个分成两个段是可能的, 一个产生冲突(模糊 段), 一个不产生。图3D示出用于将图3A的原始版本3A01更新为其更新版本3A02的 又一实施例。根据本实施例,需要被保护免受冲突的内容存储在存储设备 中的保护緩沖器中。已经示出,根据本实施例,存在对保护仅仅一个模糊部分的内容的需 要。此外,其可为大小小于另一个的模糊部分。在这种情况下,其为模糊 部分3A06。当产生更新数据包3D01时,更新命令3D02插入其中,指示更新过程 将模糊部分3A06的原始内容的副本存储在保护緩冲器3D03中,由此保护 其内容。命令3D02组成"备份命令"、"保护更新命令",或简言之,"保 护命令"。更新过程需要在用段3A03,的内容盖写部分3A06之前执行该命 令。更新过程根据保护命令执行的操作称为"保护操作(protection operation)","〗呆护'f生才乘4乍(protect operation),,或"备4分才乘4乍",且注意, 代替使用显式(explicit)"保护"更新命令,可使用"复制"命令。当根据更新命令3D02操作时,更新过程将部分3A06的内容复制到保 护緩冲器3D03中,因而产生被保护部分3D04。在此阶段,更新过程可根 据更新命令3C03安全地操作,并将3A03的原始内容复制到段3A03',盖 写才莫糊部分3A06的内容,3A06的原始内容被保护在保护緩沖器3D03中。 存储设备中的版本变成中间版本3D05。此后,更新过程可根据更新命令3C04操作,并将段3A04的内容复制 到其在中间版本3D06中的新位置3A04"。应注意,在此阶段,部分3A06 包括最初作为3A03的部分的内容。因此,当将3A04复制到3A04"时, 3A03的原始内容的一小部分也被复制,如部分3C08所示的。注意,部分 3C08的大小类似于模糊部分3A06的大小。为了产生段3A04'的预期内容,更新过程需要将3C08的内容恢复为与 段3A06的原始内容类似。为了这么做,更新过程根据更新命令3D07操作, 因而复制3D04的被保护内容以代替部分3C08的内容,从而产生段3A04, 的预期内容。注意,3D07是恢复命令的另一例子,然而可改为使用复制命令。因此示出,有时原始内容需要在用另 一段的内容盖写它之前来被保护 (例如,通过将其副本存储在保护緩冲器中)。然而,这是非限制性的, 且有需要保护原始内容的其它情况。例如,在更新期间有时修改段的内容 (或其一部分)。然而,可能有其它段,这些段的更新需要被修改的段的 原始内容。例如,原始段("段A")最初存储一个数字(例如2),其中其 更新内容存储不同的数字(例如4 )。更新内容的大小在这种情况下保持类 似于原始内容的大小。然而,可能有另一段或其内容("段B"),其更新需要例如将存储在原始段A中的值添加到存储在原始段B中的数字,其中添加法的结果存储在更新段B中。即使更新段A的位置(或存储其内数字的 部分)保持类似于原始段A的位置,但是实际上它的内容改变了 (原始的 2由4代替)。因此,通过在更新段A之后更新段B,更新过程必须避免使 用段A的更新内容。这可通过将段A的原始内容存储在保护緩冲器中(或 更新数据包中)来完成,因而保护段A的原始内容。应注意,此非限制性实施例中的更新段A相应于原始段A。此外,更 新,殳B相应于原始纟殳A和原始l殳B。返回到图中,注意,图3C和3D的更新数据包3C01和3D01分别称 为解决冲突的更新数据包。然而,当比较图3C和3D中示出的两个实施例 时,注意,更新数据包3D01比更新数据包3C01包括更多的更新命令,因 为它还包括备份更新命令3D01。备份命令可备份大量的内容,因此它们可 减慢更新过程。图3C的实施方式不需要将备份命令插入更新数据包3C01 中,因此它们允许更新过程更快地进行。另一方面,代替保护緩冲器3D03, 使用更新数据包3C01来存储被保护数据,因此,只要被保护数据的大小 大于相应的备份命令的大小,更新数据包3C01就在大小上大于更新数据 包3D01。记住,例如通过在通信线上传输更新数据包来将它们传送到更新 设备,较大的更新数据包可能是一个限制。图4是示出解决冲突的更新数据包的产生的流程图。该流程图相应于 使用保护緩冲器来保护冲突段的内容的实施方式。在401中获得更新数据 包。更新数据包可通过本领域中已知的任何方式产生(见例如美国 6,546,552、 WO 2004/114130、 WO 2005/003963等等)。更新数据包可在401 期间产生,以便形成用于目前参考的(图4的)流程图的基础,或它可通 过任何可利用的方法(例如从存储设备读取它、从通信线路接收它、通过 过程间的通信等等)预先产生并获得。接着,在402中分析更新数据包, 以便识别形成沖突段的段。这可通过构造有向图并识别其中的周期(或换 句话说,"复制周期")来完成,例如由美国6,018,747所述的。注意,沖 突段包括模糊部分,该模糊部分大小可能类似于或小于其相应段的大小, 因而在段中留下零个或更多不才莫糊部分。未解决的冲突#1相继地处理,如由403示出的。在404中,包括^^莫糊部分的选定段分成模糊部分和不模糊部分,因而产生两个段, 一个模糊段 和一个不模糊段。注意,有时段包括多于两个的部分(多个模糊部分和/或多个不模糊部分)。例如,当模糊部分在该段的中间时,可能有至少两 个不模糊部分和一个模糊部分。在这样的情况下,该段可分成多于两个的段。在405中为每个不才莫糊段产生新的更新命令,而在406中为每个才莫糊 的段产生保护命令和恢复命令。在407中,产生冲突的原始更新命令从更 新数据包中删除,而在408中新的更新命令以及保护命令插入更新数据包 中,代替所删除的更新命令。在409中,例如根据美国6,018,747将恢复 命令插入更新数据包中,而不是插入命令^皮插入。注意,尽管代替删除原始更新命令而是将最新产生的更新命令插入以 将其置换(例如见405、 406、 407和408),但是有可能修改原始更新命令 以便只涉及不模糊部分(其变成不模糊段)。在理解了这以后,有可能只保护需要保护的内容的段而不是整个块,容。当可更新的设备需要根据存储在其中的版本操作时,如果该版本被压 缩,则该版本被解压缩(例如,在运行时间)到例如RAM中,因而允许 操作。例如,如果可执行文件(程序)以压缩的形式存储,则它被解压缩, 以便允许操作。另一例子是具有压缩的数据。当程序需要访问该数据时, 数据^皮解压缩,由此允许程序操作。因此,存储在可更新的设备中的原始版本可为压缩的原始版本,且类 似i也,更新X反本可为压缩的更新纟反本。下面描述的是本发明的实施方式,其中原始版本和更新版本都压缩在 存储i殳备上,因为这些实施方式是最复杂的。读者因此能够也容易地理解 较简单的实施方式,其中通过假定下面与原始版本或更新版本的压缩/解压 缩、虚拟块、虚拟边界(virtual boundary)和/或解压缩相关性有关的任何描述分别不是相关的,原始版本或更新版本没有一皮压缩地存储。明显地,为了将压缩的原始版本更新为压缩的更新版本,有可能才艮据 筒单的增量文件来操作更新过程,包括以简单的方式构造的更新命令,相 继处理两个压缩版本之间的差异。然而,精通本领域的人员应认识到,在 两个未压缩版本之间存在的小差异可导致相应的压缩版本之间的相当大 的差异,例如ZIP文件的例子。因此,简单的增量将变大而低效,而不管 它传输到可更新的设备所需要的带宽、将它存储在设备中所需要的存储器 或两者。另一解决方案是根据图5示出的本发明的一个实施方式提供的。根据该实施方式,更新数据包501在两个未压缩的版本之间产生。接着,当这 样的更新数据包501在存储有压缩的原始版本502的可更新的设^(例如, 移动电话)中收到时,有可能使压缩的原始版本502在例如RAM中解压 缩,产生解压缩的原始版本503。解压缩的原始版本503可根据更新数据 包501来更新,产生未压缩的更新版本504,更新版本504又可在可更新 的设备中压缩,因而产生压缩的更新版本505。注意,解压缩的原始版本 503更新为未压缩的更新版本504可根据任何方法如原位更新来进行,且 更新数据包501不限于简单的增量。然而,本实施方式是非限制性的,且 应理解,有可能根据非原位的任何其它更新方法,例如通过在RAM中的 另一位置产生未压缩的更新版本504,来将解压缩的原始版本503更新为 未压缩的更新版本504,而没有覆盖解压缩的原始版本503。然而注意, 此操作模式一般需要较多的RAM空间,以便允许完整的原始版本的解压 缩。根据本发明的一个实施方式,用于产生压缩的原始版本和更新版本的 压缩是线性压缩(其中压缩内容维持与未压缩内容一样的顺序),例如已 知的自身(pwM)zip、霍夫曼编码和/或其组合。因此,有可能确定,根 据压缩顺序,在线性压缩中,压缩版本的第 一块对应于相应的未压缩版本 的第一虚拟块,压缩版本的第二块对应于未压缩版本的第二虚拟块,等等。 这在图6中示出,其中601表示压缩版本,而602表示相应的未压缩版本。 压缩版本601存储在存储设备中的三个存储块603、 604和605中。类似30地,未压縮版本602可分成三个虚拟块606、 607和608,其不必在大小上 彼此相等。虚拟块606的内容被压缩到存储块603中;虚拟块607的内容 被压缩到存储块604中;以及虚拟块608的内容被压缩到存储块605中。根据本发明的一个实施方式,有可能解压缩压缩的原始版本的存储在 一个存储块中的内容,因而产生相应的未压缩的原始虚拟块。然而注意, 在那些情况下,当存储块包括作为原始版本的部分的内容以及不是被更新 的原始版本的部分的内容(例如,是另一程序的部分的内容)时,只有作 为原始版本的部分的内容可能需要被解压缩。接着,未压缩的原始虚拟块的内容可被更新,产生相应的未压缩的更 新虚拟块,且该未压缩的更新虚拟块或其一部分可随后被压縮到压缩的更 新块中。在压缩的更新块中的压缩内容因此是压缩的更新版本的一部分。因为假定内容以压缩的形式存储在存储设备上,因此假定每个压缩块 是物理块。每个压缩块相应于一个大小可以变化的未压缩"块"。未压缩 "块"在这里也称为在虚拟块之下,因为虚拟块一般在RAM中,其没有 被组织在分离的块中,如上所解释的。在下文中,为了提高的易读性,即 使在表示虚拟或解压缩块(多个块)时也将使用块(多个块)而没有引号。 假定段以其解压缩的形式被查看但以压缩的形式存储,则知道哪个未压缩根据本发明的一个实施方式,未压缩的更新版本压缩到压縮的更新版 本被逐块地执行,相应地产生压缩的更新版本。在本实施方式中,当^皮压 缩时适合一个物理块的每个数量的未压缩内容(即,虚拟块)被独立地压 缩。本实施方式因此称为"单块实施方式"或"逐块"实施方式。在一些 情况下,逐块压缩是有利的,因为在块之间没有解压缩相关性,因此每个 块可纟皮独立地解压缩。为了执行逐块压缩,需要确定未压缩版本中的虚拟块,存储在每个虚 拟块中的内容可被压缩以填充单个存储块。更新数据包可以可选地包括用 于压缩确定的虚拟块的命令,因而产生压缩的更新版本。此外,应注意,有时只压缩原始版本和/或更新版本的一部分。因此,一般而言,本发明提供了用于更新压缩的内容的方法和系统,其中压缩的 内容可为原始内容、更新内容或原始和更新内容。为了更好地理解在逐块压缩实施方式中压缩数据的物理块和未压缩 数据的虚拟块之间的相应性,将给读者介绍用于压缩和解压缩内容的非限 制性方法。应认识到,用于确定相应于物理块的虚拟块的一个非限制性方法是通 过使用已知的自身二进制搜索。也就是说,知道虚拟块开始的地址,有可 能选择终止地址。可压缩存储在存储器中的、从起始地址开始并在终止地 址终止的内容。根据本发明的实施方式,将内容压缩到压缩的物理(即,存储)块中以便最大化物理块的应用的方法700的实施例由图7的流程图示出。注意, 虽然在下文中当讨论将内容压缩到物理块中以及将内容从物理块中解压 缩时使用术语物理块,但是有可能在一些实施方式中在RAM中压缩和/或 解压缩与物理块相等大小的内容。在图7和下面的其它图中,描述了某些 指针,其在所示实施方式中的定位在压缩期间被使用。应理解,这些指针 的描述是为了有助于读者的理解,且可另外或代替地使用跟踪位置的其它 方式。还应理解,在一些实施方式中,可另外或代替地使用在这里没有被 描述以便不复杂化描述的额外的指针。在阶段702中,起始指针(用于虚拟块)设置成未压缩内容(即,待 压缩的内容)的开始。在阶段704中,对未压缩内容的虚拟块的大小进行 初始的估计,该大小在被压缩到物理块中时将适合。例如,才艮据物理(压 缩)块的大小和对压缩内容典型的压缩比,虚拟块的初始大小(即,起始 和终止地址之间的距离)可被假定为第一估计。例如,如果物理(压缩) 块的大小是128个字节且压缩比是1:2 (压缩大小被未压缩大小除),则有 可能以占用256个字节的内容被大致压缩为128个字节(物理块)的初始 假设开始。可选地,如果初始内容大小小于物理块大小与压缩比的比率, 则初始内容大小被估计为剩余的未压缩内容。在阶段712中,使用期望的 压缩比和任何适当的压缩算法来压缩以起始指针开始并包括假定的虚拟 块大小的内容。应注意,在一些实施方式中,用于压缩内容的原始版本的压缩算法和/或压缩比可不同于用于压缩内容的新版本的压缩算法和/或压 缩比,该新版本原位更新原始版本。在阶段714中,压缩内容的大小(即, 在阶段712中被压缩)与物理块的大小比较,以查看是否满足一个或更多 停止标准。在特定实施方式中,应将停止标准理解为使最近的以前估计的 内容大小作为虚拟块的大小^^接受的标准。例如,在一个实施方式中,停 止标准可为,例如当两次(或任何预定的数量)重复显示过程未达成一致 (压缩内容大小和物理块大小之间的压缩大小差的值停止减小)时,或当 压缩大小差值变得低于预定的值时。如果不满足停止标准(即,最近的以前估计的用于虚拟块的内容大小是不可接受的),则在阶段718中,确定 压缩内容大小是否大于物理块大小。如果压缩内容大小证明是大于物理块 大小的,则必须减小未压缩的虚拟块内容大小(阶段720),而如果压缩内 容的大小小于物理块大小,则需要增大未压缩的虚拟块内容大小(阶段 722)(应理解,不能将内容大小增加到超过未压缩内容的结尾)。例如, 在一个实施方式中,如果压缩内容大小和物理块大小之间的差由下式确 定大小差=压缩内容大小-物理块大小则最新估计的虚拟块大小可在阶段720或722中确定,例如根据下列 等式最新估计的未压缩虚拟块大小二以前计算的未压缩虚拟块大小-大小差 /压缩比该过程接着重复而回到阶段712,其中具有最新估计的未压缩虚拟块 大小(并在相同的起始地址开始)的虚拟块—皮压缩,且最新压缩的内容大 小再次与物理块大小比较。如果大小仍然不相等,则可根据例如精通本领 域的人员已知的二进制搜索标准来确定新的大小。可重复进行压缩和比 较,直到得到虚拟块的适当大小,例如直到满足停止标准(阶段716中的) 时。用于任何虚拟块的停止标准可在第一次执行阶段716时或在任何随后 的执行中满足。在阶段724中,可选地限定和/或记录虚拟块的大小和/或 虚拟块的边界。例如,可将虚拟块的下边界限定为起始指针的位置(起始 地址),以及可在虚拟块的终止地址(即,起始指针的地址加上虚拟块的内容大小的估计量,这导致停止标准被满足)限定上边界。在阶段726中, 起始指针被增加了内容的大小,以便指向下一个虚拟块的起点(即,前面 虚拟块的终止地址+1变成待压缩的下一个虚拟块的起始地址)。整个程序从阶段704开始重复并继续,以确定第二虚拟块、第三虚拟块等,直到起 始指针增加到超过未压缩的更新版本的结尾(阶段728),且本方法结束。在其它实施方式中,只要压缩大小差小于或等于零,通过压缩内容可 简化压缩,因而省略了增加内容大小以便更好地填充物理块的阶段(阶段 722 )。这些实施方式在一些情况下可导致物理块的效率较低的使用。为了简单起见,这里的实施方式在下面描述被限定和/或记录的虚拟块 的边界。然而,对读者应明显的是,在本发明的范围内的其它实施方式中, 可另外或代替地限定和/或记录实现边界的计算的虚拟块的其它特征。既然已经解释了逐块压縮,现在将给读者介绍用于将内容从物理块解 压缩到虚拟块中的非限制性方法。例如根据方法700, ^Ti定填充每个物理 块的内容被独立地压缩(即,没有块之间的压缩相关性)。图8是根据本 发明的实施方式用于解压缩内容的方法的流程图。在阶段802中,压缩内 容指针(保持跟踪压缩内容)被置于压缩内容的起始地址,即,待压缩的 第一物理块的开始。如上所述,为了描述的简单而在这里使用术语物理块, 但有可能将来自每个物理块的压缩内容复制到相等大小的RAM中,以及 压缩内容指针指向RAM中压缩内容的起始地址。在阶段804中,未压缩 内容指针(保持跟踪未压缩内容)被置于未压缩内容的起始地址,即,第 一虚拟块的开始,其将来自第一物理块的解压缩的内容保持为解压缩的。 在阶段806中,可选地将虚拟块的下边界限定和/或记录为未压缩内容指针 的位置。在阶段808中,使用用于压缩内容的反压缩比和适当的解压缩算 法来从物理块中解压缩一个单位,例如一个字节的内容。接着增加压缩内 容指针和未压缩内容指针以分别被定位在压缩的内容单元和相应的未压 缩的内容单元的终止地址(阶段810)。如果压缩内容指针不在物理块的末 尾(阶段812),则解压缩另一内容单元(阶段808),且相应地增加压缩 内容指针和未压缩内容指针(阶段810)。当压缩内容指针到达物理块的末尾(阶段812)时,则在阶段814中,可选地将虚拟块的上边界限定和/或记录为未压缩内容指针的位置。如果物 理块不是最后的块(对阶段816的否定回答),则增加压缩内容指针和未压缩内容指针(阶段818 ),以便分别表示下一物理块的开始地址和下一物理块的内容将被解压缩(即,将为相应的虚拟块)的起始地址。接着对下一块重复该过程,直到到达最后的块,且过程结束(阶段816中的肯定回答)。因此通过遵循图8的方法或类似的方法,在解压缩期间可限定和/或记 录相应于每个物理块的每个虚拟块的边界。应注意,如果可选的阶段724 在压缩期间^皮执行,则有可能根据压缩过程而已经知道虚拟块的边界。在 这种情况下,可改为遵循包括内容的解压缩的简化解压缩算法,而不必重 新限定虚拟块的上边界(阶段814 )和下边界(阶段806 )(因为边界是已 经知道的)。因此通过执行包括如上所述的限定和/或记录的压缩和/或解压缩的方 法,可确定每个虚拟块和物理块之间的相应性。图9A是在RAM中解压缩形式的原始版本9A01及其更新版本9A02 的实施例的示意图。应认识到,未压缩的原始版本9A01被更新为未压缩 的更新版本9A02。根据本实施方式,在RAM中原始版本9A01的虚拟块 可原位更新,或可更新到RAM中的不同区域,但在任一情况下,包括9A01 的压缩版本的物理块原位更新。为了描述的简单,在图9A、 9B和9C的 描述中假定RAM中的虛拟块原位更新。在本实施方式中,原始版本9A01 占用至少三个具体表示为9A03、 9A04和9A05的虚拟块。更新版本9A02 占用至少相同的虚拟块H艮定在RAM中原位更新)。然而,为了区别开原 始内容和更新内容,9A03,表示当更新内容存储在其中时的虚拟块9A03; 9A04,表示当更新内容存储在其中时的虛拟块9A04;以及9A05,表示当更 新内容存储在其中时的虚拟块9A05。虽然在图9A中,看起来虚拟块(其 相应于特定的物理块)在包括更新的未压缩内容时与在包括原始的未压缩 内容时是相同的大小,但是大小相等不是必需成立的,且有可能虚拟块(相 应于特定的物理块)在包括更新的未压缩内容时可能大于、小于或等于当 包括原始的未压缩内容时的大小。因为读者应理解,即使稍微修改的内容也可导致完全不同的压缩行为(因此适合于物理块的未压缩内容的不同的 虚拟块大小)。块9A03包括四个段9A06、 9A07、 9A08和9A09;块9A04包括六 个段9A10、 9A11、 9A12、 9A13、 9A14和9A15;以及块9A05包括三 个段9A16、 9A17和9A18。在更新期间,存储在段9A06中的内容被删除,因此它在更新版本9A02 中没有相应的段。其它删除的段是9A10、 9A12和9A18。而且,存储在段 9A07中的内容被移动(复制)到块9A05',因而产生段9A07'。存储在段 9A08中的内容留在块9A03'中,组成段9A08',但是由于段9A06被删除, 因此段9A08,(或至少其一部分)现在占用以前由9A06的内容占用的块 内地址,或换句话说,它变成块中的第一段,其属于更新版本9A02。存储 在段9A09中的内容从块9A03复制到块9A04,,组成其中的段9A09,。注 意,段9A07'、 9A08,和9A09,是在更新版本中分别相应于段9A07、 9A08 和9A09的段。段9A11和9A13的内容复制到块9A03,,分别在其中产生相应的段 9A11'和9A13,。然而,在原始版本中,段9A11在段9A13之前,而在更 新版本9A02中,它们各自的顺序改变,且段9A13,在段9A11,之前。此外, 内容插入块9A03,中的三个新段(9A19、 9A20和9A21)中,且注意,这 些新段(9A19、 9A20和9A21)中没有一个相应于原始版本中的段。类似 地,内容插入块9A04,中的两个新—敬(9A22和9A23 )中以及块9A05'中 的一个新段(9A24)中。9A22、 9A23和9A24都不相应于原始版本中的 段。存储在块9A04的段9A14中的内容留在相同的块9A04'中,产生相应 的段9A14,,以及存储在相同块(9A04 )的段9A15中的内容^皮移动(复 制)到块9A05,中,组成段9A15'。块9A05的段9A16相应于块9A05,中的段9A16'。类似于段9A16, 其中段9A16是作为原始版本9A01的一部分的块9A05中的第一段,段 9A16,是作为更新版本9A02的一部分的块9A05,中的第一段。然而,注意, 段9A16,的更新内容不必与存储在段9A16中的原始内容完全一致,且在这种情况下,9A16,的更新内容的大小大于9A16的原始内容的大小。例如, 更新命令可沿着更新的段的内容插入一个或更多零(0)。这样的命令可例 如在每一千个原始字节后插入一百个零。允i午9A16的内容更新为9A16, 的内容的更新命令可表示任何其它转换操作,例如"将小写字符转变成小 写字符"等。块9A05的段9A17相应于块9A05,的段9A17',但它们在块 中的位置不同。虽然以前没有特别提到,但可能存在额外的相应段,例如9A14和 9A14',其在它们各自的块中的位置改变了。注意,根据本实施例,有可用于更新过程的保护緩冲器9A25。虽然保 护緩冲器的大小不被本发明限制,但在图9A的本实施例中,保护緩沖器 大小等于两个(物理)存储块的大小,其中一个保护块标注为9A26,而另 一个为9A27。然而,注意,这是非限制性的例子,且保护緩沖器可具有任 何大小。参考图9A,注意,存储在段9A13中的原始内容是更新块9A03,中的 段9A13,所需要的。假定更新次序为块9A05,,然后块9A04,,接着块9A03,, 则应认识到,当更新过程根据更新命令"将9A09复制到9A09",操作时, 更新块9A03,(包括段9A13')的内容还没有产生,其中所述更新命令盖 写段9A13 (或至少其一部分)的原始内容。因此,应认识到,当得到"将 9A13复制到9A13",的命令时,存储在段9A13中的内容已经是作为段 9A09,的一部分的更新内容,而不是9A13的原始内容。因此,在这种情况 下,要存储在9A13'中的"更新"内容将不是预期的内容(它不是9A13 的原始内容的副本)。为了避免这个错误,存储在段9A13中的原始内容需 要在用段9A09,盖写它之前被保护(例如,保护在保护緩冲器中)。理解了这以后,有可能确定,在盖写存储在段中的原始内容之前,如 果产生将存储在更新次序中较远的块中的更新内容的至少一个更新命令 需要,则应保护该原始内容。注意,为了简单起见,下面描述的实施方式涉及将未压缩的原始内容 保护在保护緩沖器中的选择。然而,这是非限制性的,且应认识到,在其 它实施方式中,以任何其它方式例如通过加密或另一转换来处理的压缩的37改为保护在保护緩冲器中。参考图9A,还注意到,段9A17的内容复制到相同的块(9A05)的段 9A17,中。9A17,出现在9A17之前,即,9A17,的更新内容没有盖写9A17 的原始内容。因此,明显地,看起来9A17的原始内容被9A17,隐式 (implicitly)保护,且该原始内容不需要显式保护(例如,在保护緩沖器 中)。然而,在更新设备具有包括块的存储设备如闪存的那些情况下,应 认识到,通常更新内容的副本在例如RAM (随机存取存储器)中产生, 且在完成整个更新块(在这种情况下为9A05,)的更新内容生成之后,更 新内容被压缩,并在删除了相应于原始的9A05的物理块的内容之后从 RAM复制到相应于更新块9A05,的物理块。因此应i人识到,当用相应于 9A05,的(压缩的)更新内容盖写相应于9A05的原始物理块时,如果在删 除操作成功之后写操作失败,则将失去相应于9A17的原始压缩内容,而 不管它没有一皮相应于9A17,的压缩内容盖写的事实。因此应注意,在当需下,为了可靠性的目的也需要保护。另一方面,段9A15复制到块9A05'的段9A15,中。这在更新块9A05' 时完成,即,在更新块9A04,和块9A03,之前完成。因此,可认识到,当 更新块9A04,并用段9A23 、 9A14'以及可能还有9A22的更新内容盖写9A15 的原始内容时,9A15的原始内容已经复制到9A15,中,在更新次序中, 9A15,在9A04,之前的块中。因此,在图9A的实施例中,不需要显式保护 9A15的原始内容。更进一步地,如果在实施例中,除了将9A15的内容复制到块9A05, 内的9A15,中的目前存在的复制命令(注意,在更新次序中块9A03,在块 9A05,以后)以外,还有将9A15的原始内容复制到块9A03,中的相应段中 的额外的更新命令,则仍然不需要显式保护9A05的内容。虽然在更新次 序中块9A03,在块9A04,之后,因此在更新块9A03,之前盖写9A15的原始 内容,但有可能使用存储在9A15,中的内容,而不是其中显式存储在保护 緩冲器中的副本。因此,如果有在块中复制段的内容的至少一个更新命令,其中所述块在更新次序中在原始段的原始块之前,则不需要显式保护该段的内容。理解了这以后,应认识到,在块9A05中,段9A16和9A17或其部分 需要保护。在块9A04中,段9A11、 9A13和9A14或其才莫糊部分需要保护, 而在9A03中,是9A08或其模糊部分需要保护。注意,图9A的实施例是非限制性的。在本实施例中,更新数据包允 许更新过程将原始版本9A01更新为更新版本9A02,同时首先执行用于更 新块9A05,的更新命令,然后是用于更新块9A04,的更新命令,接着是用 于更新块9A03,的更新命令。可选地,在更新了块9A05,之后,有可能更 新块9A03',最后是块9A04,。还有可能首先更新块9A04',后面是块9A03' 和9A05,等。应注意,根据本实施例,有六个不同的^皮允许的更新次序。 通常,有n!个可能的更新次序,其中n为块的数量,所述块包括作为新版 本的一部分的修改的数据。所有这些n!个更新次序都产生相同的更新版本。 "更新次序"或"更新顺序"是这种顺序,即更新版本的块根据该顺序来 更新(或写入)。根据本发明,更新设备的工作环境可预先配置成分配存储设备103中 的一个或更多区域,该区域用于由设备执行的任何软件所实现的操作的备 份和/或保护的目的。更新的内容是这样的操作的一个例子。这样的区域是 "保护緩冲器"。根据参考图3D作为例子描述的一个实施方式,有可能通 过将段的原始内容的副本存储在存储设备103中的保护緩冲器3D03中来 保护该段的原始内容,因而与在其中存储被保护段的内容的数据包相比减 小了更新数据包的大小。根据另一实施方式,多于一个的段的内容(或其一个或更多部分)可 存储在保护緩冲器中。注意,如果在存储部分之后,保护緩冲器包括未使 用的区域,则有可能使用该未使用的区域来存储存储在需要保护的其它段 中的内容(或其部分)的副本。这些其它的^皮保护段可存储在当前的块中, 或它们可存储在存储设备中的其它块中。也就是说,有可能将段或其内容 存储在保护缓沖器中,而不是将全部块复制到保护緩沖器。以前注意到,有可能将^^莫糊段分成几个段,即,^^莫糊段可分成一个或 更多模糊段以及一个或更多不模糊段。接着更新命令适合于与分离的段相对应。实现了这以后,注意在下文中,不是冲是到才莫糊段和/或其才莫糊部分, 而是讨论段(和/或模糊段)。虽然在进一步讨论下面图9B和9C的实施例时,不是将段分成子段(模 糊的和/或不模糊的),以便尽可能保持描述简单,而是对全部"原始"段 进行参考。例如,从图9A中看来,9A17应分成两个部分或子段; 一个被 段9A16'的更新内容盖写,另一个被段9A07,的更新内容盖写。然而,下 面的描述涉及保护完整的段9A07的原始内容。图9B是根据本发明的一个实施方式,当将图9A的原始版本更新为其 更新版本时使用的保护緩冲器9B01的示意图。在本例中,保护緩冲器9B01 的大小是两个存储块,正如图9A的保护緩冲器9A25的情况,然而,这是 非限制性的,且保护緩沖器可具有任何可适用的大小。注意,当更新过程 开始运行时,保护緩沖器是空的,或换句话说,其未使用区域的大小类似 于保护緩冲器的大小。在本实施例中,选定的更新次序是9A05,、 9A04,以及接着是9A03'。 因此,当更新块9A05,的原始内容(这意味着盖写存储在9A05中的原始 内容)时,段9A16的原始内容需要保护。段9A16的大小小于保护緩沖器 的大小,因此段9A16的原始内容复制到保护緩冲器。段9A17也需要保护。因为段9A17的大小小于保护緩冲器的未使用区 域,所以段9A17的原始内容也可复制到保护緩冲器。现在,当需要保护 的9A05的所有段被保护时,存储在块9A05中的内容可由9A05'的更新内 容(即,,殳9A16'、 9A07'、 9A17,、 9A15,和9A24的更新内容)安全地盖 写。如已经解释的,将原始内容复制到保护緩沖器提供了对模糊段的保护 和/或更新过程的可靠性。而且,在更新块9A04'(因此盖写存储在9A04中的原始内容)之前, 且只要在保护緩冲器中有未使用的区域,则段9A11、 9A13和9A14的原 始内容就复制到保护緩沖器,同时没有进一步保护段9A15的原始内容的 需要,因此其内容没有复制到保护緩冲器(9A15由9A15'隐保护,如前面 参考图9A解释的)。此外,在更新块9A03,之前,且只要在保护緩沖器中 有足够的未使用区域,则9A08的原始内容也应复制到保护缓沖器。40但是注意,现在保护缓冲器9B01的未使用区域比一个存储块的大小 大一点。如果保护緩冲器的大小仅仅是一个存储块,因此没有足够的未使用区域来在其中存储段9A08的副本。当保护緩冲器没有足够的未使用区 域来保护所有需要保护的段时,则它们的内容需要备份在可选的存储区 中,例如更新数据包本身中,如在美国6,018,747中或参考图3C所述的。图9C是根据本发明的另一实施方式,当将图9A的原始版本更新为其 更新版本时使用的保护緩冲器9C01的示意图。根据本实施方式,选择更 新次序,以便减少保护操作的数量或由保护的内容使用的区域。例如,保 护緩沖器9C01的使用示出当更新次序为9A05'、 9A03,和最后9A04,时需 要的保护操作。如前面参考图9B解释的,段9A16和9A17的原始内容在 用块9A05,的更新内容盖写它们之前被复制到保护緩冲器。在更新块9A03' 之前,以及参考图9B的公开内容,应认识到,段9A07不需要保护。因此, 需要保护的段9A08和9A09的内容复制到保护緩冲器9C01的未使用区域, 而没有复制9A07的内容。现在,转向块9A04,,应理解,段9A11、 9A13和9A15不需要显式保 护,因为它们的内容以前被复制到块9A03,和9A05'(其原始内容被隐保 护)。需要保护的块9A04中唯一的原始内容是存储在段9A14中的原始内 容,因此该内容复制到保护緩冲器9C01的未使用区域。通过比较保护緩冲器犯Ol的使用与保护緩冲器9C01的使用,有可能 看到,保护緩冲器9C01比保护緩沖器9B01包括更少的段的内容(在9C01 中五段,与9B01中的六段不同)。精通本领域的人员应认识到,由于通过 在块9A04,之前更新块9A03,而获得的三个段(9A11、 9A13和9A15)的 隐式保护,导致了被保护段的数量的减少。此外,注意,在保护所需要的所有三个块中段的内容之后,保护緩沖 器9C01的使用区域小于保护緩冲器9B01的使用区域。这再次是由于通过 选择上述更新次序(9A05'、 9A03,和接着9A04,),隐式保护较大的段。因此通常,通过选择确定的更新次序,能够减小备份操作的数量和/ 或在更新过程期间所需要的保护緩冲器空间。记住,备份操作是耗费时间 的,减少备份操作在获得较快的更新过程方面是有利的。此外,考虑到将41数据写到包括块的存储设备中的块中是耗费时间的,应认识到,减小用于 保护的空间(因此也可能是用在保护緩冲器中的块的数量)在获得较快的 更新过程方面也可能是有利的。而且,注意,更新次序影响需要将段的原始内容的副本保持在保护緩冲器中的持续时间。在图9A的实施例中,例如段9A09是更新块9A04'所 需要的。如果更新次序确定块9A03,应在块9A04,之前更新,则段9A09的 原始内容应复制到保护緩沖器中。有可能(虽然在图中没有示出)在更新 块9A03,和9A04,之间更新其它块(没有示出额外的块),同时9A04,是根 据更新次序更新的最后一个块。在这样的情况下,应认识到,需要将段9A09 的^皮保护内容保持在保护緩冲器中,直到块9A04,被更新为止,或换句话 说,几乎直到更新过程结束为止。在所有这些时间期间,段9A09的被保 护内容占用保护緩冲器的区域。然而,有可能在这这种情况下修改更新次序,在其它段之前更新块 9A04'。已经注意到,如果9A09,包括的内容与9A09的内容完全一致,则 它可用作其隐式保护,因此在这种情况下有可能在更新块9A04,之后释放 (或重新使用)由段9A09的被保护内容占用的保护緩冲器的区域。然而,甚至在9A09,的内容不同于9A09的内容时的那些情况下,仍 然有可能选择更新次序,该更新次序允许在更新其余块之前更新依赖于 9A09的原始内容来更新的块,因而允许释放或重新使用以前由9A09的原 始内容的^皮保护副本占用的保护緩冲器的区域。如上所提到的,在图9A、 9B和9C的上面描述中,假定在RAM中未 压缩的更新虚拟块盖写未压缩的原始虚拟块,以及因此为了方便起见,在 将更新次序用于RAM中的盖写之前,发生段的保护。应理解,在其它实 施方式中,段可改为在RAM中的盖写之前被保护在RAM中的另一位置, 或可在RAM中的盖写之前根本不被保护,因为原始内容可在任何情况下 从存储设备取回并解压缩,只要存储(物理)块还没有被盖写。在这些其 它实施方式中或在未压缩的更新虚拟块改为写到RAM中分离的区域的实 施方式中,可推迟非易失性存储器中段的保护,直到在将压缩内容写到物 理块中之前的任何时间。当更新到RAM的分离区域时,段的保护不是相关的,因为没有涉及RAM中的原始虚拟块。然而,在压缩的更新内容根 据更新次序盖写存储器中的原始内容之前,可能需要保护某些段,如上所 解释的。本发明因此适合于包括物理块的存储设备,其中将更新内容写到物理 块中影响存储在其中的其它内容。因此,就访问效率的考虑因素来说,有 可能将把内容写到特定的物理块中的更新命令聚集在一起,在将内容写到不同的块中之前,根据这些更新命令来操作。在图9A的实施例中,更新 过程更新块9A05,,然后是块9A04',接着是块9A03'。注意,在RAM (随机存取存储器)中没有关于存储内容的这样的限 制。RAM不包括块,因此,写到RAM中的内容不影响写在其中的其它内 容。例如,不需要在将内容的任何片段(例如,段)写到块之前删除存储 在块中的内容,类似地,不需要在一个写操作期间写块的完整内容。因此, 有可能在RAM中一段接一段地(例如根据更新命令操作)产生更新块的 副本,接着将完整的块的内容压缩并写到存储设备中的块中。此外,与一 个更新块有关的更新命令不是特别重要,虽然在一些情况下可考虑访问效 率。也就是说,更新数据包包括命令"插入9A24",接着是"将9A15复 制到9A15",,后面是"将9A17复制到9A17",、"将9A07复制到9A07", 以及"更新9A16以产生9A16,"。然而,就访问效率考虑因素来说,这等 同于"将9A17复制到9A17,",后面是"更新9A16以产生9A16,"、"将 9A15复制到9A15,"、"将9A07复制到9A07,"以及"插入9A24"。在继续进行用于确定更新次序的实施方式的描述之前,应注意,段的 "大小是由该段占用的字节的数量。然而,这是非限制性的,且 有可能通过任何其它可适用的测量标准如比特、字等来测量段的大小。此外,每个原始块都具有表示为DEP (块)的相关性值。应理解,因 为每个虚拟块相应于一个物理块(以及可确定相应于物理块的每个虚拟块 的边界,如在方法700或800中的),块B、 Bi等可等同地表示物理块或虚 拟块。然而,如上所解释的,在一些情况下,相应于特定物理块的虚拟块 在包括旧内容时的大小/边界可不同于相应于相同的特定物理块的虚拟块在包括新内容时的大小,因此为了下面容易描述,更新次序表示更新物理 块的次序。在下面描述的实施方式中,因为更新发生在内容没有被压缩时,所以 当计算等式1和2时(下面进一步地),假定段的大小表示相应于物理块 的虚拟块中未压缩段的大小。然而,在其它实施方式中,大小可表示被压 缩时的段的大小。相应于更新版本中更新(未压缩)段的块B的原始(未 压缩)段组成"原始的相应段CS"。理解了在旧块中可能需要保护的段是 原始的相应段,块的相关性值被确定为包括在其中的所有原始的相应段的总大小。最初,块的DEP值由等式1给出。等式1 其中B,是第i个块(注意,这里提到的块是更新块,即,原始内容被更新 内容盖写的块,虽然不必保护存储在没有被更新的那些块中的内容);m是块中可能需要保护的原始段的数量(m〉=0);以及CSj是Bi中相应于更新的(未压缩)段的原始段,其中j=l,2,...,m。如果m-O,则在B,中没有相应的段,因此DEP(B,)二0。例如,在图9A中,块9A04的初始相关性是DEP(9A04)=wm(9 Al 1 )+w'ze(9 Al 3)+wze(9Al 4)+wze(9 Al 5)图IO是详细示出用于确定更新次序的一个实施方式的流程图。注意, 确定由所示实施方式确定的更新次序,以便减小由被保护内容使用的区域 或空间。还应理解,更新块根据一定顺序在存储设备中被更新,总是结合 更新数据包确定更新次序(因为它是确定更新次序的更新数据包,而更新 过程根据该更新次序进行操作)。在1001中分析更新数据包,以便例如通过识别原始段和/或更新段来识别相应的段,其中原始段的内容复制到更新版本的段中,而更新段的内容根据原始段的内容来计算,等等。如上所解释的,假定在图10中表示的段是相应于物理块的虚拟块中的内容的未压缩段。注意,包括在更新版 本中的不相应的段(即,与原始版本中的段没有相应性的段),例如插入 更新版本中而与原始版本没有任何相应性的新内容不必影响更新次序。可选地,可预先识别相应的段(见例如图11 ),在此情况下可省略1001。此外,预先准备的更新数据包不是必不可少的。如果没有预先准备的 更新数据包,则有可能例如通过利用本领域中已知的微分工具,或通过任何其它方式如通过美国5,546,552、 WO2004/114130或WO2005/003963中 描述的方法来产生一个更新数据包。在1002中,被更新而用于更新版本的所有块在被表示为"块列表" 的列表中列出,其中k是列出的块的数量。对列表中的每个块i( i=l,2,...,k) (见1003 )计算DEP(BO (在1004中)。根据所示实施方式,当相关性(DEP)最低的块被首先插入"更新次 序队列,,(因此它将是第一个取出的)时,块将在"更新次序队列"中列 出。应理解,因为每个虚拟块相应于一个物理块(以及可确定相应于物理 块的每个虚拟块的边界,如在方法700或800中的),因此块列表和更新 次序队列可等同地表示物理块或虚拟块。然而,如上所解释的,在一些情 况下,相应于特定物理块的虚拟块在包括旧内容时,其大小/边界可不同于 当相应于相同的特定物理块的虚拟块包括新内容时的大小,因此为了下面 容易描述,更新次序表示更新物理块的次序。因此,在1005中初始化空的队列。然而,本实施方式是非限制性的, 也可使用其它数据结构如堆栈,如本领域中的技术人员可认识到的。根据 更新次序将^皮更新的第一个块,即,-故推到更新次序队列中的第一个块是 DEP最低的块。在1006中,选择在块列表中DEP值最小的块。注意,如果有几个(多 于一个)具有相同的最小DEP值的块,则例如根据最小的i来选择其中之 一。选定的块被表示为Bj。在1007中将Bj推到更新次序队列中,而在1008 中将它从块列表中删除。接着,在1012中,如果块列表为空(k=0),则 过程终止。已经解释了 Bj可能依赖于其它块。也就是说,在Bj中(或更具体地, 在Bj的更新版本中)可能有更新段,其相应的原始段在其它原始块中。对于仍然在块列表中列出的每个这样的其它块B。,相应于Bj的更新版本中 的段的段被识别(可能根据在块列表中列出的其它块的起始和终止地址来 识别段)及其大小从DEP(B。)中减去。为了这么做,测试仍然在块列表中列出的每个块B。(见1009和1010) 以查看Bj是否依赖于B。(即,存储在Bj中的更新内容是否包括这种段, 即该段的相应源段在块B。的旧版本中)。如果Bj依赖于所测试的块B。,则 在1011中识别依赖的段,其总的(未压缩)大小从所测试的块B。的相关 性值(DEP)中减去。也就是说,如果在Bj中有t个相应于B。中的旧段的 更新段,则等式2 '° 其中B。是在块列表中Bj依赖的块(还不在更新列表中); t是B。中相应于Bj中更新段的相应段(CS)的数量(t>=l);以及 C&是B。中相应于Bj中更新段的旧段。在DEP值可能在1011中被修 文之后,选择具有最小相关性值的下一 块(1006),且过程本身重复,直到发现块列表是空的为止(接着,应认 识到k=0 )。当终止时,更新次序队列表示确定的更新次序。应注意,根据一个实 施方式,更新数据包可重新排列以反映更新次序。可选地,有可能将更新 次序,或更具体地,它的表示,与更新数据包关联起来。更新次序的表示 可以是例如通过依照更新次序,根据目标段地址来分类和存储更新数据包 中的更新命令。应认识到,方法1000假定不需要更新块Bj所需要的块B。的任何段 CS来更新其它块。然而,在B。的任何特定段可能需要更新除了 Bj外的其它块的实施方式中,可修改等式2,使得如果所有相关的块都在B。之前,则CS的大小只从B。的DEP中减去。例如,可将阶段1010修改成询问"Bj 是更新次序中依赖于B。的最后的块吗?"。图11是示出根据本发明的一个实施方式的更新数据包的产生的流程 图。在提供该流程图的详细解释之前,应认识到,当产生更新数据包时, 发生器必须预测更新设备的行为,包括保护緩沖器的使用,因而允许例如 通过确定更新次序来提高其使用率。只有当预测到保护緩沖器被完全占用 (或不可利用)时,才用插入命令代替复制命令,例如在美国6,018,747 中进行的。在1101中,通过任何方法来获得更新数据包(组成第一更新数据包)。 它可在本地产生,或从外部源接收,例如通过通信网络、在进程间通信中、 通过从任何类别的存储设备中读取它等。为了这个目的,更新数据包(组 成第一更新数据包)可通过任何已知的方法产生,例如根据美国6,546,552、 WO 2004/114130或WO 2005/003963或通过利用已知的自身微分工具。在一个实施方式中,作为更新数据包产生的一部分,旧版本被解压縮 并装入RAM中和/或新版本#皮解压缩并装入RAM中。在该实施方式中, 例如通过4丸行方法800或在前面方法700或800的执行期间/人前面虚拟块 边界的存储开始,确定解压缩的旧内容的虚拟块和压缩的旧内容的物理块 之间的相应性,和/或类似地,确定解压缩的新内容的虚拟块和压缩的新内 容的物理块之间的相应性。例如,在一个实施方式中,4妄收的更新数据包 可以可选地包括虚拟块边界,或可选地,作为在阶段1101中执行的解压缩 的一部分,虚拟边界(例如,如方法800中定义的)可祐L存储在本地产生 的更新数据包中。如果(或者旧的未压缩内容的、或者新的未压缩内容的)虚拟块和物 理压缩块之间的相应性是已知的,则对其执行更新命令的虚拟块中的源未 压缩的段和目标未压缩的段可容易地与相应的压缩物理块关联起来,以便除非另外特别说明,假定源段和目标段是未压縮的。在1102中分析更新数据包,以便识别相应的(未压縮)段和更新次序。例如根据上面描述的图IO可确定更新次序。注意,在确定更新次序之前, 有可能分析更新数据包,以便识别其中的相应段。可选地,有可能在确定 更新次序时识別相应的段(见例如图10中的1001)。此外,在那些情况下, 当才艮据优选的更新次序预先组织更新数据包时,或当更新数据包例如与布 置优选更新次序(如列表)的信息相关时,可省略1102。为了根据本实施方式产生更新数据包,需要获得可利用来用作更新设 备中的保护緩沖器的存储区的大小(1103),因而产生用于此设备的最优化 的更新数据包。该实施方式假定根据所产生的更新数据包更新的所有存储 设备都具有可利用的存储器,其大小实质上等于所得到的大小。可选地,根据另一实施方式,可能具有用于保护緩沖器的预定大小。 根据后面这个实施方式产生的更新数据包适合于具有大小上大于或等于 预定大小的空闲区域的更新设备。例如,有可能确定例如在更新数据包发 生器中的保护緩冲器的所需要的大小(例如预定大小),并将所需要的大小存储在更新数据包中。当更新设备接收更新数据包时,或当更新过程相 应地开始操作时,更新设备可试图根据存储在更新数据包中的需要的大小 来分配保护緩冲器。如果在设备中没有用于分配保护緩冲器的足够的空闲 存储区,则有可能终止更新过程的操作,因而避免例如存储器溢出。更进一步地,有可能通知更新数据包服务器105这种情况,可能包括更新的可 用存储区的大小,因而允许更好地适合于更新设备的更新数据包的传输和 重新传输。注意,这样的更新数据包可由更新数据包发生器104预先准备 并预先存储在更新服务器中,如下所述。可选地,更新服务器可指示更新 数据包发生器104产生适合于可用大小的更新数据包等等。然而,也可允许其它实施方式。例如,有可能与更新设备通信,以获 得其可用作保护緩冲器的有效存储器(与当传输给设备不适合的更新数据 包时从设备接收信息不同),以及接着产生适合于所得到的大小的更新数 据包,并将它传送到更新设备。也允许上述实施方式的组合。精通本领域的人员应认识到,当更新设备接收到更新数据包时,更新 设备将更新数据包存储在可访问的存储区中。因此,当考虑更新设备中的 可用存储区时,还应考虑也需要将更新数据包存储在其中。类似地,确定的存储区可能是更新过程的操作等所需要的。返回到图11,为了根据本实施方式产生更新数据包,在1104中启动 指针以表示更新次序中的第一更新命令。该指针组成"命令指针"。在所 述实施方式中,更新命令涉及未压缩的内容(即,虚拟块的段)。在继续 描述图ll之前,注意,通常根据本实施方式将更新命令分成三种主要的类 别。 一种类别包括根据存储在原始版本的段中的原始内容建立的或基于其 的命令,或换句话说,这样的命令使用原始内容,以便产生更新内容。这 些命令组成"建立的命令,,或"转换命令"。例如,"复制命令"属于转换 命令的类别。转换命令因此具有"源段"(原始段,命令基于其原始内容) 和"目标段"(更新段,其更新内容通过转换更新命令来产生)。第二种类 别,"合并命令"包括将不基于原始内容的更新内容合并入更新版本的更新命令。例如,"插入命令,,将内容引入更新版本;该内容不是从原始版本获得,而是更可能从更新数据包或从任何其它源获得。第三种类别是"擦 除命令"。擦除命令擦除了包括在原始版本的段中的原始内容,而没有在 更新版本中产生其相应的段。擦除命令的例子是"删除"更新命令。注意,复制命令不是唯一的转换命令。具有源段和目标段的任何命令 都是转换命令。例如, 一个这样的转换命令可将存储在源段中的所有小写 字符转换成大写。另一转换命令可用某个值乘以存储在源段中的数字,等等。此外,被转换命令影响的内容组成"修改的内容"。当考虑源段所驻 留的块(组成"源块")和目标段所驻留的块(组成"目标块")时,应认 识到,源块的内容的至少一部分在目标块中^皮修改。也就是说,有可能源 块的那部分例如被删除,因此不形成存储在更新块中的内容的一部分。根据图11中示出的实施方式,对于更新数据包中的每个更新命令(见1105),如果在1106中确定了命令指针是否表示转换命令,且如果是表示 的话,则应检查源段的原始内容是否需要显式保护。例如参考图9A和9B,前面证实,当更新更新块中的内容时,如果根 据更新次序,相应于转换命令的目标未压缩的段的虚拟块的物理(压缩) 块在相应于转换命令的源未压缩的段的虛拟块的物理(压缩)块之前,则49说明书第41/79页 不需要原始段的内容的显式保护。因此,在1107中,检查相应于源未压缩 的段的虚拟块的物理(压缩)块是否在相应于目标未压缩的段的虚拟块的 物理(压缩)块之前,或者相应于源未压缩的段的虚拟块的物理(压缩) 块是否与相应于目标未压缩的段的虚拟块的物理(压缩)块相同,且如果是这样,则源段的内容需要保护。在保护内容之前,进一步1108中检查保护緩冲器是否有足够的可用存储区来存储源段的被保护副本。如果在保护緩冲器中有足够的可利用的空间,则在1109中,可用大小 减小了源段的大小(例如以未压缩的格式),且可选地在1110中,源段被 标记为空闲的。注意,不是将源段标记为空闲的,可选的实施方式可删除 源段的原始内容或执行任何其它可适用的操作,包括根本不执行操作。在llll中,命令指针根据更新次序前进到下一更新命令。为了这个目 的,注意,在更新数据包产生期间,不需要将原始版本更新为更新版本, 且其中的"模拟,,就足够了。因此,当根据图11的流程图操作时,更新数 据包发生器(或相应地产生更新数据包的任何其它处理器)不必根据更新 命令来操作。返回到1108,如果发现在保护緩沖器中没有足够的可用空间来存储源 段的被保护内容,则应理解,在用更新内容盖写相应的压缩段之前必须将 该内容保护在其它地方。以前参考图3B和3C注意到,该内容可例如通过 将其副本存储在更新数据包本身中被保护。在下文中假定待保护的未压缩 内容存储在更新数据包中,但可选地,待保护的压缩内容存储在更新数据 包中。因此,在1112中,由命令指针指示的更新命令用插入命令代替,并 且在1113中,源段的原始内容通过将其副本存储在更新数据包中来被保护 (见例如,美国6,018,747 )。在图11中描述的实施方式中,当可用的保护緩冲器大小太小时(见 1108),需要保护的内容存储在更新数据包中。应理解,即使源段对于保护 緩冲器中的保护太大,但是只要保护緩冲器的可用大小大于零,则其它源 段的内容(在更新次序中较远的其它转换更新命令的源段)对于其中的保 护来说足够小是可能的。可选地,在一个实施方式中,如果对1108的回答是预定的次数的"否",50则当处理时随后的转换命令时,1112直接跟在1107之后(即,假定不考 虑管源段的大小,在保护緩冲器中没有任何空间,因而在随后的重复中绕过1108到1110)。在一个实施方式中,在1107中还可检查源段是否复制到更新次序中较 前的更新虚拟块,以便可改为在更新较后的虛拟段时使用复制的段。在这 种情况下,更新命令可修改成涉及复制的段,且方法直接继续到1111 (绕 过1108到1113)。在一个实施方式中,1107可修改成也检查例如由于较早处理的转换命 令,在保护缓冲器/更新数据包中是否已经保护了源段。在一个实施方式中, 如果在保护緩沖器/更新数据包中已经保护了源段,则只要在更新期间可容 易获得源段,方法就直接继续到1111 (绕过1]08到1113)。在另一实施方 式中,不是再次保护源段,可改为存储指向被保护的源段的指针。对读者来说明显的是,根据本实施方式,可以用更新数据包为代价来 减小保护缓冲器的大小或反之亦然,例如以满足系统限制。应注意,更新数据包可以可选地包括解压缩命令,用于解压缩存储在 存储块中的压缩的原始内容。更新数据包也可以可选地包括压缩命令,用 于将更新部分压缩成存储在压缩的更新版本的块中的内容。根据本实施方式,使用更新数据包构造器和更新设备允许的压縮方 法,更新数据包可在提供到更新设备之前被压缩,如下面参考图12A和12B 描述的。在转向描述在更新设备中运行的更新过程之前,应认识到,根据一些 实施方式,可重新使用保护缓冲器,以便增加其效率,如已经参考图9A、 9B和9C提到的。换句话说,当不再需要存储在保护緩冲器中的内容时, 一些实施方式可释放由此不需要的内容使用的区域(例如,通过物理删除 该内容或通过将它标记为自由的,等等),因而允许更新过程重新使用空 闲区域,用于进一步备份在更新时需要的操作。有效地重新使用保护緩冲 器允许执行更多的保护操作,因此可减小更新数据包大小(较少的被保护 内容需要存储在其中)。在产生更新数据包期间模拟重新使用,因而允许发生器知道保护緩冲器何时是满的,以及何时在保护缓冲器中有空闲的空 间。在考虑用于产生更新数据包的实施方式之后,根据本发明的一个实施方式,描述现在转向图12A和12B,其一起示出描绘原始版本更新为其更 新版本的流程图。在图12A和12B中描绘的流程图例如可适用于在更新设 备中可操作的更新过程。应认识到,所示实施方式适合于在具有包括块的 存储设备的更新设备中操作。当更新过程开始运行时,在1201中,它获得或访问存储在存储设备 103中例如在易失性或非易失性存储器中的更新数据包。应i^识到,更新 设备可接收以前来自更新服务器105的更新数据包。可选地,更新数据包 通过任何可使用的方式装入存储设备,例如通过从便携式存储设备(例如, 软盘或光盘)复制更新数据包,或通过从互联网接收更新数据包。根据本 实施方式,更新数据包可以需要或可以不需要使用更新数据包构造器和更 新设备允许的解压缩方法来解压缩。应进一步认识到,根据本实施方式, 被访问的更新数据包有确定的更新次序。例如,如果不同于在数据包中命 令出现的次序,则该更新次序可简单地由更新数据包中更新命令的顺序确 定,或它可根据所存储的与更新数据包相关的其它信息确定,如确定用于 执行更新命令的次序的列表。根据本实施例,更新次序适合于减少保护缓 沖器在更新设备中的使用,或至少改进其中可用的保护緩冲器的利用。根 据一个实施方式,依照图10和11的流程图,可产生更新数据包并可确定 更新次序(例如,在更新数据包发生器中)。在1201中,原始的压缩版本从存储设备取回并被解压缩到RAM中。 例如通过执行图8的方法或在前面执行图7或8的方法期间从以前虚拟块 边界的存储开始,可确定解压缩的原始版本中的虚拟块和压缩的原始版本 中的物理块之间的相应性。例如在一个实施方式中,获得的更新数据包可 以可选地包括解压缩的原始版本的虚拟块边界。在任何情况下,对其执行 更新命令的虚拟块中的源未压缩的段可容易与相应的(压缩)物理块关联 起来,以便确定源未压缩的段何时以更新次序更新。在一个实施方式中,所获得的更新数据包包括新的未压缩版本的虚拟边界,例如该虚拟边界早些时候通过执行图7或8的方法被确定和存储。 在这种情况下,对其执行更新命令的虚拟块中的目标未压缩的段可容易地 与相应的(压缩)物理块联系起来,以便确定目标未压缩的段何时在更新 次序中更新。因此为了描述的简单,假定在更新数据包中接收虚拟边界。 在说明书中当描述另 一实施方式时,该假定被进一步放宽。根据本实施方式,在更新任何内容(因而有盖写需要保护的原始内容 的危险)之前,在1202中,更新过程检查在更新设备中有足够的存储设备可利用,以根据在1201中获得的更新数据包运行更新过程。根据本实施方式,如果更新数据包包括需要的保护緩沖器大小的指示,则此需要的保护緩冲器大小在1202中与在更新设备中有效的保护緩冲器大小比较, 如果有效的保护緩沖器大小不够就终止更新过程。而且,在更新任何内容之前,更新过程保护所有需要保护的原始内容。 由于在1202中执行的验证,应保证可利用的保护緩沖器足以存储需要保 护的所有数据,因此进一步的测试如"有效的保护緩冲器大小>=被保护的 段的大小"是多余的。为了允许保护,在1203中根据更新次序启动指示符(pointer)或指针 以指示第一更新命令。该指针组成"命令指针"。命令指针进一步根据更 新次序前进。而且,在1204中,启动指向保护缓沖器的指示符,组成"保护指示 符"。保护指示符指示在保护缓沖器中被保护的数据应被接着写入的位置。 注意,根据本实施方式,更新设备可例如在RAM中产生被保护内容的副 本(组成"RAM保护缓冲器"),然后,当RAM复制结束(即,它包括所 有需要保护的内容)时,将它写到非易失性存储设备中的"非易失性保护 緩冲器"(也组成"非易失性备份緩冲器")中。将存储在RAM保护緩沖 器中的被保护内容写到非易失性备份緩沖器中称为"备份块存储操作"。 当非易失性存储设备是包括块的存储设备(与RAM不同)时,该方法比 将每个被保护段的内容直接写到非易失性保护緩冲器中更有效。为了这个 目的,应认识到,在这种情况下,保护指示符指示在RAM保护緩沖器中 被保护的数据应被接着写入的位置。然而注意,在下文中,除非特别说明,该描述表示"保护緩冲器",而没有在RAM和非易失性保护緩沖器之间进行区分。注意,"RAM保护緩沖器"只是"易失性保护緩冲器"的一个例子。现在检查在保护緩冲器中是否需要保护虚拟块中的任何段。对于每个 更新命令(见1205 ),更新过程检查命令指针是否指示转换更新命令(在 1206中)。应认识到,不是转换更新命令的更新命令不需要保护,因此, 在1207中,命令指针可前进到下一个更新命令。然而,如果在1206中, 更新过程确定更新命令是转换命令,则它在1208中进一步检查相应于包的虚拟块的物理块之前,还是与相应于包括目标段的虚拟块的物理块相 同。此外,应理解,如果相应于包括目标,殳的虚拟块的物理块在相应于包 括命令的源段的虚拟块的物理块之前,则不需要保护,且更新过程可使命 令指针前进(在1207中)。然而,如果相应于包括命令的源段的虚拟块的应于包括目标段的虚拟块的物理块相同,则需要保护。因此,在1209中, 更新过程将源段复制到保护緩冲器,即,到保护指示符,而在1210中, 更新过程使保护指更新过程前进了源段大小的距离。在源段复制到在更新 次序中较前的更新虚拟块且更新命令被修改以从复制的段中将目标段复 制到更新块中的实施方式中,保护也不是必须的。在源段已经^皮保护在保 护緩冲器/更新数据包中(例如因为已经对源段执行转换命令)的实施方式 中,例如如果在更新过程中可用容易地得到原段,则相同源段的保护可能 也不是必须的。在另一实施方式中,不是再次保护源段,可改为存储指向 被保护的源段的指示符。如上所述,为了筒单起见,假定被保护的段是未压缩的,而在其它实 施方式中,可压缩和/或另外地处理该段。如前所迷,到目前为止参考1206、 1207、 1208、 1209和1210所述的 过程重复(见1205 ),直到更新过程保护所有需要保护的段为止。当此过 程结束之后,在保护緩冲器中保护需要保护的内容。用于在保护缓沖器中 保护被保护内容的保护操作的数量表示为p。然而注意,如果保护缓沖器是RAM保护緩冲器,则在开始更新原始版本的原始内容之前,其内容应 存储在非易失性保护緩冲器中,因而盖写原始内容的至少一部分,因而万 一过程被异常中断并恢复,也给更新过程提供了可靠性。非易失性保护緩冲器中的存储可发生在例如1205之后和前进到1221之前。在保护緩冲器中保护内容之后,更新过程可开始更新最初存储在存储 设备中的原始内容,因而产生更新版本。为了这么做,应认识到,以前在 保护缓沖器中保护的原始内容应从其读取,而不是从原始版本读取。换句 话说,应恢复这样的内容。因此,在1211中,启动组成"恢复指示符"的 新指示符,其最初指向保护缓冲器的开始。在1212中,命令指示符被重 新设置成指示更新数据包中的第一个更新命令。^^定在所示实施方式中,相应于压缩的物理块的虛拟更新的未压缩块 的虚拟边界是已知的,且因此每个更新的虚拟块可被有效和独立地压缩到 物理块中。以前解释到,所示实施方式适合于包括块的存储设备,因而在RAM 中(或通常在"易失性更新緩冲器"中)产生更新的虛拟块的副本,并接 着将整个虚拟块的内容压缩到非易失性存储i殳备中相应的物理块。将存储 在易失性更新緩冲器中的内容压缩到非易失性存储设备中的物理块中的 操作称为"更新块存储操作"。因此,在1213中启动组成"块指针"的其 它指针,以根据更新次序指示第一个更新块。在下文中,更新块存储操作和备份块存储操作的数量表示为m。然而 这是非限制性的,且m表示块存储操作的总数,其包括将内容存储在非易 失性存储设备中的块中的每个操作。如果在1214中确定命令指针指示不是转换更新命令的更新命令,则 应理解,该更新命令不是基于最初作为原始版本的一部分的内容,即,它 不基于存储在原始版本或保护缓沖器中的内容,因此在1215中,更新过 程可根据命令来操作,因而在RAM中产生目标段的副本。不是转换命令 的更新命令可以可选地包括在1112中插入在更新数据包中的插入命令。返回到1214,如果更新过程确定命令指针指示转换命令,则它进一步否在相应于包括目标段的虚拟块的物理块之前,或与相应于包括目标段的 虚拟块的物理块相同。如上面在所示实施方式中提到的,分析与虚拟块中 的未压缩段以及涉及虚拟块中的未压缩段的命令有关。记住,对于包括在 相应于物理块的虚拟块中的源段来说不需要保护,根据更新次序所述物理块在相应于目标段的虚拟块的物理块后面,应认识到,更新过程在1208 和1209中不保护此更新命令的源段,保持原始内容存储在原始段中,而 不是将它复制到保护緩沖器中。因此,在1217中,更新过程从更新命令 的源段读取源内容,而在1215中,更新过程根据更新命令来操作,因而 在RAM中产生目标段的副本。然而,如果在1216中,更新过程确定相应于源段的虚拟块的物理块 在相应于目标段的虚拟块的物理块之前或与相应于目标段的虚拟块的物 理块相同,则它应从保护緩冲器中读取原始内容(或其副本)。因此,在 1218中,更新过程从恢复指示符指示的地址读取源内容,在1219中,恢 复指示符前进了源段大小的距离,因而指向下一个被保护的段,以及在 1215中,更新过程根据更新命令来操作,因而在RAM中产生目标段的副 本。无论如何,在1215 (执行更新命令,在RAM中产生目标段)之后, 应认识到,如果在1215中,更新过程将更新块的最后一个目标段的内容 写到RAM中,则它可将存储在RAM中的内容压缩到更新块中。因此, 在1220中,更新过程检查命令指针是否指示由块指针指示的块中的最后 一个更新命令,如果是这样,则在1221中,目前存储在RAM中的更新虚 拟块的未压缩内容被压缩到存储设备中的更新物理块中,而在1222中, 块指针前进到下一个更新块。可选地,在一些情况下,更新虚拟块的内容 首先纟皮压缩到(物理块大小的)RAM中,接着复制到存储器。在可选的 实施方式中,虚拟块中每个更新段可被分别地压缩到RAM中,且当在RAM 中达到物理块的正确大小时,压縮块复制到存储器。然而注意,如果在1220中,更新过程确定更新命令不是更新块中的 最后一个(如块指针所指示的),则命令指针前进(见1223 )而没有复制RAM存储的内容以及没有使块指针前进。进一步注意,通过使命令指针 前进(在1223中)而超过更新虚拟块中最后一个命令,它变成指示下一 更新虚拟块中的第一个更新命令。因此,如果根据更新次序,前进的命令 指针在最后一个更新命令之前或与最后一个更新命令相同(见1224),则 更新过程可根据此更新命令来操作,因而产生更新内容(见1214、 1215、 1216等)。可选地,当更新版本存储在存储设备中时,如果在1224中,更 新过程确定它移动而超过最后一个更新命令,则它可终止。在另一实施方式中,不是如上所述分别地压缩每个块,其中分别地压 缩每个块是假定虚拟边界已知或有效的压缩不重要,而是阶段1221改为 在1224后面,即,例如使用方法700来实现逐块压缩。在另一实施方式中,假定原始版本被解压缩到RAM中,以及更新的 未压缩版本写到RAM中不同的区域(即,没有盖写RAM中的原始版本)。 在本实施方式中,在阶段1207之前(即,在前进到下一更新命令之前), 可执行当前的更新命令,因而在RAM的不同的区域中建立完全更新的未 压缩版本。在本实施方式中,可省略阶段1211和1212。在阶段1213中, 块指针指向RAM中相应于更新次序中第一个物理块的更新虚拟块。在本 实施方式中可省略阶段1214到1220,因为原始版本仍然在RAM中,因 此在更新期间可访问所有的原始段。阶段1221和1222紧接在阶段1213 后面,即,每个虚拟块的压缩和写到存储器以更新顺序出现(假定相应于 压缩的物理块的更新的未压缩虚拟块的虛拟边界是已知的)。阶段1221和 1222重复,直到达到更新顺序中最后一个块。省略了阶段1223和1224。在其它实施方式中,假定从更新数据包或从执行方法1200之前,更 新版本中虚拟块的虚拟边界不是已知的。还假定更新数据包中的更新命令 与更新版本中块的虚拟边界无关。例如更新数据包可指定在RAM中应为 更新的未压缩版本分配的地址范围,且命令可与该范围内的地址有关(例 如相对于范围的下边界或上边界)。在这些实施方式中,更新命令不以特 定的顺序执行,在RAM中建立更新的未压缩版本(没有盖写旧的未压缩 版本)。然后可例如使用方法700将未压缩的更新版本压缩在RAM中,其 中RAM中相同大小的区域代替每个物理块。 一旦完成压缩,未压缩的更新版本的虚拟块边界就是已知的。在这些实施方式的一个中,更新版本的 这些虚拟边界存储在非易失性存储器中,例如在保护緩冲器中。接着例如 以更新次序(或以在方法1100中遵循的任何次序)分析更新命令,以便保护需要保护在保护緩冲器中的任何源段,见阶段1203、 1204、 1206、 1208、 1209、 1210、 1207和1205的上面描述。接着可将压缩的更新版本以更新 顺序写到存储器(阶段1221 )。在一些实施方式中,除了或代替恢复指示符,还使用用于在保护缓沖 器中定位被保护内容的另 一媒介,例如在保护缓冲器中被保护段的位置和 源段/块和/或目标段/块之间的交叉参照表。在这些实施方式中,不需要完 整地处理每个块,即,在处理另一个块之前更新、使恢复指针前进、压缩 和写到存储器,以便如果被中断,则恢复指针将指向保护緩冲器中的正确 段。进一步参考图12A和12B的流程图以及进一步参考图9A、 9B和9C 的实施例,应认识到,在一个实施方式中,^皮保护内容的大小(恰好在将 它存储在非易失性保护缓冲器之前)可包括比在更新版本中修改的原始版 本的块的数量n(n〉1)少的块。也就是说,在本实施方式中,需要少于n 个的操作,以便将被保护内容存储在非易失性保护缓沖器中。如果指定块 存储操作的数量为m,则应认识到,在本实施方式中2<=m<2n。进一步注意,重新使用保护緩冲器可能是有利的。在产生更新数据包 期间才莫拟的重新使用(参考图11)反映图12A和12B中描述的更新过程 的行为。因此,如果利用重新使用,则有可能进一步到1221,检查刚刚存 储的更新的压缩内容是否使用被保护内容,且如果是这样,只要被保护内 容不是更新其它的段所需要(相应于相同的物理块或相应于根据更新次序 按顺序后面的其它物理块),就可将该被保护内容标记为空闲。在本实施 方式中,当存储在非易失性保护緩沖器的一个块中的所有被保护内容^皮标 记为空闲时,可删除该被保护内容并可重新使用块。如上所述,在一些情况下,用于新版本的压缩算法和/或压缩比不必与 用于原始版本的压缩算法和/或压缩比相同。方法1200充分考虑这个可能 性,因为对用在新版本中的压缩与用在原始版本中的压缩是否相同或不同58没有限制。应进一步理解,在一些实施方式中,可能没有未压缩内容的更 新,而仅有使用不同压缩算法和/或压縮比的原始内容的解压缩。在这些实 施方式中,更新数据包可包括使用不同压缩算法和/或压缩比来重新压缩原 始内容的命令。因为在这些实施方式中没有转换命令,没有源段需要保护, 因此在这些实施方式中可省略方法1100中保护緩冲器中段保护的模拟以 及用插入命令对更新命令的替换。类似地,在这些实施方式中可省略方法 1200中在保护緩冲器中源段的实际保护。原位更新因此应被理解为包括用 新("更新")版本原位更新原始版本的实施方式,其中新版本根据与原始 版本不同的压缩算法和/或压缩比来压缩,而不管未压缩的原始版本中的内 容与未压缩的更新版本中的内容是否相同或不同。现在假定当根据图12更新块时,过程由于任何原因而异常中断,且 RAM中的内容被擦除。在这种情况下,不擦除(非易失性)存储设备中 的物理块内容、更新数据包和保护緩沖器。然而根据上面的讨论,读者应 理解, 一旦对至少一个块执行阶段1221或等效地到存储器的写操作,则 由于已经发生的更新,最初包括旧(压缩)内容的一些物理块就在异常中 断的时刻改为包括新(压缩)内容。在一些实施方式中,因为需要保护的 段在阶段1209中被保护,因此更新可以根据更新次序可靠地继续处理将 被更新的下一块。例如在Meller等人的美国公布的申请号20050216530中 可确定重新开始的位置,该申请在这里通过引用被并入。在这些实施方式 的一个中,假定相应于物理块的更新虚拟块的虚拟边界是已知的,则不必 进一步处理包括新内容的物理块。因此,在本实施方式中,可例如根据方 法800将还没有更新(即,包括旧内容)的所有物理块解压缩到RAM中, 接着该方法可继续进行阶段1213,其中块指针指向在更新次序中还没有被 更新的第一个块。在这些实施方式的一些中,1218的恢复指示符可以是不 相关的,且例如使用交叉参照表可取回来自保护緩冲器的内容。虽然参考图11和12描述的实施方式假定,与转换命令有关的源段可 在保护緩沖器和/或更新数据包中#:潜在地保护,但是应理解,在其它实施 方式中,可另外或代替地保护与转换命令有关的其它数据。例如在这些其 它实施方式的一个中,代替或除了源段外,还可潜在地保护目标段。作为另一例子,在这些其它实施方式的一个中,可保护源段和/或目标段的经处 理的形式,其中该处理可以与或不与命令指定的转换有关。到现在为止描述的实施方式假定每个虚拟块被独立地压缩到物理块 中。因此在本实施方式中,每个物理块可被独立地解压缩到相应的虚拟块 中。在理解了单个块的实施方式之后,应注意,有时每次对多个块执行压 缩(即, 一个块的压缩可能依赖于其它块的压缩)。例如,如果原始和更 新版本被预先准备好并预先压缩,则接着被传送到用于更新数据包产生的 更新数据包发生器(同时更新数据包具有关于压缩次序和压缩算法的信 息)。因此下面描述称为"多块实施方式"的可选实施方式。在多块实施方式中,为了能够成功地解压缩存储在包括压缩的原始版 本的一部分的某些块中的确定的压缩内容,有时需要解压缩存储在其它块 中的压缩内容,所述确定的压缩内容依赖于所述其它块。例如,在一些压缩方法(例如由在下文中称为'zip,的zip工具l吏用的一个方法)中,如 果内容片段在内容中重新出现多次,则一次出现(appearance)保持在压 缩版本的一个块中,而其它出现用所述一次出现的指示符或"压缩参考 (compression reference )"代替,因而防止重复该片段的出现(可进一步 压缩指针,等等)。该实施例在图13中示出,其中1301表示未压缩的版 本。未压缩版本1301包括几个虚拟块,其中示出1302、 1303和1304。虚 拟块1302包括内容片段1305。虚拟块1303包括与1305的内容完全一致 的两个内容片段1306和1307。虚拟块1304还包括片段1308,其内容与 1305的内容完全一致。版本1309是相应于未压缩版本1301的压缩版本。 压缩版本1309以横跨至少三个块1310、 1311和1312的版本存储在存储设 备中,其中块1310、 1311和1312分别相应于虚拟块1302、 1303和1304。 片段1305的内容复制为压缩版本,产生片段1313。注意,可使用其它压 缩方法来压缩该片段1313,但为了描述的简单起见在图13的说明中忽略 了这个可能性。块1311包括都表示片段1313的两个压缩参考1314和1315,而块1312 也包括一个这样的压缩参考1316。压缩参考1314、 1315和1316分别代替60片段1306、 1307和1308。如果压缩参考的大小小于它代替的相应片段的 大小,则应认识到,这样的压缩参考的使用减小了存储在版本中的内容的 大小,或换句话说,它压缩内容。进一步注意,压缩参考1314、 1315和 1316可涉及相应于1313的未压缩片^殳1305、以及^f壬何其它相应的未压缩 或压缩片段。也就是说,图13示出块之间的压缩相关性。为了解压缩包括这样的 压缩参考的块的内容,需要解压缩包括压缩的一次出现或至少该内容的一 部分的块的内容,其中该部分包括所述一次出现。例如,为了解压缩块1312 的内容,必须解压缩片段1313的内容。以前注意到,与图13的筒化实施 例不同,其中1313的内容出现好像它是未压缩的一样,1313的内容通常 进一步^f皮压缩,因此它必须在可解压缩块1311和1312之前,即,在1313 的未压缩内容复制到块1311和312之前被解压缩。如果存储在一个块中的内容(包括所述一次出现)在解压缩其它出现 之前(即,在解压缩存储指示器(indicator)的其它块的内容之前)被更 新,则可能结果是不可能解压缩其它块。在本例中,在更新了 1313的内 容之后,就不能够复制1313的原始内容(或1305的内容)以代替指示器 1314、 1315和1316。根据本发明的实施方式,克服这种限制的一个方法是,在用更新内容 盖写1313的内容之前,将1313的内容复制到例如备份存储器。接着,当 解压缩块1311和1312时,1313的原始内容可从备份存储器而不是从1313 复制。此外或代替地,解压缩特定的块所需的计算可能需要被保护。其中计 算的例子包括状态寄存器的内容、在解压缩特定的块之前的解压缩期间 计算的计数器和/或表格、被产生的并被写到以前压缩的块(多个块)中的 一个或更多表格,所述压缩块也是解压缩特定的块所需要的,例如Zlib或 Gzip压缩方法的霍夫曼树。读者应理解,在一些实施方式中,除了图13中示出的压缩相关性以 外,还可能有其更新需要修改的段的原始内容的段,如上所讨论的。例如 在一个实施方式中,除了图13中示出的压缩相关性以外,还可能有其更61新需要例如在图9中的原始内容的段。因此通常,当更新将被压缩和将盖写原始的压缩内容的段时,如果当 前块中的其它段的更新需要或相应于根据更新次序较远的物理块的其它 虚拟块的更新需要(见例如图10、 11和12),如果更新次序中较远的原始 物理块的解压缩需要,和/或如果更新次序中较前的新(更新)物理块的解 压缩需要,则原始内容的至少一部分(例如当未压缩时)需要被保护(例 如在备份存储器中)。如上所解释的,也可能或代替地需要保护其它计算。以前参考图13注意到,为了解压缩包括压缩参考的块的内容,需要 解压缩包括参考的内容片段的块的内容。见例如图13中的块1311,当将 版本1309更新为图中没有示出的另一版本时,为了解压缩块1311,块1310 也必须被解压缩。然而,假定图13中的块与旧版本有关,如果在更新次序中块1310在 块1311之前,则参考的内容片段(存储在块1310中的)将在更新过程到 达块1311之前更新是可能的。如果是这种情况,解压缩存储在块1311中 的内容可能变得不可能。因此,存储在参考片段中的内容应被保护在例如 备4分存储器中,因而即使最初包括在其中的压缩-参考已经^^皮超过并因而是 不可利用的内容片段时,也允许块1311的解压缩。通常,当更新存储在原始块(更新块)中的压缩内容以及压缩的原始 内容包括根据更新次序在更新块之前的块的压缩参考(组成"后向参考") 时,向后参考的内容片段(压缩的或没有被压缩的)应被保护在例如备份 存储器中。通过保护非易失性存储器(例如备份存储器)中的内容,也确 保当 一些块包括压缩的更新内容而其它块包括压缩的原始内容时,如果更 新过程在终止之前失败可重新开始更新过程。也就是说,在这种情况下保 护提供了可靠性。此外,应考虑,用于原始块的压缩-参考可参考在更新次序中对更新块 较远的内容片段(组成"后向参考")。如前面提到的,应认识到,在解压 缩参考的内容片段之前,更新块的原始内容不能被解压缩且确定地不能被 更新。因此,如果更新过程在更新更新块之前失败,则确保前向参考的内 容片段还没有被盖写,因而有可能再次解压缩前向参考的内容片段。因此,不需要将前向参考的内容片段保护在非易失性存储器(例如备份存储器)中,以及因此将它们解压缩在RAM (组成RAM-存储器)中就足够了。根据本发明的一个实施方式,在更新内容和用更新的压缩内容盖写原 始的压缩内容之前,在更新过程开始时前向参考的原始内容片段可存储在 RAM存储器中。应认识到,有可能解压缩存储在块中的内容,其中前向 参考的内容片段存在于这些块之间,接着在RAM存储器中只存储由前向 参考的片段使用的内容。以类似的方式,可在更新开始之前将所有后向参 考的内容片段保护在备份存储器中。应认识到,如果所有前向参考的原始内容片段都存储在RAM存储器 中以及所有后向参考的内容片段都被保护在备份存储器中,则可根据任何 需要的次序继续进行更新,所述任何需要的次序包括不同于压缩次序的更 新次序,因为前向参考的内容片段备份在RAM存储器中而后向参考的内 容片段被保护在备份存储器中。进一步解释到,当利用线性压缩时,压缩参考通常指根据压缩次序在 压缩-参考之前的内容片段。然而,可能出现例外。例如,霍夫曼编码是一 种线性压缩,其中精通本领域的人员应认识到,霍夫曼编码压缩的版本包 括霍夫曼表。然而,这个例子是非限制性的,也可存储其它对象,例如不 同类别的目录等。在当目录和其它对象存储在原始的压缩版本的末尾(再 次根据更新次序)时的那些情况下,例如通过将专用的更新命令插入更新 数据包中可在备份存储器中保护这些对象。类似地,应认识到,如果更新的(新的)压缩内容参考在更新顺序中 处于较后面的内容,则更新块的新内容不能在解压缩参考的新内容片段之 前被解压缩。然而,如果更新过程在参考的内容和被参考的内容的更新之 间失败,则除非已经保护被参考的内容,否则新的压缩内容的解压缩是不 可4亍的。现在详述用于更新内容的非限制性方法的实施方式,其中使用多块压 缩来压缩旧的压缩版本和/或新的压缩版本,因此在块之间可能有压缩相关 性。为了限制说明书的长度,当描述相同时,下面为多块实施方式介绍的 所有流程图保留上面用于逐块实施方式中的阶段的引用,且读者参考上面 的那些阶段的描述,而不重复这里的描述。图14示出根据本发明的实施方式的多块压缩的流程图。在方法1400的阶段1402中,压缩内容指针(跟踪压缩内容)被置于压缩内容的起始 地址,即,第一个物理块的开始,未压缩内容根据与本实施方式的压缩方 案相关的压缩次序^皮压缩到该物理块。应注意,在一些实施方式中,用于 压缩内容的原始版本的压缩算法和/或压缩比可不同于用于压缩内容的新 版本的压缩算法和/或压缩比,其中新版本原位更新原始版本。还要注意, 虽然这里使用术语物理块,但是内容被压缩到RAM中与物理块相等大小 的区域是可能的。在阶段1404中,未压缩内容指针(跟踪未压缩内容) 被置于未压缩内容的起始地址,即,其内容将被压缩的第一个虚拟块的开 始。在阶段1406中,虚拟块的下边界被限定和/或记录为未压缩内容指针 的位置。在阶段1408中,使用任何适当的压缩方案来压缩来自虚拟块的 内容的单元,例如一个字节。接着增加压缩内容指针和未压縮内容指针, 以分别^皮定位在压缩的内容单元和相应的未压缩的内容单元的终止地址 处(阶段1410)。如果压缩内容指针不在物理块的末尾且未压缩内容指针 不在未压缩内容的末尾(阶段1412),则压缩另一内容单元(阶段1408 ) 并相应地增加压缩内容指针和未压缩内容指针(阶段1410)。在压缩内容指针到达物理块的末尾或未压缩内容指针到达未压缩内 容的末尾之后(阶段1412 ),接着在阶段1414中,虚拟块的上边界被限定 和/或记录为未压缩内容指针的位置。在阶段1416中可更新一个或更多解 压缩记录,如下面更详细讨论的。如果到达未压缩内容的末尾(1418), 则方法结束。否则增加压缩内容指针和未压缩内容指针(阶段1420),以 便表示下一个块。对下一个块的过程接着重复到阶段1406,直到到达最后 一个块且过程结束(阶段1418中的"是")。因此,通过遵循图14的方法或类似的方法,可在压缩期间限定和/或 记录相应于每个物理块的每个虚拟块的边界。阶段1416根据旧版本或新版本是否被压缩来变化。在任一情况下,解压缩记录允许确定最佳的更新次序并保护解压缩所需要的段。如上所 述,期望更新在更新次序中较后面的内容,需要该内容以其原始形式来解 压缩其它原始内容。相反,期望更新在更新次序中较前面的内容,需要该 内容以其更新形式来解压缩其它更新内容。因此,为了维持上面研究的大 小相关性的方法,其中具有较大相关性的块在更新次序中稍后被更新,对 于旧版本来说,解压缩其它块所需要的来自特定块的内容的大小被用于确 定该特定块的大小相关性。然而,对于新版本来说,用于解压缩特定块的 来自其它块的内容的大小影响该特定块的大小相关性。
因此,假定旧版本被压缩,则对于每个块来说,保存解压缩其它块所 需要的来自该块的内容的解压縮记录。例如在一个实施方式中,用于特定 块的记录可包括另一块所需要的每个内容片段、该内容片段的大小(以任 何预定的单位)以及需要内容片段的块数量。继续本实施例,用于每个块
的记录可包括一个或更多元组(tuple ),每个元组的形式为 <需要用于解 压缩的内容的块、所需内容、所需内容的大小>。在一个实施方式中,如 果需要内容片段来解压缩多个块,则DR记录只包括用于该内容片段的一 个元组,该元组包括需要内容片段的块的阵列。例如形式可为<需要用于
解压缩的内容的块1.....需要用于解压缩的内容的块n、所需内容、所
需内容的大小>。该实施方式假定被保护的内容片段可被取回多于一次, 用于解压缩在更新次序中较后面的原始块。
然而,假定新版本被压缩,接着对于每个特定块,保存解压缩特定块 所需要的来自其它块的内容的解压缩记录。例如在一个实施方式中,用于 特定块的记录可包括所需要的来自另 一块的每个内容片段、内容片段的大 小(以任何预定的单位)以及提供内容片段的块数量。继续本实施例,用 于每个块的记录可包括一个或更多元组,每个元组的形式为 <提供解压
缩所需要的内容的块、所需内容、所需内容的大小〉。
在一个实施方式中,相同的记录可适用于一个块,而不管该块是否包 括原始和更新内容,以及在本实施方式中,元组可包括内容是否与原始或 更新内容相关的二进制表示。因此,根据该二进制表示,可理解,元组中 的内容是否是解压缩另一块(原始)所需要的、或解压缩与记录(更新)相关的块所需要的。
在一个实施方式中,任何元组中的内容可以是以未压缩的或压缩的形 式,这取决于解压缩所需要的内容的形式,内容的大小反映以该形式的内 容的大小。
在另一实施方式中,包括在元组中的内容是未压縮的内容,且记录的 大小是未压缩内容的大小,因为假定保护缓沖器或更新数据包存储未压缩 内容中的任何被保护内容。在其它实施方式中,例如其中被保护内容在存 储在保护緩冲器或更新数据包中之前被压缩,元组可记录压缩内容和压缩 内容的大小。
解压缩记录的格式和内容可根据实施方式来变化。例如,在一个实施 方式中,可不记录大小。
解压缩所需要的内容可为块中的实际内容(即,作为块的一部分的内 容,而不考虑压缩算法如何)、在压縮期间添加到块的内容例如存储的表 格或任何其它计算、或没有真正存储在任何块中例如状态寄存器、存储器 计数器、工作表格的内容、或任何其它计算。为了解压缩记录的目的,假 定在一个实施方式中,任何没有真正存储在任何块中的内容被"虚拟地" 存储在块中,该块在压缩顺序中紧接地在需要用于解压缩的内容的块之 前。除非另外说明,下面在解压缩记录中列出的实际内容、添加的内容、 或虚拟地存储的内容的处理中没有区别。
除了图13所示的压缩参考例子之外,解压缩所需要的块中实际内容 的另一例子是与命令有关的内容,该命令的相关内容越过块边界。例如假 定存在合并(incorporating)命令,其相关内容延伸到后面的块(多个块) 中。在这种情况下,与该命令有关的前面块(多个块)中的内容可能是解 压缩与该命令有关的后面块(多个块)中内容所需要的。
此外,在压缩内容越过块边界的这样的情况下,为了准确起见,被"越 过的,,内容压缩的未压缩内容与后面虚拟块的一部分有关,因而正好在此 未压缩内容的片段之前设定边界。
读者应理解,在压缩每个块之后的阶段1416可更新用于该块的解压缩记录和/或用于其它块的解压缩记录。
在一些实施方式中,例如如果解压缩记录是在压缩内容的解压缩期间 准备的且在那个时间之前并不需要(见下面对解压缩记录的使用),则可 省略阶段1416。
在一个实施方式中,解压缩记录存储在分离的存储区,例如在RAM
中的表格中。
在一些实施方式中,解压缩记录还可存储在非易失性存储器中或更新
数据包中。在其它实施方式中,解压缩记录保留在RAM中,并可在处理 以后被盖写(例如,使用方法1700或1800 )。
应理解,因为每个虚拟块相应于一个物理块(以及可确定相应于物理 块的每个虚拟块的边界,例如在下面的方法1400或1500中),因此解压 缩记录可等同地与虚拟块或物理块相关/表示虛拟块或物理块。然而,因为 虚拟块当包括相应于特定物理块的旧内容时的大小/边界可能在一些情况 下不同于虛拟块包4舌相应于相同的特定物理块的新内容时的大小/边界,为 了简单起见,解压缩记录被处理为与物理块相关/表示物理块。如上解释的 解压缩记录中的内容和/或大小可以如上解释的未压缩和/或压缩格式。
解压缩记录还可以或可选地在多块解压缩期间确定。多块解压缩的一 个例子在图15中示出。假定物理块的解压缩根据解压缩次序出现,该解 压缩次序取决于所使用的解压缩方法。
在所示实施方式中,例如在方法800中,解压缩遵循与压缩次序相同 的次序继续进行物理块的解压缩。然而,每当物理块被解压缩时,在阶段 1515中,更新需要被更新的任何解压缩记录,其中上面在方法1400的阶 段1416中解释了解压缩记录。
在一些实施方式中,例如如果解压缩记录或等效物在压缩内容的压缩 期间已经被准备并在解压缩期间可访问,则可省略阶段1515。例如,在这 些实施方式的一些中,解压缩记录可存储在非易失性存储器中或更新数据 包中,且在方法1500的解压缩期间,解压缩记录可装入分别的存储区, 例如RAM中的表格。既然已经参考图13理解了多块解压缩和压缩,应理解,如果原始块
1310在原始块1311和1312之前更新,则会造成困难,除非段1313的内 容存储在其它地方(例如,以任何适当的形式在保护緩冲器中或在更新数 据包中)。因此,如果存储器的减小是期望的特征,则当确定更新次序时 应考虑块之间的解压缩相关性。
然而,在很多情况下,除了例如通过图13所示的解压缩相关性以外, 还有例如图9A所示的更新相关性。因此,为了提供可最小化存储空间和/ 或备份操作的更新次序,提供了一种方法,该方法根据实施方式可潜在地 考虑解压缩相关性和/或更新相关性。读者应理解,在一些情况下,例如如 果存储器大小不是与确定更新次序的计算复杂性 一样重要的因素,则可能 期望忽略解压缩相关性和/或更新相关性,并且不去试图确定最佳更新次 序。
然而通常,期望通过选择确定的更新次序来减少在更新过程期间所需 要的备份操作的数量和/或保护緩冲器。记住,备份操作是耗费时间的,减 少备份操作在实现较快的更新过程方面是有利的。此外,考虑到将数据写 到包括块的存储设备中的块中是耗费时间的,应认识到,减小用于保护的 空间(以及因此也可能减少在保护緩沖器中使用的块的数量)在实现较快 的更新过程方面是有利的。
在继续进行用于确定更新次序的实施方式的描述之前,应注意,段的 "大小"是被该段占用的字节的数量。然而,这是非限制性的,且通过任 何其它可适用的测量单位如比特、字等来测量段的大小是可能的。
此外,每个块都有表示为DEP (块)的相关性值。应理解,因为每个 虚拟块相应于一个物理块(以及可确定每个相应于物理块的虚拟块的边 界,例如在方法1400或1500中),块B、 Bi可等同地表示虚拟块或物理块。 然而,因为虚拟块当包括相应于特定物理块的旧内容时的大小/边界可能在
小/边界,为了简单起见,更新次序指更新物理块的次序。
相应于更新版本中的更新(未压缩)段的块B的原始(未压缩)段组 成"原始的相应段CS"。假定CS是未压缩的,因为本实施方式假定更新发生在内容是未压缩的时,因此^^定CS的大小表示未压缩的大小。然而, 在其它实施方式中,大小可表示当CS被压缩时的大小。解压缩其它原始
块所需要的原始块B的段或解压缩紧接在块B之后的块所需要的工作计算 结果组成"旧的解压缩段DSoW。需要解压缩更新块B的段或工作计算结 果组成"新的解压缩段DSwew"。假定每个DSoW或DS"ew的形式(压缩 或未压缩)与当该DSo/t/或DSwew在包括该DSo/t/或DS"ew的解压缩记 录中被列为需要的内容时的形式相同,其中在DR中列出的需要的内容的 形式可根据如上解释的实施方式变化。
因此,最初,块的DEP值由下列等式给出<formula>formula see original document page 69</formula>
等式3
其中
Bi是第i个块(注意,这里提到的块是更新块,即,原始内容由更新 内容盖写的块,同时不需保护存储在没有被更新的块中的内容);
m是可能需要保护的块中的原始段的数量(m>=0 );
CSj是Bi中相应于更新段的原始段,其中j=l,2,...,m(m>0,这种段的 数量);
DSoldr是在解压缩的B,中或压缩的B,中的段,或者是用于Bw (压缩 顺序中的下一块)的解压缩的工作计算结果(例如存储器计数器或工作压 缩算法的表格),其中其它块(多个块)在被解压缩时表示所述段,同时 Bi包括旧内容。注意,r=l,2,...,s (s〉0,这种段/结果的数量)。
DSneWu是任何段(在压缩或未压缩的块中)或工作计算结果,该工作 计算结果是解压缩包括新内容时的B,所需要的,其中u=l,2,...,v(v>0,这 种^/结果的数量)。
例如,假定图9A和图13的相关性以及原始块9A04与原始块1310 相同,则块9A04/1310的最初相关性为
D五P(9 A04/1310)= ze(9 Al 1 )+咖(9Al 3)+虫e(9Al 4)+咖(9 Al 5)+应注意,根据在压缩和/或解压缩期间产生的解压缩记录,可容易确定 用于特定块的每个DSold和DSnew的大小,如上面参考图14或15讨论 的。例如,如果包括所需要的内容的大小,连同在解压缩记录中的需要的 内容,则可在DEP的计算中使用记录的大小。作为另一例子,如果记录在 解压缩记录中的需要的内容的大小没有包括在解压缩记录中,则可在DEP 的计算期间计算所需要的内容的大小。图16示出根据本发明的实施方式用于确定多块压缩的更新次序的实 施方式。在1601中,分析预先准备的更新数据包,以便识别如上定义的相应 段。为了筒单起见,假定在图16中表示的相应段CS是内容的未压缩段。注意,包括在更新版本中的不相应的段(即,与原始版本中的段没有 相应性的段),例如插入更新版本中而与原始版本没有任何相应性的新内 容不必影响更新次序。可选地,可预先识别相应的段(见例如图17),其 中可忽略框1601。此外,预先准备的更新数据包不是必不可少的。如果没 有预先准备的更新数据包,则有可能例如通过利用本领域中已知的微分工 具,或通过任何其它方式如通过美国6,546,552、 WO2004/114130或 WO2005/003963中描述的方法来产生一个。此外,还可识别如上关于等式3定义的旧的解压缩段和新解压缩^:。 例如,在一个实施方式中,从解压縮记录中可获得旧解压缩段和新解压缩 段。例如当新的和旧的压缩块被解压缩并装入RAM中时,可产生解压缩 记录,如下面关于图17描述的。作为另一例子,解压缩记录可已包括在 预先封装的更新数据包中。假定每个旧的解压缩段或新的解压缩段的形式 (压缩或未压缩)与当该旧的或新的解压缩段在解压缩记录中被列为需要 的内容时的形式相同,其中在DR中列出的需要的内容的形式可根据如上 解释的实施方式变化。如在方法1000中的(见上面的描迷),对于块列表(即,将被更新的 块)中的每个块i (i=l,2,...,k),方法1600继续,但如在等式3中一样计70算DEP(Bi)(在1604中)。一旦B^皮置于更新队列中,仍然在块列表中(即,还没有在更新队列 中)的任何块的DEP值就可适合于考虑Bj将在较早的时候被更新。已经 解释了 Bj可能依赖于其它块。也就是说,在Bj中(或更具体地,在B,的 更新版本中)可能有更新段,其相应的原始段在其它原始块中。可选地或 另外,Bj的解压缩(当Bj有旧内容时)可能依赖于其它块中的(实际的和 /或添加的)内容和/或依赖于与压缩顺序中紧接地在前面的块相关的工作 计算结果。也可能其它块的解压缩可依赖于Bj (当Bj有新内容时)或当 Bj是压缩顺序中紧接在前面的块时依赖于与Bj相关的工作计算结果。因此,对于仍然被列在块列表中的每个这样的其它块B。,相应于Bj 的更新版本中的段的段被识别,且其大小从DEP(B。)中减去。此外或代 替地,在阶段1610和1611中,原始B。中的同样或代替地是解压缩原始 Bj所需要的(实际的、添加的和/或虚拟地存储的)段被识别,且其大小从 DEP(B。)中减去。(如上所述,解压缩所需要的段可包括存储在块中不用 考虑压缩的实际内容,在压缩期间添加到块的添加内容和/或解压缩紧接在 后面的块所需要的虚拟地"存储"的内容,然而所有这些都可被类似地处 理)。此外或代替地,在阶段1613和1614中,更新的Bj中的解压缩更新 的B。所需要的(实际的、添加的和/或虚拟地存储的)段被识别,且其大 小从DEP (B。)中减去。明显地是,因为例如使用方法1400或1500产生 的解压缩记录列出需要来自原始B。的其解压缩的内容的块,并列出提供解 压缩更新的B。所需要的内容的块,1611和1614中的计算所需要的的Bj 和B。之间的压缩相关性可容易地从解压缩记录得到。如果例如使用方法 1400或1500在1611和1614中使用的大小被记录在解压缩记录中,则可 直接从解压缩记录得到该大小。否则可从记录在解压缩记录中的所需要的 内容计算该大小。阶段1611和1614的计算通过等式4概括= D五尸CB。) + 2^e(C《)+2版(肠/《)+ 2^eCaS"腳。)v'=0 『0等式4其中71t是相应于段Bi的B。中的相应段(CS )的数量(t〉=l);z是用于解压缩原始Bi的旧的B。中的解压缩段(无论是实际的、添加 的还是虚拟地存储的)的数量(z>=l);b是用于解压缩新的B。的新的Bi中的解压缩段(无论是实际的、添加 的还是虚拟存储的)的数量(b〉=l)。在DEP值可能—皮修改之后,如在等式4中,对于保留在块列表中的所 有块,选择具有最小相关性值的下一个块(1006 ),且过程自身重复,直 到发现块列表是空的为止(然后应认识到,k=0)。当终止时,更新次序队列表示考虑了更新和压缩相关性的所确定的更 新次序。应注意,在其它实施方式中,更新次序可通过修改等式3或4来 只考虑更新相关性或只考虑压缩相关性。例如,如果只考虑更新相关性, 则等式3或4分别简化为等式1或2。作为另一例子,如果只考虑压缩相 关性,则等式3变成 vr=l w二l而等式4简化为读者应理解,上面对等式3和4的修改不是限制性的,且根据本实施 方式,更新次序可考虑更新相关性、解压缩相关性(原始版本)和解压缩 相关性(更新版本)的任何组合,等式3和4相应地被调整。应注意,根据一个实施方式,可重新排列更新数据包以反映更新次序。 可选地,有可能使更新次序或更准确地,其表示与更新数据包关联起来。 更新次序的表示可为例如通过依照更新次序,根据更新命令的目标段地址 来分类更新命令并将其存储在更新数据包中。应认识到,方法1600假定任何段CS和更新和/或解压缩块Bj所需要 的块B。的DSoW不需要更新或解压缩任何其它块。然而,在B。的任何特 定段可能是更新和/或解压缩除了 Bj外的其它块所需要的实施方式中,可 修改等式4,使得如果所有相关的块都在B。之前,则CS和/或DSoW的大小只从B。的DEP中减去。换句话说,可将阶段1610修改成询问"Bj是更 新顺序中依赖于B。来更新和/或解压缩旧块的最后的块吗?"。图17是根据本发明的一个实施方式示出更新数据包的产生的流程图。 在提供该流程图的详细解释之前,应认识到,如上面讨论的,当产生更新 数据包时,发生器必须预测更新设备的行为,包括保护緩冲器的使用,因 而允许例如通过确定更新次序来提高其使用率。只有当预测到保护緩沖器 被完全占用(或不可利用)时,才用插入命令代替复制命令,例如在美国 6,018,747中完成的,且更新或解压缩所需要的其它内容插入更新数据包 中。应注意,方法1700包括在保护缓冲器中内容保护的模拟,以便能够 将不适合于保护緩冲器的任何^皮保护内容插入更新数据包中。例如在下面 讨论的方法1800或1900期间,内容被模拟插入保护緩沖器中的顺序和内 容被插入更新数据包中的实际顺序(当保护緩沖器被模拟为充满的时)可 遵循内容的预测使用(即,需要)。在另一实施方式中,内容进入保护緩 沖器的模拟存储和内容进入更新数据包的实际存储的顺序可遵循不同的 顺序。在这个其它实施方式中,可能有允许在例如方法1800或1900期间 从保护缓冲器或更新数据包取回正确的内容的媒介(medium )。在又一实 施方式中,保护緩冲器和/或更新数据包中的区域可被描绘在不同的区域 中,以便标记用于更新所需要的段的区域、用于解压缩(旧)的所需要的 段的区域和/或用于需要解压缩(新)的所需要的段的区域。在这些其它实 施方式的一个中,在所描绘的区域内的顺序遵循内容的预测使用,然而, 这些区域可按与访问区域的预测次序不同的物理地址的次序布置(即,即 使假定要求解压缩旧的所需要的段在解压缩新的所需要的段之前,解压缩 新的所需要的段可能布置在比解压缩旧的所需要的段较低的地址)。然而, 在任何情况下,优选地,在方法1700中的模拟正确地模拟(即,预测) 在保护緩冲器中内容保护的顺序,如在方法1800中的,以便方法1800可 有理由地假定更新数据包包括不适合于保护緩冲器的任何被保护内容。为了说明的筒单而描述了实施方式,其中内容进入保护緩冲器的模拟 存储和内容进入更新数据包的实际存储的顺序不必遵循该内容的预测使用,但有允许取回正确存储的内容的媒介。该媒介可包括例如交叉参照表 (也称为相应性表),其提供块、DR元组和/或与被保护内容以及被保护内 容的存储位置(例如,在保护緩沖器或更新数据包中的位置)有关的更新 命令(例如,用于解压缩具有旧内容的块、用于解压缩具有新内容的块、 或用于更新具有旧内容的块)之间的相应性。该相应性表可被例如存储在 保护緩沖器、更新数据包中或其它地方。阶段1701包括准备工作。例如,更新数据包(组成第一更新数据包)通过任何方法来获得。它可在本地产生,或从外部源接收,例如通过通信 网络、在过程间通信中、通过从任何类型的存储设备读取它,等等。为了 这个目的,更新数据包(组成第一更新数据包)可通过任何已知的方法产生,例如根据美国6,546,552、 WO 2004/114130或WO 2005/003963或通过 利用已知的自身微分工具。在一个实施方式中,作为更新数据包产生的一部分,使用多块压縮而 被压縮的旧版本被解压缩并装入RAM中以及使用多块压缩而被压缩的新 版本解压缩并装入RAM中。确定在解压缩的旧内容的虚拟块和压缩的旧 内容的物理块之间,和/或类似地,在解压缩的新内容的虚拟块和压缩的新 内容的物理块之间的相应性,如通过执行图15的方法或根据前面执行图 14或15的方法期间虚拟块边界的以前存储所确定的。此外,与旧内容有 关的和与新内容有关的DR通过执行图15的方法或根据前面执行图14或 15的方法期间虚拟块边界的以前存储来确定。例如在一个实施方式中,接收到的更新数据包可以可选地包括虚拟块 边界和/或用于旧内容和/或新内容的DR,或可选地,作为在阶段1701中 执行的解压缩的一部分,虚拟块和/或DR(如在图15的方法中定义的)可 存储在更新数据包中。在1702中分析更新数据包,以便获得更新次序。例如根据上面描迷 的图16可确定更新次序。此外,在那些情况下,当根据优选的更新次序 预先组织更新数据包时,或当它例如与布置优选更新次序(如列表)的信 息相关时,可省略1702。在一个实施方式中,可使更新命令和/或解压縮 记录重新排序以反映更新序列。方法1700如方法1100 (阶段1103到1113,见上面的描述)中的一样 继续,然而由于在指定的保护緩冲器中的;f莫拟空间限制,代替在到达最后 的更新命令时终止(阶段1105中的"否"),本方法继续确定DR中的哪个 内容将被包括在更新数据包中。对于关于DR的更多细节,读者参考上面 方法1400和1500的描述。应注意,因为本实施方式卩叚定相应性表、更新 命令不需以更新顺序处理,但是,处理的模拟顺序应优选地模仿在下面讨 论的方法1800中处理的实际顺序。在阶段1714中,启动DR指针以指向与待处理的第一块相关的DR的 第一元组。为了描述的筒单,在所述实施方式中,假定与相同块的DR(多 个DR)相关的元组纟皮顺序地处理。处理块的次序可遵循任何顺序,例如 根据更新次序、根据压缩次序或依照任何其它次序。在另一实施方式中, 与相同块的DR (多个DR)有关的元组不必顺序地处理。优选地,处理元 组的模拟顺序应模仿在下面讨论的方法1800中处理的实际顺序。为了描 述的简单还假定,对于每个块都有一个DR,该DR包括与具有新内容的 块有关的元组和与具有原始内容的块有关的元组。例如,每个元组可包括 元组是否与解压缩原始或新内容有关的二进制表示。可选地,对每个块可 能有多个DR,例如两个, 一个与具有新内容的块有关, 一个与具有旧内 容的块有关。在任何情况下,只要DR指针没有前进而超过阶段1716中的最后一个 DR,则在阶段1718中确定目前检查的元组是否表示更新顺序中较后面的 块。如果该元组与具有旧内容的块有关,则确定在检查的元组中的内容是 否是解压缩在更新顺序中较后面的至少一个块所需要的(例如通过检查元 组中的块参考(多个参考))。如果元组与具有新内容的块有关,则确定解 压缩检查的块所需要的在检查的元组中的内容是否由在更新顺序中较后 面的块提供(例如通过检查元组中的块参考)。应注意,如果块元组具有< 在DR中需要/提供用于解压缩的内容的块(多个块)、在DR中需要的内 容、需要的内容的大小>的格式,则仅仅通过检查DR和了解更新顺序可确 定阶段1716。如果检查的元组只表示较前面的块,则不需要进一步的处理,且方法可移到用于该块的DR (多个DR)中的下一元组,或如果元组对检查的块 来说是最后一个则移到与下一个块有关的DR (阶段1726 )。另一方面,如果DR的元组表示至少一个较后面的块,则在阶段1722 中,确定在保护緩冲器中是否有剩余的空间以存储DR内容。如果在保护 緩冲器中有空间,则剩余的空间减小了 DR内容的大小(阶段1722),且 可选地在1724中内容被标记为空闲的。例如可使用记录在元组中的内容 的大小,或可计算记录在元组中的内容的大小。如果在保护缓沖器中没有 任何空间,则在阶段1725中DR的元组中的内容^皮插入更新数据包中。在 一个实施方式中,DR的元组中的内容^^照原样插入更新数据包中(即, 如果在DR中是未压缩的则存储为未压缩的,以及如果在DR中是压缩的 则存储为压缩的),而在另一实施方式中,该内容可在存储在更新数据包 中之前可被处理,例如压缩、解压缩等。在有交叉参照表的实施方式中, 在交叉参照表中可制定记录项,例如参考更新数据包中的位置和需要用于 解压缩的内容的块(多个块)和/或提供用于解压缩的内容的块。在一个实施方式中,在对1720 "否定,,了预定的数量之后和/或从方 法1700的1108的以前执行开始,可假定在保护緩冲器中没有更多的空间 而不管DR元组中内容的大小如何,以及随后阶段1725 (更新数据包中的 保护)可直接跟随"是"到阶段1718。在一个实施方式中,在阶段1718中,例如由于较早时候处理的元组, 还可检查元组内容是否已经保护在更新数据包和/或保护缓沖器中,且在这 种情况下,如果在更新期间可容易获得^皮保护的元组内容,本方法可直接 继续进行到阶段1726。在另一实施方式中,代替再次保护元组内容,可改 为存储指向纟皮保护的元组内容的指示符。过程继续进行1726,然后继续进行到阶段1728中的下一元组,或如 果该元组对于所检查的块是最后一个元组,则继续进行到阶段1730中的 下一块的DR。 一旦处理了最后一个块的DR中的最后一个元组,本方法 就结束。对读者应^L明显,根据本实施方式,例如为了满足系统限制,可以用 更新数据包为代价来减小保护緩冲器的大小,或反之亦然。应注意,更新数据包可以可选地包括解压缩命令,用于解压缩存储在 存储块中的压缩的原始内容。它也可以可选地包括压缩命令,用于将更新 的虚拟块压缩成存储在压缩的更新版本的块中的内容。根据本实施方式,使用更新数据包构造器和更新设备允许的压缩方 法,更新数据包可在提供到更新设备之前被压缩,如下面参考图18描述 的。在转向描述在更新设备中运行的更新过程之前,应认识到,根据一些 实施方式,可重新使用保护緩冲器,以便增加其效率。换句话说,当不再 需要存储在保护緩冲器中的内容时, 一些实施方式可释放被此不需要的内 容^f吏用的区域(例如,通过物理删除这些内容或通过将它标记为空闲的, 等等),因而允许更新过程重新使用空闲区域,用于进一步备份在更新时 需要的操作。有效地重新使用保护緩冲器允许执行更多的保护操作,因此 可减小更新数据包大小(较少的被保护内容需要存储在其中)。在产生更 新数据包期间模拟重新使用,因而允许发生器知道保护緩冲器何时是满 的,以及其中何时有空闲的空间。在考虑用于产生更新数据包的实施方式1700之后,根据本发明的一 个实施方式,图18示出更新被多块压缩的版本的方法。图18可适用于例 如在更新设备中可操作的更新过程。应认识到,所示实施方式适合于在具 有包括块的存储设备的更新设备中操作。作为准备工作的一部分(阶段1801 ),当更新过程开始运行时,它获 得或访问存储在存储设备103例如易失性或非易失性存储器中的更新数据 包。应认识到,更新设备可已经接收以前来自更新服务器105的更新数据 包。可选地,更新数据包通过任何可适用的方式装入存储设备,例如通过 从便携式存储设备(例如,软盘或光盘)复制它,或通过从互联网接收它。 应进一步认识到,根据本实施方式,被访问的更新数据包有确定的更新次如果不同于在命令数据包中出现的次序,则它可根据所存储的与更新数据 包相关的额外信息确定,如确定用于执行更新命令的次序的列表。根据本 实施例,更新次序适合于减少更新设备中保护緩冲器的使用,或至少提高77其中可用的保护緩沖器的利用率。根据一个实施方式,依照图16和17的 流程图可能已经产生更新数据包并且可能已经确定更新次序(例如,在更 新数据包发生器中)。在1801中,旧的压缩版本从存储设备取回,并例如以压缩顺序被解 压缩到RAM中。例如通过执行图15的方法,或根据在前面执行图14或 15的方法期间虚拟块边界的以前存储,可确定解压缩的旧版本和压缩的旧 版本中的虚拟块之间的相应性。此外,通过执行图15的方法,或才艮据前 面执行图14或15的方法期间虚拟块边界的以前存储,可确定与旧内容有 关的DR元组。例如在一个实施方式中,所获得的更新数据包可以可选地 包括虚拟块边界和/或与旧内容有关的DR元组。在任何情况下,对其执行 更新命令的虚拟块中的源未压缩的段可容易地与相应的压缩的物理块关 联起来,以便确定未压缩的源段何时以更新次序更新。在一个实施方式中,获得的更新数据包包括新的未压缩版本的虚拟边 界以及可选地相关的DR记录,例如其被通过执行图14或15的方法较早 地确定和存储。在这种情况下,对其执行更新命令的虚拟块中的目标未压 缩的段可容易地与相应的(压缩的)物理块关联起来,以便确定目标未压 缩的段何时以更新次序更新。因此为了描述的简单,假定在更新数据包中 接收虚拟边界。进一步地,在说明书中当描述另一实施方式时,该假定被 放宽。如在方法1200中的,方法1800接着优选地以与被模拟的相同的顺序 继续进行更新命令的处理(见上面的方法1700)。在具有交叉参照表的实施方式中,对于在保护緩沖器中保护的每个 段,例如在保护緩沖器中的位置和更新命令、源段的块和/或目标段的块之 间制定位置记录项。在这样的实施方式中,恢复指示符可能是不重要的, 且在这种情况下,可省略阶段1211 (恢复指针的初始化),以及在阶段1218 中可使用交叉参照表从保护緩冲器取回内容。在方法1800中省略了方法1200的阶段1221,即,物理存储块没有用 RAM中的内容更新。在阶段1224之后,不是过程结束,而是使用阶段1826中的多块压缩 将更新(即,新)版本压缩到RAM中,如在方法1500中的。假定用于每 个块的虚拟块(其相应于RAM中的压缩块)边界和用于RAM中新的压 缩块的DR元组可通过执行阶段1826或从更新数据包中得到。可选地,如 果用于每个新块的DR包括在更新数据包中,则阶段1826中的多块压缩可 被推迟到稍后进行(例如在阶段1842之前)。DR元组(解压縮旧块或新块所需要的)以与方法1700中模拟的相同 的顺序纟皮处理。在阶段1828中,启动DR指针以指向与待处理的第一块相关的DR的 第一元组。为了描述的简单,在所述实施方式中,假定与相同块的DR(多 个DR)相关的元组纟皮顺序地处理。处理块的次序可遵循任何顺序,例如 根据更新次序、根据压缩次序或依照任何其它次序。在另一实施方式中, 与相同块的DR (多个DR)有关的元组不必顺序地处理。优选地,处理元 组的实际顺序应模仿在上面讨论的方法1700中处理的才莫拟顺序。为了描 述的简单还^^定,对于每个块都有一个DR,所述DR包括与具有新内容 的块有关的元组和与具有原始内容的块有关的元组。例如,每个元组可包 括该元组是否与解压缩原始或新内容有关的二进制表示。可选地,对每个 块可能有多个DR,例如两个, 一个与具有新内容的块有关, 一个与具有 旧内容的块有关。只要DR指针没有前进而超过阶段1830中的最后一个DR,则在阶段 1832中确定目前检查的元组是否表示更新顺序中较后面的块。如果元组与 具有旧内容的块有关,则确定所检查的元组中的内容是否是解压缩在更新 顺序中较后面的至少一个块所需要的(例如通过检查元组中的块参考(多 个参考))。如果元组与具有新内容的块有关,则确定解压缩所检查的块需 要的所检查的元组中的内容是否由在更新顺序中较后面的块提供(例如通 过氺全查元组中的块参考)。应注意,如果块元组具有〈在DR中需要/提供用 于解压缩的内容的块(多个块)、在DR中需要的内容、所需要的内容的大 小>的格式,则仅仅通过检查DR和了解更新顺序就可确定阶段1832。如果所检查的元组只表示较前面的块,则不需要任何进一步的处理,且方法可移到用于该块的DR (多个DR)中的下一元组,或如果元组对所 检查的块是最后一个则移到与下一个块有关的DR(阶段1839,接着到1840 或1841 )。另一方面,如果DR的元组表示至少一个较后面的块,则在1834中, 确定在保护缓冲器中是否有剩余的空间以存储DR内容。如果没有任何空 间,则假定元组内容以前被存储在更新数据包中(见方法1700),且过程 前进到阶段1839。如果有空间,则元组的内容复制到保护緩冲器,且保护緩冲器的剩余 空间减小了元组内容的大小(阶段1836 )。在一个实施方式中,DR的元组 中的内容照原样插入保护缓沖器中(即,如果在DR中是未压缩的,则存 储为未压缩的,以及如果在DR中是压缩的,则存储为压缩的),而在另一 实施方式中,内容在被存储在保护緩冲器中之前可被处理,例如压缩、解 压缩等。在具有交叉参照表的实施方式中,在参照表中可制定记录项,例 如参考保护緩沖器中的位置和需要用于解压缩的内容的块和/或提供用于 解压缩的内容的块。可选地,DR内容在1838中^皮标记为空闲的。在一个实施方式中,在阶段1832中,例如由于在方法1800中较早时 候处理的元组,还可检查元组内容是否已经被保护在更新数据包和/或保护 緩冲器中,且在这种情况下,本方法可前进到阶段1839,假定可容易地访 问元组内容或可选地可改为存储指向被保护内容的指针。在一个实施方式中,在对1834 "否定"了预定的数量之后,可假定在 保护緩沖器中没有更多的空间而不管DR元组中内容的大小如何,以及随 后继续进行阶段1842。过程前进到1839,然后到阶段1840中的下一元组,或如果元组对所 检查的块是最后一个元组,则到下一块的DR (阶段1841 )。一旦到达最后一个块的DR中的最后一个元组,就根据更新顺序将块 指针置于RAM中的第一个更新的压缩块(阶段1842)。在阶段1844中, 更新的压缩块从RAM复制到存储器中相应的物理块。块以更新顺序复制 (阶段1848 ),直到到达最后一个块(阶段1846 ),且本方法结束。在另一实施方式中,^底定原始版本^皮解压缩到RAM中,以及更新的未压缩版本被写到RAM中的不同区域(即,不盖写RAM中的原始版本)。 在本实施方式中,在阶段1207之前(即,在前进到下一更新命令之前), 可执行当前的更新命令,因而在RAM中的不同区域中建立完整的更新的 未压缩版本。在本实施方式中,可省略阶段1211和1224,本方法继续进 行阶段1826,如上所述。在其它实施方式中,假定从更新数据包中或从执行方法1800之前中 不知道更新版本中虚拟块的虚拟边界。还假定,更新数据包中的更新命令 与更新版本中块的虚拟边界无关。例如更新数据包可指定应在RAM中为 更新的未压缩版本分配的地址范围,且命令可与该范围内的地址有关(例 如相对于范围的下限或上限)。在这些实施方式中,更新命令不以特定的 顺序执行,在RAM中建立更新的未压缩版本(旧的压缩版本没有被盖写)。 接着例如使用方法700可将未压缩的更新版本压缩在RAM中,其中RAM 中相同大小的区域代替每个物理块。 一旦实现了压缩,未压缩的更新版本 的虚拟块边界和相关的DR就是已知的。在这些实施方式的一个中,更新 版本的这些虚拟边界存储在非易失性存储器中,例如在保护緩沖器中。接 着例如以更新次序(或以方法1700中遵循的任何次序)分析更新命令, 以便保护需要被保护在保护緩冲器中的任何源段,见上面阶段1203、 1204、 1206、 1208、 1209、 1210、 1207和1205的描述。在分析了最后一个命令 之后,方法可继续进行阶段1828,如上所述。应认识到,进一步对于图18的流程图,被保护内容的大小(恰好在 将它存储在非易失性保护緩冲器中之前)在一个实施方式中可包括比原始 版本的块的数量n(nM )少的块,这些块被在更新版本中修改。也就是说, 在本实施方式中,要求少于n个的操作,以便将被保护内容存储在非易失 性保护緩沖器中。如果指定块存储操作的数量为m,则应认识到,在本实 施方式中2<=m<2n。进一步注意,重新使用保护緩冲器可能是有利的。在产生更新数据包 期间模拟的重新使用(参考图17)反映图18中描述的更新过程的行为。 因此,如果利用重新使用,则有可能进一步继续到1844,检查更新的压缩了所使用的被保护内容,且如果是这样,则只要被保护 内容不是更新另外的段所需要的(相应于相同的物理块或相应于根据更新 次序随后的其它物理块),解压缩在更新顺序中较远的另外的原始块,或 解压缩在更新顺序中较前面的另外的新块,就可将该^皮保护内容标记为空 闲的。在本实施方式中,当存储在非易失性保护緩冲器的一个块中的所有 被保护内容^皮标记为空闲时,可删除该被保护内容并可重新使用块。如上所述,在一些情况下,用于新版本的压缩算法和/或压缩比不必与 用于原始版本的压缩算法和/或压缩比相同。方法1800充分考虑这个可能 性,因为对于用在新版本中的压缩与用在原始版本中的压缩是否相同或不 同没有限制。应进一步理解,在一些实施方式中,可能没有未压缩内容的 更新,而仅有使用不同压缩算法和/或压缩比的原始内容的重新压缩。在这 些实施方式中,更新数据包可包括使用不同压缩算法和/或压缩比来重新压 缩原始内容的命令。因为在这些实施方式中没有转换命令,源段不需要被保护,因此可省略方法1700中对在保护緩冲器中源段的保护的模拟以及 用插入命令对更新命令的替换。此外,在没有任何未压缩内容被更新的这 些实施方式中,可能显示最佳次序是压缩次序,因此不需要确定(例如在 方法1400或1500中)或保护DR内容。在这些实施方式中,在方法1700 中可省略保护緩冲器中DR内容保护的模拟和更新数据包中DR内容的插 入。类似地,在这些实施方式中可省略方法1800中在保护緩冲器中实际 源段/段的DR内容保护。因此原位更新应被理解为包括用新("更新")版 本原位更新原始版本的实施方式,该新版本根据与原始版本不同的压缩算 法和/或压缩比被压缩,而不管未压缩的原始版本中的内容与未压缩的更新 版本中的内容是否相同或不同。如果更新过程失败,则存储在存储设备中的版本可为中间版本,而 RAM存储的压缩的更新的版本一皮擦除。为了重新开始将丟失的压缩的更 新的内容写到包括压缩的更新的内容的中间版本的那些块中,至少应重新 构建丟失的RAM存储的压缩的更新的内容。压缩的更新的内容的一部分 可存储在中间版本中,但其它部分丟失。应认识到,应存储丟失的压缩的更新内容的块包括压缩的原始内容(组成"剩余压缩的原始内容"的内容)。此外,后向参考的内容片段存 储在备份存储器中。还应认识到,可产生用于剩余的压缩的原始内容的RAM存储器(根据压缩次序进一步解压缩剩余的压缩的原始内容)。接着,根据更新次序从存储有剩余的压缩的原始内容的第一块(根据 更新次序)开始,可重新产生相应于丢失的压缩的更新内容的未压缩的更 新的虚拟块。由该重新开始的更新过程构建的未压缩的更新内容^皮存储在 RAM中,如以前一样。应认识到,RAM存储的未压缩的更新内容不是完整的未压缩的更新 版本(或所需要的多于一个的虚拟块)。丢失的这些虚拟块的那些压缩内 容存储在中间版本中。因为有可能根据压缩次序来检查未压缩的更新虚拟 块,因而识别那些丟失的虚拟块,因此应认识到,第一个丟失的虚拟块在 任何前面的丟失的虚拟块之前被识别(在这种情况下先后次序是根据压缩 次序)。因此有可能识别相应于每个丟失的虚拟块的压缩的更新内容(压 缩的更新内容存储在中间版本的块中),并解压缩该被识别的压缩的更新 内容,产生存储在丟失的虚拟块中的丟失的未压缩的更新内容。以这种方 式检查未压缩的更新版本中的每个虛拟块,解压缩存储的内容以产生那些 被识别的虚拟块,产生存储在RAM中的完整的未压缩的更新版本(或结 果通常是在多于一个的虚拟块中的RAM存储的未压缩内容)。现在可重新压缩RAM存储的未压缩的更新版本(或在多于一个的虚 拟块中的RAM存储的未压缩内容),以产生RAM存储的压缩的更新版本, 且在中断之前未被写入的该内容可原位写到更新块中。图19示出根据本发明的实施方式的、用于重新开始在更新块写到存 储器期间被中断的更新的方法l卯0。假定中断出现在阶段1844中,这时 一些块复制到存储器中而另一些没有。因此,假定RAM的内容被擦除, 所有剩余部分是存储器中的块,其中一些包括旧内容, 一些包括新(更新 的)内容,且这些被保护在保护缓冲器或更新数据包中。读者应理解,如果中断改为在用更新内容盖写物理存储器中的块之前 发生,则当中断时,方法1800可从头重新开始而没有任何问题。在阶段1902中,块指针指向压缩顺序中第一个剩余的原始块(即,如果压缩顺序中较前面的块已经被更新,则这些块目前被忽略)。例如在Meller等人的美国公布的申请号20050216530中可确定重新开始的位置, 该申请在这里通过引用被并入。在阶段1904中,例如使用方法1500 (但 省略阶段1515,因为在方法1700和/或1800中在较早时候已经确定并处 理了解压缩纪录)将原始块以压缩顺序解压缩到RAM中。在1906中,确 定解压缩是否需要与更新次序中较前面的块的原始版本相关的内容(其以 前已经被更新)。如果需要,则在阶段1908中,可从更新数据包或保护緩 冲器中获得该内容,这取决于在方法1700和/或1800中该内容被保护在哪 里。例如,交叉参照表可提供所需要的内容的位置。本方法在阶段1911 中以压缩顺序解压缩每个原始块(暂时忽略任何已经更新的块的处理), 直到所有的原始块被解压缩为止(阶段1910 )。在阶段1912中块指针指向 在更新次序中留下来要被更新的第 一个原始块。本方法接着继续更新原始 块,执行例如阶段1214到1220和1222到1224 (但省略方法1200的阶段 1219和1221)。在阶段1218中,使用交叉参照表而不是恢复指示符来取 回4皮保护内容(注意,在方法1800中,使恢复指针前进的更新与更新块 写到存储器的写入分离,因此当写入中断时,恢复指示符已经前进到保护 缓冲器的末端,且因此与出现写入中断的块没有关系)。一旦执行了最后一个更新命令,则本方法就继续进行阶段1926,块指 针指向压缩顺序中的第一个新块。在阶段1928中,例如使用方法1500 (但 省略阶段1515,因为在方法1700和/或1800中在较早时候已经确定并处 理了解压缩纪录)将每个块以压缩顺序(阶段1935 )解压缩到RAM中。 如杲对于任何块,在阶段1930中,解压缩该块所需要的内容与更新次序 中较后面的块(因此还没有被更新)相关,则在阶段1932中,可从更新 数据包或保护緩冲器中获得所需要的内容,这取决于在方法1700和/或 1800中该内容被保护在哪里。在最后一个新块被解压缩到RAM中之后(阶 段1934),接着在阶段1936中,块指针指向在压缩次序中的第一个块。应理解,RAM中的一些块在中断之前被更新,而一些块被作为方法 1900的一部分更新(即,在重新开始更新之后),^旦这些块一起形成未压在阶段1936中,块指针指向压缩顺序中的第一个块,而在阶段1938 中块以压缩顺序(阶段1941)被压缩到RAM中。 一旦最后一个块被压缩 (阶段1940),就可重新开始将压缩块写到存储器。在阶段1942中,块指 针指向将以更新次序更新的第一个剩余的原始块(压缩的)。还没有写到 存储器的每个剩余的块以更新次序(阶段1941 )写到存储器中(阶段1944 ), 直到到达最后一个块(阶段1946)且方法结束。虽然参考图17、 18和19描述的所述实施方式假定与转换命令有关的 源段可潜在地保护在保护緩冲器和/或更新数据包中,但是应理解,在其它 实施方式中,与转换命令有关的其它数据可另外或代替地被保护。例如在 这些其它实施方式的一个中,代替或除了源段以外,还可潜在地保护目标 段。作为另一例子,在这些其它实施方式的一个中,可保护源段和/或目标 段的经处理的形式,其中该处理可以与或不与由命令指定的转换有关。然而,注意,上述实施方式是非限制性的,且如果需要,可存在可选 实施方式。例如,可选实施方式可在更新数据包中保护数据(包括对象), 而不是在备份存储器中保护它。理解了单块和多块实施方式之后,注意,更新数据包应包括更新命令。 以前解释到,更新数据包可用RAM存储,并可保护前向和后向参考的内 容片段(一起组成"保护操作")。根据一个实施方式,这些保护操作可通 过将保护命令插入更新数据包中来实现。然而,根据可选实施方式,当在 可更新的设备上操作时,保护可通过更新过程引出,因此在更新数据包中 不需要显式保护命令。依据为了产生更新数据包和为了更新内容的原始版本因而产生其更 新版本而描述的方法,进一步描述了能够执行这些方法的装置。图20示出根据本发明的一个实施方式的用于产生更新数据包的装置 2001,例如更新数据包发生器104。根据本实施方式,更新数据包发生器 104包括更新数据包获得单元2002。由更新数据包访问单元2002得到的 更新数据包可为任何更新数据包,包括通过应用已知的自身微分工具而产85生的简单增量,或根据可适用于该情况的任何方法产生的任何其它更新数据包。此外,应认识到(如在前面参考例如图11中的1101或图17中的 1701提到的),更新数据包获得单元可获得预先准备的更新数据包或根据 本领域中已知的任何方法产生更新数据包。更新次序分析器2003连接到更新数据包访问单元2002。更新次序分 析器2003从更新数据包访问单元2002接收更新数据包,并确定提高保护 緩冲器使用率的更新次序。例如根据图10或图16所示的方法可确定更新 次序。连接到更新次序分析器2003的更新数据包构造器2004根据从更新数 据包获得单元2002接收的更新数据包和在更新次序分析器2003中确定的 更新次序来构建新的更新数据包。图11和17示出可应用在更新数据包构 造器2004中的方法的实施方式。根据本实施方式装置2001还包括用于执 行逐块和/或多块压缩/解压缩的压缩/解压缩模块2005。注意,根据某些实施方式,本发明包括用于产生更新数据包的装置 2001,其中更新数据包配置成最佳化更新次序。根据某些实施方式,所述的被保护内容大小。根据其它实施方式,被保护内容大小小于由任何可能 的更新次序获得的平均的被保护内容大小。仍然根据其它实施方式,被保 护内容大小小于被保护内容的任意大小,该任意大小取决于与更新数据包 相关的任意更新次序。此外,其它变形也是可适用的。图21示出根据本发明的另一实施方式的用于将内容的原始版本更新 到其更新版本的装置2101。装置2101包括获得更新数据包的接收器2102。 如前面例如参考图12A和12B中的1201或图18的1801所解释的,更新 数据包可通过从通信网络接收它来获得,或它可通过任何可选的方法获 得。装置2101进一步包括更新模块2103如更新过程,其适合于更新当前 存储在更新设备的存储设备中的原始版本,因而产生更新版本。更新模块 2103可例如根据图12、 18或19所示的流程图来操作。根据本实施方式, 装置2101还包括用于执行逐块和/或多块压缩/解压缩的压缩/解压縮^t块 2105。应该明显地是,压缩/解压縮^t块2005和/或2105可^皮分离到分开的 压缩和解压缩模块中, 一个或两个压縮和解压缩模块出现在装置2001和/ 或2101中的任一个中。例如,在一个实施方式中,装置2001只包括解压 缩;漠块或只包括压缩;溪块。作为另一例子,在一个实施方式中,装置2101 只包括解压缩模块或只包括压缩模块。在一个实施方式中,用于在装置2001中的解压缩和/或压缩的算法在 准备更新数据包时考虑用于在装置2101中的解压缩和/或压缩的算法(当 按照准备好的更新数据包更新内容时),反之亦然。在一个实施方式中,可由安装在可更新的设备上并通过更新过程激活 的压縮和/或解压缩软件(组成压缩模块和解压缩模块,例如2105)来执 行压縮和/或解压缩。可选地,更新过程可包括用于使压缩的原始版本解压 缩的解压缩;溪块和/或用于压缩更新版本,以产生压缩的更新版本的压缩才莫 块。应认识到,这是非限制性的,如果可适用,允许任何可选的实施方式, 例如组合(例如,包括压缩;漠块并连接到解压缩;漠块的更新过程)或甚至 包括或连接到例如仅仅压缩;漠块的更新过程。应认识到,后面的更新过程 可更新未压缩的原始内容,压缩更新内容以产生压缩的更新内容。相反的 情况也是正确的。有可能只包括解压缩模块,因而允许更新解压缩的原始 版本,产生未压缩的更新版本,等等。假定压缩的原始版本由未压缩的更新版本代替,则上述方法和系统可 在已作了必要的修正后应用,例如省略解压缩/压缩、虚拟块/边界的计算 和/或用于更新版本的解压缩记录的确定/检查中的任何一项。假定未压缩 的原始版本由压缩的更新版本代替,上述方法和系统可在已作了必要的修 正后应用,例如省略解压缩/压缩、虚拟块/边界的计算和/或用于原始版本 的解压缩记录的确定/一企查中的任何一项。读者应理解,假定原始和更新版本被压缩地存储在存储设备上,则可 使用上述单块压缩来压缩一个版本,并可使用上述多块压缩来压缩另一个 版本。例如在一个实施方式中,可逐块压缩原始版本,以及可多块压缩更 新版本。在另一实施方式中,可多块压缩原始版本,以及可逐块压缩更新 版本。上述方法和系统可在已作了必要的修正后应用在这些实施方式中。87例如,对于逐块压缩的版本,可省略解压缩记录的确定/检查。因此其中本发明的实施方式包括在存储设备中被逐块压缩的更新版 本代替的未压缩的原始版本;被多块压缩的更新版本代替的未压缩的原始版本;被未压缩的更新版本代替的逐块压缩的原始版本;被逐块压缩的更 新版本代替的逐块压缩的原始版本(使用相同或不同的压缩算法/比);被 多块压缩的更新版本代替的逐块压缩的原始版本;被未压缩的更新版本代 替的多块压縮的原始版本;被逐块压缩的更新版本代替的多块压缩的原始 版本;以及被多块压缩的更新版本代替的多块压缩的原始版本(使用相同 或不同的压缩算法/比)。应理解,根据本实施方式,更新版本的未压缩内 容可与原始版本的未压缩内容相同或不同,如上所讨论的。还应理解,根据本发明的系统可以是适当编程的计算机。同样,本发 明设想一种^皮计算机可读的用于执行本发明的方法的计算机程序。本发明 进一步设想一种可有形地包括可由用于执行本发明的方法的机器执行的 指令程序的机器可读存储器。此外,精通本领域的人员应认识到,根据本发明的系统可为硬件。可 选地,系统可组成硬件和软件部件。虽然关于特定的实施方式示出和描述了本发明,但是它没有被这样限 制。读者现在会想到在本发明的范围内的很多修改、变更和改进。
权利要求
1.一种用于用存储块原位更新存储在非易失性存储设备中的内容的原始版本以产生内容的更新版本的方法,所述方法包括获得更新数据包;将所述原始版本或其一部分复制到易失性存储器;更新所述原始版本或其一部分以提供未压缩的更新版本或其一部分;压缩所述未压缩的更新版本或其一部分,以便独立地压缩每个数量的未压缩的更新内容;以及将所述压缩的更新版本或其一部分代替所述原始版本或其一部分写入所述存储设备中,其中每个所述独立地压缩的数量被写到分离的存储块中。
2. 如权利要求1所述的方法,其中所述原始版本被压缩,复制所述 原始版本或其一部分的所述步骤包括解压缩所述原始版本或其 一部分。
3. 如权利要求2所述的方法,其中所述压缩的原始版本使用与所述 压缩的更新版本不同的压缩算法或压缩比。
4. 如权利要求1所迷的方法,其中所述原始版本的n (n>l )个块中 的每一个的内容的至少一部分在所述更新版本中被修改,且其中所述更新 步骤和所述写入步骤包括执行m个块存储操作,每个块存储操作包括将内 容写到所述非易失性存储设备中的块中;性存储设备中的更新块存储操作,所迷更新内容至少根据所述更新数据包 来产生;其中2<=m<2n。
5. 如权利要求1所迷的方法,其中所述原始版本的n (n〉1)个块中的每一个的内容的至少 一部分在所述更新版本中被修改,且其中所述更新 步骤和所述写入步骤包括执行块存储操作,每个块存储操作包括将内容写 到所述非易失性存储设备中的块中;以及其中所述块存储操作还包括至少 一个备份块存储操作,其中每个备份块存储操作包括将被保护的内容存储 在非易失性保护缓沖器中。
6. 如权利要求5所述的方法,其中所迷更新数据包包括转换命令,且其中所述被保护的内容包括与转换命令相关的数据。
7. 如权利要求5所述的方法,其中在所述写入步骤期间擦除所述易 失性存储器,进一步包括将剩余的原始内容或其一部分从所述存储设备复制到易失性存储器;更新所述剩余的原始内容或其一部分,包括取回所述更新步骤需要的 所述被保护的内容的至少 一些;压缩所述更新的剩余的内容或其一部分,以便独立地压缩每个数量的 未压缩的更新的原始内容;以及将所述更新的剩余的内容或其一部分代替所述原始的剩余的内容或 其一部分写入所述存储设备中,其中每个所迷独立地压缩的数量被写到分离的存储块中。
8. 如权利要求5所述的方法,其中 所述更新数据包与更新次序相关,以及其中所述非易失性保护緩冲器中的所述被保护的内容的大小依赖于所述 更新次序;所述大小小于依赖于与所述更新数据包相关的任意更新次序的 被保护的内容的任意大小;所述任意更新次序从可与所述更新数据包相关 的所有可能的更新次序中^皮任意地选才奪。
9. 如权利要求5所述的方法,其中 所述更新数据包与更新次序相关,以及其中在所述非易失性保护緩冲器中的所述被保护的内容的大小依赖于所 述更新次序;所述大小是^皮保护内容的大小中最小的大小,所述一皮保护内容的大小依赖于可与所述更新数据包相关的所有可能的更新次序中的任 一更新次序。
10. 如权利要求l所述的方法,其中所述每个数量的未压缩的更新的 内容在被压缩时实质上等于存储块的大小。
11. 如权利要求l所述的方法,其中所述更新数据包包括用于描述所 述每个数量的未压缩的更新的内容的数据。
12. 如权利要求11所述的方法,其中所述每个数量中的一个在更新、 压缩以及写入所述每个数量中的另 一个之前被更新、压缩以及写入。
13. 如权利要求l所述的方法,其中所述原始版本被全部更新,并接 着在将所述压缩的更新版本写到所述存储设备之前被压缩。
14. 一种用于产生更新数据包的方法,用于用存储块原位更新存储在 非易失性存储设备中的内容的原始版本以产生内容的更新版本,所述方法 包括将所述原始和更新版本中的任一个解压缩到包括用于每个独立地压 缩的内容的分离的存储块的虚拟块中;以及在保护缓冲器中^t拟执行转换命令所需要的数据的保护。
15. 如权利要求14所述的方法,进一步包括将用于所述原始版本 和更新版本中任一个的虚拟块描述存储在所述更新数据包中。
16. 如权利要求14所述的方法,其中所述更新数据包与用于更新所 述存储块的更新次序相关,以及其中与转换命令有关的需要保护的数据的总的大小依赖于所述更新次序; 所述大小小于依赖于与所述更新数据包相关的任意更新次序的被保护的 内容的任意大小;所述任意更新次序从可与所述更新数据包相关的所有可 能的更新次序中被任意地选择。
17. 如权利要求14所述的方法,其中如果所述保护緩冲器不是充足 的,则在所述更新数据包中保护执行转换命令所需要的数据在所述更新数 据包中的保护。
18. —种用存储块原位更新存储在存储设备中的内容的原始版本以产生内容的更新版本的方法,所述方法包括 获得更新数据包;将所述原始版本复制到易失性存储器,其中如果所述原始版本在多于 一个的存储块中包括被相互依赖地压缩的内容,则所述复制步骤包括将所 述原始版本解压缩到易失性存储器中并保护解压缩所述原始版本所需要的至少一些内容;更新所述原始版本以提供未压缩的更新版本;以及将所述更新版本代替所述原始版本复制回非易失性存储器中,其中如 果所述更新版本被压缩地存储在被相互依赖地压缩的块中,则所述复制步 骤包括保护解压缩所述更新版本和相互依赖地压缩更新块所需要的至少 一些内容;其中所述原始版本和所述更新版本中的至少一个包括在被相互依赖 地压缩的多于一个的存储块中的内容。
19. 如权利要求18所述的方法,其中所述被保护的内容包括与压缩 无关的版本中的实际内容。
20. 如权利要求18所述的方法,其中所述被保护的内容包括添加到 与压缩有关的版本中的内容。
21. 如权利要求18所述的方法,其中所述被保护的内容包括版本的 块的解压缩所需要的数据,所迷块实质上与所述版本的紧接在前面的块相 关。
22. 如权利要求18所述的方法,进一步包括所述更新数据包包括 转换命令,且其中所述更新步骤包括保护与转换命令有关的数据。
23. 如权利要求22所述的方法,其中所述原始版本的n (n>l )个块 中的每一个的内容的至少一部分在所迷更新版本中净皮修改,且其中所述复 制步骤、所述压缩步骤、所述更新步骤和所述写入步骤包括执行m个块存 储操作,每个块存储操作包括将内容写到所述非易失性存储设备中的块中;所述块存储操作包括将所述更新版本的更新内容存储在所述非易失 性存储设备中的更新块存储操作,所述更新内容至少根据所迷更新数据包 来产生;其中2<=m<2n。
24. 如权利要求18所述的方法,其中所述更新数据包与用于更新所 述存储块的更新次序相关,且其中解压缩包括更新内容的存储块所需要的 所述3皮保护的内容与包括更新内容的另 一存储块相关,根据所述更新次序 所述另 一存储块晚于所述存储块被更新。
25. 如权利要求18所述的方法,其中所述更新数据包与用于更新所 述存储块的更新次序相关,且其中解压缩包括原始内容的存储块所需要的 所述被保护内容与包括原始内容的另 一存储块相关,根据所述更新次序所 述另 一存储块先于所述存储块-故更新。
26. 如权利要求18所述的方法,其中所述原始版本的n (n>l)个块 中的每一个的内容的至少一部分在所述更新版本中^皮修改,且其中所述复 制步骤、所述压缩步骤和所述写入步骤包括执行m个块存储操作,每个块 存储操作包括将内容写到所述非易失性存储设备中的块中;性存储设备中的更新块存储操作,所述更新内容至少根据所述更新数据包 来产生;其中2<=m<2n。
27. 如权利要求18所述的方法,其中在所述写入步骤期间擦除所述 易失性存储器,进一步包括将剩余的原始内容从所迷存储设备复制到易失性存储器,其中如果所 述剩余的原始内容被压缩地存储在所述存储设备中,则所述复制步骤包括 解压缩所述剩余的原始内容;更新所述剩余的原始内容;将更新内容从所述存储设备复制到易失性存储器,其中如果所述更新 内容被压缩地存储在所述存储设备中,则所述复制步骤包括解压缩所述更 新内容;以及当解压缩所述剩余的原始内容或所述更新内容中的任何一个时使用 所述被保护的内容。
28. 如权利要求18所述的方法,其中使用不同于用于压缩所述更新 版本的压缩算法或压缩比来压缩所述原始版本。
29. 如权利要求18所述的方法,其中所述原始版本和所述更新版本 中的一个包括用于每个被独立地压縮的内容的分离的存储块。
30. —种用于产生更新数据包的方法,用于用存储块原位更新存储在 非易失性存储设备中的内容的原始版本以产生内容的更新版本,所述方法 包括获得内容的未压缩的旧版本和未压缩的新版本;获得从一个或两个版本的解压缩和转换命令中的任一项中产生的旧 版本和新版本中任一个的存储块之间的相关性;以及在保护緩沖器中模拟执行解压缩一个或两个版本和转换命令中的任 一项所需要的数据的保护。
31. 如权利要求30所述的方法,其中如果所述保护缓冲器是不充足 的,则在所述更新数据包中保护执行解压缩一个或两个版本和转换命令中 的任一项所需要的数据。
32. 如权利要求30所述的方法,进一步包括将用于所述未压缩的 旧版本和未压缩的新版本中任一个的虚拟块描述和解压缩记录存储在所 迷更新数据包中。
33. 如权利要求30所述的方法,其中所述更新数据包与用于更新所 述存储块的更新次序相关,以及其中需要保护的数据的总的大小依赖于所述更新次序;所述大小小于依赖 于与所述更新数据包相关的任意更新次序的被保护的内容的任意大小;所述任意更新次序从可与所述更新数据包相关的所有可能的更新次序中被 任意地选择。
34. 如权利要求30所述的方法,其中解压缩所需要的所述数据包括与压缩无关的版本中的实际内容。
35. 如权利要求30所述的方法,其中解压缩所需要的所述数据包括 添加到与压缩有关的版本中的内容。
36. 如权利要求30所述的方法,其中解压缩所需要的所述数据包括 版本的块的解压缩所需要的数据,所述块实质上与所述版本的紧接在前面 的块相关。
37. —种用于用存储块原位更新存储在非易失性存储设备中的内容的 原始版本以产生内容的更新版本的装置,包括接收器,其配置成获得更新数据包;更新才莫块,其配置成将所述原始版本或其一部分复制到易失性存储器 中,并配置成更新所述原始版本或其一部分以提供更新版本或其一部分; 以及压缩纟莫块,其配置成压缩所述更新版本或其一部分,如果通过相互依 赖地压缩未压缩数量的所述更新版本来压缩所述更新版本或其一部分,则 其中每个都相应于所述存储设备中的多于一个的存储块,并保护解压缩所述更新版本所需要的至少一些内容;或通过独立地压缩相应于分离的存储 块的每个数量的未压缩的更新内容来压缩所述更新版本或其一部分;其中所述更新模块还配置成将所述压缩的更新版本或其一部分代替 所述原始版本或其一部分写入所述存储设备中。
38. —种用于产生更新数据包的装置,用于用存储块原位更新存储在解压缩;溪块,其配置成确定每个存储块和未压缩的虚拟块之间的相应 性并确定块之间的解压缩相关性,或配置成确定每个存储块和当被独立地 压缩时实质上等于存储块的大小的未压缩的虚拟块之间的相应性;以及更新数据包构造器,其配置成在保护緩冲器中模拟执行解压缩一个或 两个版本和转换命令中的任一项所需要的数据的保护。
39. —种包括计算机程序代码工具的计算机程序,所述计算机程序代 码工具用于当所迷程序在计算机上运行时执行权利要求1的所有所述步骤。
40. 如权利要求39所述的计算机程序,其被包含在计算机可读介质上。
41. 一种包括计算机程序代码工具的计算机程序,所述计算机程序代 码工具用于当所述程序在计算机上运行时执行权利要求14的所有所述步骤。
42. 如权利要求41所述的计算机程序,其被包含在计算机可读介质上。
43. —种包括计算机程序代码工具的计算机程序,所述计算机程序代 码工具用于当所述程序在计算机上运行时执行权利要求18的所有所述步骤。
44. 如权利要求43所述的计算机程序,其被包含在计算机可读介质上。
45. —种包括计算机程序代码工具的计算机程序,所述计算机程序代 码工具用于当所述程序在计算机上运行时执行权利要求30的所有所述步骤。
46. 如权利要求45所述的计算机程序,其被包含在计算机可读介质上。
全文摘要
用于在包括块的非易失性存储设备中将内容的原始版本原位更新到更新版本的方法和系统,其中原始版本和/或更新版本被压缩在存储设备中。
文档编号G06F9/445GK101326492SQ200680046212
公开日2008年12月17日 申请日期2006年10月5日 优先权日2005年10月6日
发明者埃温亚特·梅勒, 莎伦·皮莱格 申请人:雷德本德有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1