CN101326492A - 用于更新包括压缩版本的内容的方法和*** - Google Patents
用于更新包括压缩版本的内容的方法和*** Download PDFInfo
- Publication number
- CN101326492A CN101326492A CNA2006800462127A CN200680046212A CN101326492A CN 101326492 A CN101326492 A CN 101326492A CN A2006800462127 A CNA2006800462127 A CN A2006800462127A CN 200680046212 A CN200680046212 A CN 200680046212A CN 101326492 A CN101326492 A CN 101326492A
- Authority
- CN
- China
- Prior art keywords
- content
- version
- renewal
- piece
- data packets
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 402
- 238000003860 storage Methods 0.000 claims abstract description 162
- 238000007906 compression Methods 0.000 claims description 339
- 230000006835 compression Effects 0.000 claims description 332
- 230000006837 decompression Effects 0.000 claims description 86
- 238000006243 chemical reaction Methods 0.000 claims description 53
- 238000004422 calculation algorithm Methods 0.000 claims description 26
- 238000004590 computer program Methods 0.000 claims description 19
- 238000004088 simulation Methods 0.000 claims description 16
- 238000000926 separation method Methods 0.000 claims description 5
- 230000008569 process Effects 0.000 description 162
- 230000000875 corresponding effect Effects 0.000 description 133
- 239000012634 fragment Substances 0.000 description 45
- 238000010586 diagram Methods 0.000 description 39
- 230000014509 gene expression Effects 0.000 description 21
- 230000008859 change Effects 0.000 description 17
- 230000010076 replication Effects 0.000 description 16
- 230000015572 biosynthetic process Effects 0.000 description 11
- 238000012986 modification Methods 0.000 description 11
- 230000004048 modification Effects 0.000 description 11
- 238000004891 communication Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 10
- 238000004364 calculation method Methods 0.000 description 8
- 230000003362 replicative effect Effects 0.000 description 8
- 230000002349 favourable effect Effects 0.000 description 7
- 230000006399 behavior Effects 0.000 description 6
- 238000003780 insertion Methods 0.000 description 6
- 230000037431 insertion Effects 0.000 description 6
- 238000011084 recovery Methods 0.000 description 5
- 238000012217 deletion Methods 0.000 description 4
- 230000037430 deletion Effects 0.000 description 4
- 238000007689 inspection Methods 0.000 description 4
- 230000001413 cellular effect Effects 0.000 description 3
- 238000012937 correction Methods 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 238000012856 packing Methods 0.000 description 3
- 238000004513 sizing Methods 0.000 description 3
- 125000002015 acyclic group Chemical group 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000002596 correlated effect Effects 0.000 description 2
- 230000006378 damage Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 208000000044 Amnesia Diseases 0.000 description 1
- 208000026139 Memory disease Diseases 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000011066 ex-situ storage Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000006984 memory degeneration Effects 0.000 description 1
- 208000023060 memory loss Diseases 0.000 description 1
- 238000012797 qualification Methods 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/654—Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
用于在包括块的非易失性存储设备中将内容的原始版本原位更新到更新版本的方法和***,其中原始版本和/或更新版本被压缩在存储设备中。
Description
相关申请的交叉引用
本申请要求题目为“Method and system for updating content stored in astorage device”并于2005年10月6日提交的美国临时专利申请号60/723,939的利益,其由此在这里通过引用被并入。
技术领域
本发明涉及用于原位(in-place)更新存储在存储设备中的内容的方法和***。本发明尤其涉及在包括块的非易失性存储设备中将内容的原始版本原位更新到更新版本,其中原始版本和/或更新版本在存储设备上被压缩。
背景技术
有时需要更新存储在存储设备中的内容。例如,如果内容是软件或程序(如可执行文件),则有时需要修改其中存在的错误或对其引入新的特征。然而,在非限制性的后面的例子和其它类型的内容中也可能需要更新,例如存储在数据库中的文本、数据等。在下文中术语“旧版本”或“原始版本”指在更新以前内容的版本,而术语“新版本”或“更新版本”指包括已经更新的内容的版本。换句话说,原始版本包括“原始内容”,而更新版本包括“更新内容”。应注意,更新内容可进一步被更新。在第二次更新的情况下,例如,第一次更新的更新内容变成第二次更新的原始内容,而新的更新内容通过第二次更新产生,等等。
更新原始内容产生更新内容的过程称为“更新过程”。更新过程通常需要指示它如何执行更新的指令。提供给更新过程的这样的指令一起组成“更新数据包”,其中包括在其中的每个指令组成“更新命令”。也就是说,更新过程获得更新数据包作为输入,并根据其进行操作,以便将原始内容更新为更新内容。然而这是非限制性的,有时更新过程可获得多于一个的更新数据包,允许它一起更新内容。可选地,不是获得更新数据包,更新过程有时可从存储设备或从数据库等中取回更新数据包(或一组更新命令)。因此在下文中,当提到术语“获得更新数据包”时,应认识到,更新过程可被动地获得数据包,它可主动取回数据包或有时它可激活嵌入其中的数据包(例如,一组硬编码的更新命令)。
将原始版本更新为更新版本的一种方法是除了原始版本外还在存储设备中存储更新版本。例如,每当用户按PC(个人计算机)视窗桌面上的某个图标时,计算机程序“prog.exe”被激活。为了更新prog.exe,有可能将该文件的更新版本存储在与目前(原始)版本的不同的位置中,并接着重新设置与图标相关的路径,以便激活更新版本而不是原始版本。随后,当确定更新过程成功地结束时,可安全地删除原始版本,因而释放所占用的空间。此外,后面的这个更新方法要求例如在更新数据包中完整的更新版本被提供给更新过程。这样的更新数据包在大小(size)上容易变得巨大,且如果要求通过带宽受限的通信信道将它传送到更新设备,则传送可能变得不方便且有时甚至是不可能的。因此,减小更新数据包的大小是优选的。
另一更新方法可简单地用更新内容来盖写(overwrite)原始内容。该更新方法有风险且不可靠,因为如果更新过程在操作的中间失败,则当原始版本的一部分已经被盖写时,只有更新版本的一部分被写到存储设备,应认识到,在中断时存储在存储设备上的版本可能是无效或不能操作的。此外,传送完整的更新版本的要求还不能用本方法解决。然而,注意到通过用更新的内容盖写原始内容来更新内容在本领域中通常称为“原位更新”。在下文中,除非特别指明,术语“更新”用于描述“原位更新”。
用于减小更新数据包的大小的一种方法是通过在其内包括表示原始内容和更新内容之间的差异的信息。这样的更新数据包有时也称为“差异”、“差异结果”或“增量(delta)”。当根据增量操作时,更新过程将其应用于原始内容,因而产生更新内容。
考虑到增量的大小,有试图减小其大小的方法。例如,美国6,546,552(2003年公布的“Difference extraction between two versions of data-tablescontaining intra-reference”)公开了用于产生旧程序和新程序之间的紧凑的(compact)差异结果的方法。每个程序包括参考记录项(reference entry),其包括参考程序中其它记录项的参考。根据美国6,546,552的方法,旧程序被扫描,且对于每个参考记录项,参考由不同的标签记号代替,由此产生修改的旧程序。此外,根据美国6,546,552,新程序被扫描,且对于每个参考记录项,参考由不同的标签记号代替,由此产生修改的新程序。因此,直接或间接利用修改的旧程序和修改的新程序,产生了不同的结果。
WO 2004/114130(2004年 公布的“Method and system for updatingversions of content stored in a storage device”)公开了用于产生内容的旧版本和内容的新版本之间的紧凑的更新数据包的方法和***。WO2004/114130的***包括用于产生与旧版本和新版本相关的转换元件的转换元件发生器。它还包括用于产生修改版本的修改版本发生器和用于产生紧凑的更新数据包的更新数据包发生器。紧凑的更新数据包包括基于修改版本和新版本的转换元件和修改的增量。
WO 2005/003963(2005 年公布的“Method and system for updatingversions of content stored in a storage device”)公开了用于更新存储在存储设备中的内容的版本的方法和***。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年公布的“Method for generating andreconstructing in-place delta files”)公开了一种制造的方法、装置和产品,其用于将文件的可原位重建的软件更新从源计算机产生、传送、复制并重建到目标计算机。美国6,018,747将文件的第一版本和文件的第一版本的更新存储在源计算机的存储器中。第一版本也存储在目标计算机的存储器中。更新接着从源计算机的存储器传送到目标计算机的存储器。这些更新在目标计算机使用,以原位建立文件的第二版本。
根据美国6,018,747,当增量文件试图从存储器读取已经写入的偏移量时,这将导致不正确的重建,因为已有的版本数据被盖写。这称为读前写冲突。美国6,018,747教导如何后处理增量文件,以便建立增量文件,最小化读前写冲突的数量,并接着用添加命令代替复制命令以消除冲突。产生了用于表示复制命令之间的读前写冲突的有向图(digraph)。产生了程序表,其通过将该有向图转换成无圈有向图(acyclic digraph)来消除读前写冲突。然而,美国6,018,747使用增量文件,以便在读前写冲突期间备份或保护盖写的内容。因此,增量文件被扩大。
本领域中另一已知的问题出现在更新旧版本的过程在其正常终止之前被中断时,例如电源故障时。在这样的情况下,有可能在中断期间被更新的块的内容也许变成破坏的并包括料想不到的内容。
以前已经提到,当更新内容块时,块的原始内容有时形成由更新过程使用的输入的一部分。在这样的情况下,如果需要原始块(其由于中断而被破坏),则更新过程可能不能恢复。也许不可能重新更新破坏的块。
例如美国6,832,373(2004年公布的“System and method for updating anddistributing information”)试图处理该问题。它公开了用于更新被软件、设备和数据包括的数字信息序列的设备、***和方法。此外,这些数字信息序列可以用各种形式存储和使用,包括但不限于文件、存储位置和/或嵌入的存储位置。而且,在美国6,832,373中描述的设备、***和方法给本领域中熟练的开发人员提供了按需要产生更新信息的能力,且另外地允许用户通过不易于产生错误的简化的更新路径继续进行下去,以及根据美国6,832,373的发明者,所述方法可能比通过使用当美国6,832,373被提交时存在的技术执行得更快。
也就是说,美国6,832,373描述了使用辅助备份块,同时执行所有的块更新操作,因而使用两个阶段“两阶段协议”或“两阶段提交”。根据美国6,832,373,在更新块的第一阶段中,更新过程将更新内容写到辅助备份块中并验证内容被正确地存储。在第二阶段中,更新过程将更新内容写到其目标块中,以形成更新块的更新内容。然而,存在相同方法的变形,例如在第一阶段中将更新块的原始内容写到辅助备份块中,而在第二阶段中更新目标块以存储更新内容。
然而,两阶段提交(不管备份的内容是原始内容还是更新内容)是耗费时间的,因为每个写操作都需要执行两个操作(对两个阶段)。此外,根据美国6,832,373,每个备份操作都将块的全部(原始或更新)内容备份在辅助备份块中,因此如果更新过程更新的块的数量为n,则更新过程(包括更新操作和写到辅助备份块中的操作)所需要的操作的总数量可不小于2n。如果有在多于一个的写操作中内容被写入其中的块,则更新过程需要执行的操作的数量将甚至大于2n。
因此在本领域中存在对可靠和有效的机制的需要,该机制用于原位更新原始版本的原始内容,产生更新版本,其中原始版本和/或更新版本被压缩地存储在存储设备上。
发明内容
根据本发明,提供了一种方法,其用于以存储块原位更新存储在非易失性存储设备中的内容的原始版本以产生内容的更新版本,所述方法包括:获得更新数据包;将原始版本或其一部分复制到易失性存储器;更新原始版本或其一部分以提供未压缩的更新版本或其一部分;压缩未压缩的更新版本或其一部分,以便单独地压缩每个数量的未压缩的更新内容;以及将压缩的更新版本或其一部分代替原始版本或其一部分写在存储设备中,其中每个单独压缩的数量被写到分离的存储块中。
根据本发明,还提供了一种用于产生更新数据包的方法,所述方法用于用存储块原位更新存储在非易失性存储设备中的内容的原始版本以产生内容的更新版本,所述方法包括:将所述原始和更新版本中的任一个解压缩到包括用于每个单独压缩的内容的分离的存储块的虚拟块中;以及在保护缓冲器中模拟(simulate)执行转换命令所需要的数据的保护。
根据本发明,进一步提供了一种方法,其用于用存储块原位更新存储在存储设备中的内容的原始版本以产生内容的更新版本,所述方法包括:获得更新数据包;将所述原始版本复制到易失性存储器,其中如果原始版本包括被相互依赖地压缩的多于一个的存储块中的内容,则所述复制步骤包括将原始版本解压缩到易失性存储器中,并保护解压缩原始版本所需要的至少一些内容;更新原始版本以提供未压缩的更新版本;以及将更新版本代替原始版本复制回非易失性存储器中,其中如果更新版本被压缩地存储在块被相互依赖地压缩的地方,则所述复制步骤包括保护解压缩更新版本和相互依赖地压缩更新块所需要的至少一些内容;其中原始版本和更新版本中的至少一个包括在被相互依赖地压缩的多于一个的存储块中的内容。
根据本发明,提供了一种用于产生更新数据包的方法,所述方法用于用存储块原位更新存储在非易失性存储设备中的内容的原始版本以产生内容的更新版本,所述方法包括:获得内容的未压缩的旧版本和未压缩的新版本;获得从一个或两个版本的解压缩和转换命令中的任一项产生的新版本和旧版本中的任一个的存储块之间的相关性;以及在保护缓冲器中模拟执行解压缩一个或两个版本和转换命令中的任一项所需要的数据的保护。
根据本发明,还提供了一种装置,其用于用存储块原位更新存储在非易失性存储设备中的内容的原始版本以产生内容的更新版本,所述装置包括:接收器,其配置成获得更新数据包;更新模块,其配置成将原始版本或其一部分复制到易失性存储器中,并且配置成更新原始版本或其一部分以提供更新版本或其一部分;以及压缩模块,其配置成压缩更新版本或其一部分,如果通过相互依赖地压缩未压缩数量的更新版本来压缩更新版本或其一部分,则其中每个将相应于存储设备中的多个存储块,并保护解压缩更新版本所需要的至少一些内容,或通过单独地压缩相应于分离的存储块的每个数量的未压缩的更新内容来压缩更新版本或其一部分;其中更新模块还配置成将压缩的更新版本或其一部分代替原始版本或其一部分写在所述存储设备中。
根据本发明,进一步提供了一种用于产生更新数据包的装置,所述装置用于用存储块原位更新存储在非易失性存储设备中的内容的原始版本以产生内容的更新版本,包括:解压缩模块,其配置成确定每个存储块和未压缩的虚拟块之间的相应性并确定块之间的解压缩相关性,或配置成确定每个存储块和当被单独压缩时实质上等于存储块大小的未压缩的虚拟块之间的相应性;以及更新数据包构造器,其配置成在保护缓冲器中模拟执行解压缩一个或两个版本和转换命令中的任一项所需要的数据的保护。
附图说明
为了理解本发明并了解它可如何在实践中执行,现在参考附图,只通过非限制性实施例来描述优选实施方式,其中:
图1是根据本发明的一个实施方式的用于在蜂窝网络中更新版本的***的示意图;
图2A示出具有相应段的原始和更新版本的实施例;
图2B示出当图2A的原始版本更新为其更新版本时如何形成模糊(ambiguous)部分或段;
图2C示出解决图2B的读前写冲突的在本领域中已知的一种方法;
图2D示出解决图2B的读前写冲突的在本领域中已知的可选方法;
图3A示出具有相应段的原始和更新版本的另一实施例;
图3B示出适合于将图3A的原始版本更新为其更新版本的更新数据包;
图3C示出将图3A的原始版本更新为其更新版本;
图3D示出将图3A的原始版本更新为其更新版本;
图4是示出产生冲突解决更新数据包的流程图;
图5示出根据本发明的一个实施方式的将压缩的原始版本更新为其压缩的更新版本;
图6示出压缩版本及其相应的未压缩版本;
图7是根据本发明的实施方式的用于压缩内容的方法的流程图;
图8是根据本发明的实施方式的用于解压缩内容的方法的流程图;
图9A是原始版本及其更新版本的另一实施例的示意图;
图9B是根据本发明的一个实施方式当图9A的原始版本更新为其更新版本时使用的保护缓冲器的示意图;
图9C是根据本发明的另一实施方式当图9A的原始版本更新为其更新版本时使用的保护缓冲器的示意图;
图10是详细示出用于确定更新次序的一个实施方式的流程图;
图11是根据本发明的一个实施方式示出更新数据包的产生的流程图;
图12(分成12A和12B)是描述根据本发明的一个实施方式将原始版本更新为其更新版本的流程图;
图13示出包括内容的重复片段的示例性未压缩的版本和相应的压缩版本;
图14是根据本发明的另一实施方式用于压缩内容的方法的流程图;
图15是根据本发明的另一实施方式用于解压缩内容的方法的流程图;
图16是根据本发明的另一实施方式用于确定更新次序的方法的流程图;
图17(分成17A和17B)是根据本发明的另一实施方式用于产生更新数据包的方法的流程图;
图18(分成18A、18B和18C)是根据本发明的另一实施方式用于将内容的原始版本更新为其更新版本的方法的流程图;
图19(分成19A、19B和19C)是根据本发明的另一实施方式用于重新开始内容的原始版本到其更新版本的更新的方法的流程图;
图20示出根据本发明的实施方式用于产生更新数据包的装置;以及
图21示出根据本发明的实施方式用于将内容的原始版本更新为其更新版本的装置。
具体实施方式
在下列说明中,对多于一个的图共有的部件由相同的参考数字标注。
而且,除非特别说明,术语“更新”在下文中用于指“原位更新”。
图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。
而且,在图1所示实施例中,更新数据包通过发射器106来传送。这也是非限制性的,且可使用可适用于传送更新数据包的任何其它方式。例如,有可能将更新数据包存储在便携式存储设备如软盘或U盘(disk-on-key)上,因而允许更新设备(如电话102)通过从其读取更新数据包来访问更新数据包。
当更新设备接收更新数据包时,它可根据更新数据包来运行更新过程,其中更新过程更新原始版本以产生更新版本。应注意,更新设备可在收到更新数据包之后立即运行更新过程。可选地,它可将更新数据包存储在非易失性存储器中,例如在存储设备103中,并在某个以后的时间(例如下次更新设备重新启动(reboot)时)运行更新过程。
注意,存储设备可存储多于一个的原始和/或更新版本的内容。例如,应认识到,可能有安装在单个硬盘中的几个计算机程序。
在很多情况下,文件由在逻辑上连续的内容组成。例如,在包括文本的文件中,其中文本为“123456789”,字符“2”在逻辑上与字符“1”连续,字符“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”仍然被看作原始版本中的段。
当更新版本中段(“更新段”)的内容相应于原始版本中段(“原始段”)的内容时,这些段被看作“相应的段”或“匹配的段”。相应性指段之间的任何逻辑或算术联系,其中更新段可为原始段的副本,它可为原始段的修改的副本(例如,复制段的内容并接着修改复制的内容的一部分或全部有时是优选的),它可包括通过根据原始段的内容计算更新段的内容的所接收的内容,等等。
注意,有时可能有相应于某个原始段的多个更新段(例如,原始段的内容被复制两次,因而产生相应于其的两个更新段)。相反的情况也成立:有时可能有相应于单个更新段的多个原始段(例如,为了计算单个更新段的内容,有可能使用存储在两个不同的原始段中的内容)。
图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的大小,此模糊部分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之前执行该命令。更新过程根据保护命令执行的操作称为“保护操作(protectionoperation)”、“保护性操作(protect operation)”或“备份操作”,且注意,代替使用显式(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和原始段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所述的。注意,冲突段包括模糊部分,该模糊部分大小可能类似于或小于其相应段的大小,因而在段中留下零个或更多不模糊部分。
未解决的冲突被相继地处理,如由403示出的。在404中,包括模糊部分的选定段分成模糊部分和不模糊部分,因而产生两个段,一个模糊段和一个不模糊段。注意,有时段包括多于两个的部分(多个模糊部分和/或多个不模糊部分)。例如,当模糊部分在该段的中间时,可能有至少两个不模糊部分和一个模糊部分。在这样的情况下,该段可分成多于两个的段。
在405中为每个不模糊段产生新的更新命令,而在406中为每个模糊的段产生保护命令和恢复命令。在407中,产生冲突的原始更新命令从更新数据包中删除,而在408中新的更新命令以及保护命令***更新数据包中,代替所删除的更新命令。在409中,例如根据美国6,018,747将恢复命令***更新数据包中,而不是***命令被***。
注意,尽管代替删除原始更新命令而是将最新产生的更新命令***以将其置换(例如见405、406、407和408),但是有可能修改原始更新命令以便只涉及不模糊部分(其变成不模糊段)。
在理解了这以后,有可能只保护需要保护的内容的段而不是整个块,应认识到,存储在存储设备中的原始版本和/或更新版本可包括压缩的内容。当可更新的设备需要根据存储在其中的版本操作时,如果该版本被压缩,则该版本被解压缩(例如,在运行时间)到例如RAM中,因而允许操作。
例如,如果可执行文件(程序)以压缩的形式存储,则它被解压缩,以便允许操作。另一例子是具有压缩的数据。当程序需要访问该数据时,数据被解压缩,由此允许程序操作。
因此,存储在可更新的设备中的原始版本可为压缩的原始版本,且类似地,更新版本可为压缩的更新版本。
下面描述的是本发明的实施方式,其中原始版本和更新版本都压缩在存储设备上,因为这些实施方式是最复杂的。读者因此能够也容易地理解较简单的实施方式,其中通过假定下面与原始版本或更新版本的压缩/解压缩、虚拟块、虚拟边界(virtual boundary)和/或解压缩相关性有关的任何描述分别不是相关的,原始版本或更新版本没有被压缩地存储。
明显地,为了将压缩的原始版本更新为压缩的更新版本,有可能根据简单的增量文件来操作更新过程,包括以简单的方式构造的更新命令,相继处理两个压缩版本之间的差异。然而,精通本领域的人员应认识到,在两个未压缩版本之间存在的小差异可导致相应的压缩版本之间的相当大的差异,例如ZIP文件的例子。因此,简单的增量将变大而低效,而不管它传输到可更新的设备所需要的带宽、将它存储在设备中所需要的存储器或两者。
另一解决方案是根据图5示出的本发明的一个实施方式提供的。根据该实施方式,更新数据包501在两个未压缩的版本之间产生。接着,当这样的更新数据包501在存储有压缩的原始版本502的可更新的设备(例如,移动电话)中收到时,有可能使压缩的原始版本502在例如RAM中解压缩,产生解压缩的原始版本503。解压缩的原始版本503可根据更新数据包501来更新,产生未压缩的更新版本504,更新版本504又可在可更新的设备中压缩,因而产生压缩的更新版本505。注意,解压缩的原始版本503更新为未压缩的更新版本504可根据任何方法如原位更新来进行,且更新数据包501不限于简单的增量。然而,本实施方式是非限制性的,且应理解,有可能根据非原位的任何其它更新方法,例如通过在RAM中的另一位置产生未压缩的更新版本504,来将解压缩的原始版本503更新为未压缩的更新版本504,而没有覆盖解压缩的原始版本503。然而注意,此操作模式一般需要较多的RAM空间,以便允许完整的原始版本的解压缩。
根据本发明的一个实施方式,用于产生压缩的原始版本和更新版本的压缩是线性压缩(其中压缩内容维持与未压缩内容一样的顺序),例如已知的自身(per se)zip、霍夫曼编码和/或其组合。因此,有可能确定,根据压缩顺序,在线性压缩中,压缩版本的第一块对应于相应的未压缩版本的第一虚拟块,压缩版本的第二块对应于未压缩版本的第二虚拟块,等等。这在图6中示出,其中601表示压缩版本,而602表示相应的未压缩版本。压缩版本601存储在存储设备中的三个存储块603、604和605中。类似地,未压缩版本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,假定填充每个物理块的内容被独立地压缩(即,没有块之间的压缩相关性)。图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占用至少相同的虚拟块(假定在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)。这样的命令可例如在每一千个原始字节后***一百个零。允许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’盖写它之前被保护(例如,保护在保护缓冲器中)。
理解了这以后,有可能确定,在盖写存储在段中的原始内容之前,如果产生将存储在更新次序中较远的块中的更新内容的至少一个更新命令需要,则应保护该原始内容。
注意,为了简单起见,下面描述的实施方式涉及将未压缩的原始内容保护在保护缓冲器中的选择。然而,这是非限制性的,且应认识到,在其它实施方式中,以任何其它方式例如通过加密或另一转换来处理的压缩的原始内容和/或原始内容可改为保护在保护缓冲器中。
参考图9A,还注意到,段9A17的内容复制到相同的块(9A05)的段9A17’中。9A17’出现在9A17之前,即,9A17’的更新内容没有盖写9A17的原始内容。因此,明显地,看起来9A17的原始内容被9A17’隐式(implicitly)保护,且该原始内容不需要显式保护(例如,在保护缓冲器中)。然而,在更新设备具有包括块的存储设备如闪存的那些情况下,应认识到,通常更新内容的副本在例如RAM(随机存取存储器)中产生,且在完成整个更新块(在这种情况下为9A05’)的更新内容生成之后,更新内容被压缩,并在删除了相应于原始的9A05的物理块的内容之后从RAM复制到相应于更新块9A05’的物理块。因此应认识到,当用相应于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的原始内容也应复制到保护缓冲器。
但是注意,现在保护缓冲器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的未使用区域。
通过比较保护缓冲器9B01的使用与保护缓冲器9C01的使用,有可能看到,保护缓冲器9C01比保护缓冲器9B01包括更少的段的内容(在9C01中五段,与9B01中的六段不同)。精通本领域的人员应认识到,由于通过在块9A04’之前更新块9A03’而获得的三个段(9A11、9A13和9A15)的隐式保护,导致了被保护段的数量的减少。
此外,注意,在保护所需要的所有三个块中段的内容之后,保护缓冲器9C01的使用区域小于保护缓冲器9B01的使用区域。这再次是由于通过选择上述更新次序(9A05’、9A03’和接着9A04’),隐式保护较大的段。
因此通常,通过选择确定的更新次序,能够减小备份操作的数量和/或在更新过程期间所需要的保护缓冲器空间。记住,备份操作是耗费时间的,减少备份操作在获得较快的更新过程方面是有利的。此外,考虑到将数据写到包括块的存储设备中的块中是耗费时间的,应认识到,减小用于保护的空间(因此也可能是用在保护缓冲器中的块的数量)在获得较快的更新过程方面也可能是有利的。
而且,注意,更新次序影响需要将段的原始内容的副本保持在保护缓冲器中的持续时间。在图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”。
在继续进行用于确定更新次序的实施方式的描述之前,应注意,段的“大小(Size)”是由该段占用的字节的数量。然而,这是非限制性的,且有可能通过任何其它可适用的测量标准如比特、字等来测量段的大小。
此外,每个原始块都具有表示为DEP(块)的相关性值。应理解,因为每个虚拟块相应于一个物理块(以及可确定相应于物理块的每个虚拟块的边界,如在方法700或800中的),块B、Bi等可等同地表示物理块或虚拟块。然而,如上所解释的,在一些情况下,相应于特定物理块的虚拟块在包括旧内容时的大小/边界可不同于相应于相同的特定物理块的虚拟块在包括新内容时的大小,因此为了下面容易描述,更新次序表示更新物理块的次序。
在下面描述的实施方式中,因为更新发生在内容没有被压缩时,所以当计算等式1和2时(下面进一步地),假定段的大小表示相应于物理块的虚拟块中未压缩段的大小。然而,在其它实施方式中,大小可表示被压缩时的段的大小。相应于更新版本中更新(未压缩)段的块B的原始(未压缩)段组成“原始的相应段CS”。理解了在旧块中可能需要保护的段是原始的相应段,块的相关性值被确定为包括在其中的所有原始的相应段的总大小。最初,块的DEP值由等式1给出。
等式1
其中:
Bi是第i个块(注意,这里提到的块是更新块,即,原始内容被更新内容盖写的块,虽然不必保护存储在没有被更新的那些块中的内容);
m是块中可能需要保护的原始段的数量(m>=0);以及
CSj是Bi中相应于更新的(未压缩)段的原始段,其中j=1,2...,m。
如果m=0,则在Bi中没有相应的段,因此DEP(Bi)=0。
例如,在图9A中,块9A04的初始相关性是:
DEP(9A04)=size(9A11)+size(9A13)+size(9A14)+size(9A15)
图10是详细示出用于确定更新次序的一个实施方式的流程图。注意,确定由所示实施方式确定的更新次序,以便减小由被保护内容使用的区域或空间。还应理解,更新块根据一定顺序在存储设备中被更新,总是结合更新数据包确定更新次序(因为它是确定更新次序的更新数据包,而更新过程根据该更新次序进行操作)。
在1001中分析更新数据包,以便例如通过识别原始段和/或更新段来识别相应的段,其中原始段的内容复制到更新版本的段中,而更新段的内容根据原始段的内容来计算,等等。如上所解释的,假定在图10中表示的段是相应于物理块的虚拟块中的内容的未压缩段。注意,包括在更新版本中的不相应的段(即,与原始版本中的段没有相应性的段),例如***更新版本中而与原始版本没有任何相应性的新内容不必影响更新次序。可选地,可预先识别相应的段(见例如图11),在此情况下可省略1001。
此外,预先准备的更新数据包不是必不可少的。如果没有预先准备的更新数据包,则有可能例如通过利用本领域中已知的微分工具,或通过任何其它方式如通过美国5,546,552、WO2004/114130或WO2005/003963中描述的方法来产生一个更新数据包。
在1002中,被更新而用于更新版本的所有块在被表示为“块列表”的列表中列出,其中k是列出的块的数量。对列表中的每个块i(i=1,2...,k)(见1003)计算DEP(Bi)(在1004中)。
根据所示实施方式,当相关性(DEP)最低的块被首先***“更新次序队列”(因此它将是第一个取出的)时,块将在“更新次序队列”中列出。应理解,因为每个虚拟块相应于一个物理块(以及可确定相应于物理块的每个虚拟块的边界,如在方法700或800中的),因此块列表和更新次序队列可等同地表示物理块或虚拟块。然而,如上所解释的,在一些情况下,相应于特定物理块的虚拟块在包括旧内容时,其大小/边界可不同于当相应于相同的特定物理块的虚拟块包括新内容时的大小,因此为了下面容易描述,更新次序表示更新物理块的次序。
因此,在1005中初始化空的队列。然而,本实施方式是非限制性的,也可使用其它数据结构如堆栈,如本领域中的技术人员可认识到的。根据更新次序将被更新的第一个块,即,被推到更新次序队列中的第一个块是DEP最低的块。
在1006中,选择在块列表中DEP值最小的块。注意,如果有几个(多于一个)具有相同的最小DEP值的块,则例如根据最小的i来选择其中之一。选定的块被表示为Bj。在1007中将Bj推到更新次序队列中,而在1008中将它从块列表中删除。接着,在1012中,如果块列表为空(k=0),则过程终止。
已经解释了Bj可能依赖于其它块。也就是说,在Bj中(或更具体地,在Bj的更新版本中)可能有更新段,其相应的原始段在其它原始块中。对于仍然在块列表中列出的每个这样的其它块Bo,相应于Bj的更新版本中的段的段被识别(可能根据在块列表中列出的其它块的起始和终止地址来识别段)及其大小从DEP(Bo)中减去。
为了这么做,测试仍然在块列表中列出的每个块Bo(见1009和1010)以查看Bj是否依赖于Bo(即,存储在Bj中的更新内容是否包括这种段,即该段的相应源段在块Bo的旧版本中)。如果Bj依赖于所测试的块Bo,则在1011中识别依赖的段,其总的(未压缩)大小从所测试的块Bo的相关性值(DEP)中减去。也就是说,如果在Bj中有t个相应于Bo中的旧段的更新段,则
等式2
其中:
Bo是在块列表中Bj依赖的块(还不在更新列表中);
t是Bo中相应于Bj中更新段的相应段(CS)的数量(t>=1);以及
CSi是Bo中相应于Bj中更新段的旧段。
在DEP值可能在1011中被修改之后,选择具有最小相关性值的下一块(1006),且过程本身重复,直到发现块列表是空的为止(接着,应认识到k=0)。
当终止时,更新次序队列表示确定的更新次序。应注意,根据一个实施方式,更新数据包可重新排列以反映更新次序。可选地,有可能将更新次序,或更具体地,它的表示,与更新数据包关联起来。更新次序的表示可以是例如通过依照更新次序,根据目标段地址来分类和存储更新数据包中的更新命令。
应认识到,方法1000假定不需要更新块Bj所需要的块Bo的任何段CS来更新其它块。然而,在Bo的任何特定段可能需要更新除了Bj外的其它块的实施方式中,可修改等式2,使得如果所有相关的块都在Bo之前,则CS的大小只从Bo的DEP中减去。例如,可将阶段1010修改成询问“Bj是更新次序中依赖于Bo的最后的块吗?”。
图11是示出根据本发明的一个实施方式的更新数据包的产生的流程图。在提供该流程图的详细解释之前,应认识到,当产生更新数据包时,发生器必须预测更新设备的行为,包括保护缓冲器的使用,因而允许例如通过确定更新次序来提高其使用率。只有当预测到保护缓冲器被完全占用(或不可利用)时,才用***命令代替复制命令,例如在美国6,018,747中进行的。
在1101中,通过任何方法来获得更新数据包(组成第一更新数据包)。它可在本地产生,或从外部源接收,例如通过通信网络、在进程间通信中、通过从任何类别的存储设备中读取它等。为了这个目的,更新数据包(组成第一更新数据包)可通过任何已知的方法产生,例如根据美国6,546,552、WO 2004/114130或WO 2005/003963或通过利用已知的自身微分工具。
在一个实施方式中,作为更新数据包产生的一部分,旧版本被解压缩并装入RAM中和/或新版本被解压缩并装入RAM中。在该实施方式中,例如通过执行方法800或在前面方法700或800的执行期间从前面虚拟块边界的存储开始,确定解压缩的旧内容的虚拟块和压缩的旧内容的物理块之间的相应性,和/或类似地,确定解压缩的新内容的虚拟块和压缩的新内容的物理块之间的相应性。例如,在一个实施方式中,接收的更新数据包可以可选地包括虚拟块边界,或可选地,作为在阶段1101中执行的解压缩的一部分,虚拟边界(例如,如方法800中定义的)可被存储在本地产生的更新数据包中。
如果(或者旧的未压缩内容的、或者新的未压缩内容的)虚拟块和物理压缩块之间的相应性是已知的,则对其执行更新命令的虚拟块中的源未压缩的段和目标未压缩的段可容易地与相应的压缩物理块关联起来,以便确定源未压缩的段和目标未压缩的段在更新次序中何时更新。在下文中,除非另外特别说明,假定源段和目标段是未压缩的。
在1102中分析更新数据包,以便识别相应的(未压缩)段和更新次序。例如根据上面描述的图10可确定更新次序。注意,在确定更新次序之前,有可能分析更新数据包,以便识别其中的相应段。可选地,有可能在确定更新次序时识别相应的段(见例如图10中的1001)。此外,在那些情况下,当根据优选的更新次序预先组织更新数据包时,或当更新数据包例如与布置优选更新次序(如列表)的信息相关时,可省略1102。
为了根据本实施方式产生更新数据包,需要获得可利用来用作更新设备中的保护缓冲器的存储区的大小(1103),因而产生用于此设备的最优化的更新数据包。该实施方式假定根据所产生的更新数据包更新的所有存储设备都具有可利用的存储器,其大小实质上等于所得到的大小。
可选地,根据另一实施方式,可能具有用于保护缓冲器的预定大小。根据后面这个实施方式产生的更新数据包适合于具有大小上大于或等于预定大小的空闲区域的更新设备。例如,有可能确定例如在更新数据包发生器中的保护缓冲器的所需要的大小(例如预定大小),并将所需要的大小存储在更新数据包中。当更新设备接收更新数据包时,或当更新过程相应地开始操作时,更新设备可试图根据存储在更新数据包中的需要的大小来分配保护缓冲器。如果在设备中没有用于分配保护缓冲器的足够的空闲存储区,则有可能终止更新过程的操作,因而避免例如存储器溢出。更进一步地,有可能通知更新数据包服务器105这种情况,可能包括更新的可用存储区的大小,因而允许更好地适合于更新设备的更新数据包的传输和重新传输。注意,这样的更新数据包可由更新数据包发生器104预先准备并预先存储在更新服务器中,如下所述。可选地,更新服务器可指示更新数据包发生器104产生适合于可用大小的更新数据包等等。
然而,也可允许其它实施方式。例如,有可能与更新设备通信,以获得其可用作保护缓冲器的有效存储器(与当传输给设备不适合的更新数据包时从设备接收信息不同),以及接着产生适合于所得到的大小的更新数据包,并将它传送到更新设备。也允许上述实施方式的组合。
精通本领域的人员应认识到,当更新设备接收到更新数据包时,更新设备将更新数据包存储在可访问的存储区中。因此,当考虑更新设备中的可用存储区时,还应考虑也需要将更新数据包存储在其中。类似地,确定的存储区可能是更新过程的操作等所需要的。
返回到图11,为了根据本实施方式产生更新数据包,在1104中启动指针以表示更新次序中的第一更新命令。该指针组成“命令指针”。在所述实施方式中,更新命令涉及未压缩的内容(即,虚拟块的段)。在继续描述图11之前,注意,通常根据本实施方式将更新命令分成三种主要的类别。一种类别包括根据存储在原始版本的段中的原始内容建立的或基于其的命令,或换句话说,这样的命令使用原始内容,以便产生更新内容。这些命令组成“建立的命令”或“转换命令”。例如,“复制命令”属于转换命令的类别。转换命令因此具有“源段”(原始段,命令基于其原始内容)和“目标段”(更新段,其更新内容通过转换更新命令来产生)。第二种类别,“合并命令”包括将不基于原始内容的更新内容合并入更新版本的更新命令。例如,“***命令”将内容引入更新版本;该内容不是从原始版本获得,而是更可能从更新数据包或从任何其它源获得。第三种类别是“擦除命令”。擦除命令擦除了包括在原始版本的段中的原始内容,而没有在更新版本中产生其相应的段。擦除命令的例子是“删除”更新命令。
注意,复制命令不是唯一的转换命令。具有源段和目标段的任何命令都是转换命令。例如,一个这样的转换命令可将存储在源段中的所有小写字符转换成大写。另一转换命令可用某个值乘以存储在源段中的数字,等等。
此外,被转换命令影响的内容组成“修改的内容”。当考虑源段所驻留的块(组成“源块”)和目标段所驻留的块(组成“目标块”)时,应认识到,源块的内容的至少一部分在目标块中被修改。也就是说,有可能源块的那部分例如被删除,因此不形成存储在更新块中的内容的一部分。
根据图11中示出的实施方式,对于更新数据包中的每个更新命令(见1105),如果在1106中确定了命令指针是否表示转换命令,且如果是表示的话,则应检查源段的原始内容是否需要显式保护。
例如参考图9A和9B,前面证实,当更新更新块中的内容时,如果根据更新次序,相应于转换命令的目标未压缩的段的虚拟块的物理(压缩)块在相应于转换命令的源未压缩的段的虚拟块的物理(压缩)块之前,则不需要原始段的内容的显式保护。因此,在1107中,检查相应于源未压缩的段的虚拟块的物理(压缩)块是否在相应于目标未压缩的段的虚拟块的物理(压缩)块之前,或者相应于源未压缩的段的虚拟块的物理(压缩)块是否与相应于目标未压缩的段的虚拟块的物理(压缩)块相同,且如果是这样,则源段的内容需要保护。在保护内容之前,进一步1108中检查保护缓冲器是否有足够的可用存储区来存储源段的被保护副本。
如果在保护缓冲器中有足够的可利用的空间,则在1109中,可用大小减小了源段的大小(例如以未压缩的格式),且可选地在1110中,源段被标记为空闲的。注意,不是将源段标记为空闲的,可选的实施方式可删除源段的原始内容或执行任何其它可适用的操作,包括根本不执行操作。
在1111中,命令指针根据更新次序前进到下一更新命令。为了这个目的,注意,在更新数据包产生期间,不需要将原始版本更新为更新版本,且其中的“模拟”就足够了。因此,当根据图11的流程图操作时,更新数据包发生器(或相应地产生更新数据包的任何其它处理器)不必根据更新命令来操作。
返回到1108,如果发现在保护缓冲器中没有足够的可用空间来存储源段的被保护内容,则应理解,在用更新内容盖写相应的压缩段之前必须将该内容保护在其它地方。以前参考图3B和3C注意到,该内容可例如通过将其副本存储在更新数据包本身中被保护。在下文中假定待保护的未压缩内容存储在更新数据包中,但可选地,待保护的压缩内容存储在更新数据包中。因此,在1112中,由命令指针指示的更新命令用***命令代替,并且在1113中,源段的原始内容通过将其副本存储在更新数据包中来被保护(见例如,美国6,018,747)。
在图11中描述的实施方式中,当可用的保护缓冲器大小太小时(见1108),需要保护的内容存储在更新数据包中。应理解,即使源段对于保护缓冲器中的保护太大,但是只要保护缓冲器的可用大小大于零,则其它源段的内容(在更新次序中较远的其它转换更新命令的源段)对于其中的保护来说足够小是可能的。
可选地,在一个实施方式中,如果对1108的回答是预定的次数的“否”,则当处理时随后的转换命令时,1112直接跟在1107之后(即,假定不考虑管源段的大小,在保护缓冲器中没有任何空间,因而在随后的重复中绕过1108到1110)。
在一个实施方式中,在1107中还可检查源段是否复制到更新次序中较前的更新虚拟块,以便可改为在更新较后的虚拟段时使用复制的段。在这种情况下,更新命令可修改成涉及复制的段,且方法直接继续到1111(绕过1108到1113)。
在一个实施方式中,1107可修改成也检查例如由于较早处理的转换命令,在保护缓冲器/更新数据包中是否已经保护了源段。在一个实施方式中,如果在保护缓冲器/更新数据包中已经保护了源段,则只要在更新期间可容易获得源段,方法就直接继续到1111(绕过1108到1113)。在另一实施方式中,不是再次保护源段,可改为存储指向被保护的源段的指针。
对读者来说明显的是,根据本实施方式,可以用更新数据包为代价来减小保护缓冲器的大小或反之亦然,例如以满足***限制。
应注意,更新数据包可以可选地包括解压缩命令,用于解压缩存储在存储块中的压缩的原始内容。更新数据包也可以可选地包括压缩命令,用于将更新部分压缩成存储在压缩的更新版本的块中的内容。
根据本实施方式,使用更新数据包构造器和更新设备允许的压缩方法,更新数据包可在提供到更新设备之前被压缩,如下面参考图12A和12B描述的。
在转向描述在更新设备中运行的更新过程之前,应认识到,根据一些实施方式,可重新使用保护缓冲器,以便增加其效率,如已经参考图9A、9B和9C提到的。换句话说,当不再需要存储在保护缓冲器中的内容时,一些实施方式可释放由此不需要的内容使用的区域(例如,通过物理删除该内容或通过将它标记为自由的,等等),因而允许更新过程重新使用空闲区域,用于进一步备份在更新时需要的操作。有效地重新使用保护缓冲器允许执行更多的保护操作,因此可减小更新数据包大小(较少的被保护内容需要存储在其中)。在产生更新数据包期间模拟重新使用,因而允许发生器知道保护缓冲器何时是满的,以及何时在保护缓冲器中有空闲的空间。
在考虑用于产生更新数据包的实施方式之后,根据本发明的一个实施方式,描述现在转向图12A和12B,其一起示出描绘原始版本更新为其更新版本的流程图。在图12A和12B中描绘的流程图例如可适用于在更新设备中可操作的更新过程。应认识到,所示实施方式适合于在具有包括块的存储设备的更新设备中操作。
当更新过程开始运行时,在1201中,它获得或访问存储在存储设备103中例如在易失性或非易失性存储器中的更新数据包。应认识到,更新设备可接收以前来自更新服务器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中(或通常在“易失性更新缓冲器”中)产生更新的虚拟块的副本,并接着将整个虚拟块的内容压缩到非易失性存储设备中相应的物理块。将存储在易失性更新缓冲器中的内容压缩到非易失性存储设备中的物理块中的操作称为“更新块存储操作”。因此,在1213中启动组成“块指针”的其它指针,以根据更新次序指示第一个更新块。
在下文中,更新块存储操作和备份块存储操作的数量表示为m。然而这是非限制性的,且m表示块存储操作的总数,其包括将内容存储在非易失性存储设备中的块中的每个操作。
如果在1214中确定命令指针指示不是转换更新命令的更新命令,则应理解,该更新命令不是基于最初作为原始版本的一部分的内容,即,它不基于存储在原始版本或保护缓冲器中的内容,因此在1215中,更新过程可根据命令来操作,因而在RAM中产生目标段的副本。不是转换命令的更新命令可以可选地包括在1112中***在更新数据包中的***命令。
返回到1214,如果更新过程确定命令指针指示转换命令,则它进一步在1216中检查相应于包括命令的源段的虚拟块的物理块在更新顺序上是否在相应于包括目标段的虚拟块的物理块之前,或与相应于包括目标段的虚拟块的物理块相同。如上面在所示实施方式中提到的,分析与虚拟块中的未压缩段以及涉及虚拟块中的未压缩段的命令有关。记住,对于包括在相应于物理块的虚拟块中的源段来说不需要保护,根据更新次序所述物理块在相应于目标段的虚拟块的物理块后面,应认识到,更新过程在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充分考虑这个可能性,因为对用在新版本中的压缩与用在原始版本中的压缩是否相同或不同没有限制。应进一步理解,在一些实施方式中,可能没有未压缩内容的更新,而仅有使用不同压缩算法和/或压缩比的原始内容的解压缩。在这些实施方式中,更新数据包可包括使用不同压缩算法和/或压缩比来重新压缩原始内容的命令。因为在这些实施方式中没有转换命令,没有源段需要保护,因此在这些实施方式中可省略方法1100中保护缓冲器中段保护的模拟以及用***命令对更新命令的替换。类似地,在这些实施方式中可省略方法1200中在保护缓冲器中源段的实际保护。原位更新因此应被理解为包括用新(“更新”)版本原位更新原始版本的实施方式,其中新版本根据与原始版本不同的压缩算法和/或压缩比来压缩,而不管未压缩的原始版本中的内容与未压缩的更新版本中的内容是否相同或不同。
现在假定当根据图12更新块时,过程由于任何原因而异常中断,且RAM中的内容被擦除。在这种情况下,不擦除(非易失性)存储设备中的物理块内容、更新数据包和保护缓冲器。然而根据上面的讨论,读者应理解,一旦对至少一个块执行阶段1221或等效地到存储器的写操作,则由于已经发生的更新,最初包括旧(压缩)内容的一些物理块就在异常中断的时刻改为包括新(压缩)内容。在一些实施方式中,因为需要保护的段在阶段1209中被保护,因此更新可以根据更新次序可靠地继续处理将被更新的下一块。例如在Meller等人的美国公布的申请号20050216530中可确定重新开始的位置,该申请在这里通过引用被并入。在这些实施方式的一个中,假定相应于物理块的更新虚拟块的虚拟边界是已知的,则不必进一步处理包括新内容的物理块。因此,在本实施方式中,可例如根据方法800将还没有更新(即,包括旧内容)的所有物理块解压缩到RAM中,接着该方法可继续进行阶段1213,其中块指针指向在更新次序中还没有被更新的第一个块。在这些实施方式的一些中,1218的恢复指示符可以是不相关的,且例如使用交叉参照表可取回来自保护缓冲器的内容。
虽然参考图11和12描述的实施方式假定,与转换命令有关的源段可在保护缓冲器和/或更新数据包中被潜在地保护,但是应理解,在其它实施方式中,可另外或代替地保护与转换命令有关的其它数据。例如在这些其它实施方式的一个中,代替或除了源段外,还可潜在地保护目标段。作为另一例子,在这些其它实施方式的一个中,可保护源段和/或目标段的经处理的形式,其中该处理可以与或不与命令指定的转换有关。
到现在为止描述的实施方式假定每个虚拟块被独立地压缩到物理块中。因此在本实施方式中,每个物理块可被独立地解压缩到相应的虚拟块中。
在理解了单个块的实施方式之后,应注意,有时每次对多个块执行压缩(即,一个块的压缩可能依赖于其它块的压缩)。例如,如果原始和更新版本被预先准备好并预先压缩,则接着被传送到用于更新数据包产生的更新数据包发生器(同时更新数据包具有关于压缩次序和压缩算法的信息)。因此下面描述称为“多块实施方式”的可选实施方式。
在多块实施方式中,为了能够成功地解压缩存储在包括压缩的原始版本的一部分的某些块中的确定的压缩内容,有时需要解压缩存储在其它块中的压缩内容,所述确定的压缩内容依赖于所述其它块。例如,在一些压缩方法(例如由在下文中称为‘zip’的zip工具使用的一个方法)中,如果内容片段在内容中重新出现多次,则一次出现(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分别代替片段1306、1307和1308。如果压缩参考的大小小于它代替的相应片段的大小,则应认识到,这样的压缩参考的使用减小了存储在版本中的内容的大小,或换句话说,它压缩内容。进一步注意,压缩参考1314、1315和1316可涉及相应于1313的未压缩片段1305、以及任何其它相应的未压缩或压缩片段。
也就是说,图13示出块之间的压缩相关性。为了解压缩包括这样的压缩参考的块的内容,需要解压缩包括压缩的一次出现或至少该内容的一部分的块的内容,其中该部分包括所述一次出现。例如,为了解压缩块1312的内容,必须解压缩片段1313的内容。以前注意到,与图13的简化实施例不同,其中1313的内容出现好像它是未压缩的一样,1313的内容通常进一步被压缩,因此它必须在可解压缩块1311和1312之前,即,在1313的未压缩内容复制到块1311和312之前被解压缩。
如果存储在一个块中的内容(包括所述一次出现)在解压缩其它出现之前(即,在解压缩存储指示器(indicator)的其它块的内容之前)被更新,则可能结果是不可能解压缩其它块。在本例中,在更新了1313的内容之后,就不能够复制1313的原始内容(或1305的内容)以代替指示器1314、1315和1316。
根据本发明的实施方式,克服这种限制的一个方法是,在用更新内容盖写1313的内容之前,将1313的内容复制到例如备份存储器。接着,当解压缩块1311和1312时,1313的原始内容可从备份存储器而不是从1313复制。
此外或代替地,解压缩特定的块所需的计算可能需要被保护。其中计算的例子包括:状态寄存器的内容、在解压缩特定的块之前的解压缩期间计算的计数器和/或表格、被产生的并被写到以前压缩的块(多个块)中的一个或更多表格,所述压缩块也是解压缩特定的块所需要的,例如Zlib或Gzip压缩方法的霍夫曼树。
读者应理解,在一些实施方式中,除了图13中示出的压缩相关性以外,还可能有其更新需要修改的段的原始内容的段,如上所讨论的。例如在一个实施方式中,除了图13中示出的压缩相关性以外,还可能有其更新需要例如在图9中的原始内容的段。
因此通常,当更新将被压缩和将盖写原始的压缩内容的段时,如果当前块中的其它段的更新需要或相应于根据更新次序较远的物理块的其它虚拟块的更新需要(见例如图10、11和12),如果更新次序中较远的原始物理块的解压缩需要,和/或如果更新次序中较前的新(更新)物理块的解压缩需要,则原始内容的至少一部分(例如当未压缩时)需要被保护(例如在备份存储器中)。如上所解释的,也可能或代替地需要保护其它计算。
以前参考图13注意到,为了解压缩包括压缩参考的块的内容,需要解压缩包括参考的内容片段的块的内容。见例如图13中的块1311,当将版本1309更新为图中没有示出的另一版本时,为了解压缩块1311,块1310也必须被解压缩。
然而,假定图13中的块与旧版本有关,如果在更新次序中块1310在块1311之前,则参考的内容片段(存储在块1310中的)将在更新过程到达块1311之前更新是可能的。如果是这种情况,解压缩存储在块1311中的内容可能变得不可能。因此,存储在参考片段中的内容应被保护在例如备份存储器中,因而即使最初包括在其中的压缩-参考已经被超过并因而是不可利用的内容片段时,也允许块1311的解压缩。
通常,当更新存储在原始块(更新块)中的压缩内容以及压缩的原始内容包括根据更新次序在更新块之前的块的压缩参考(组成“后向参考”)时,向后参考的内容片段(压缩的或没有被压缩的)应被保护在例如备份存储器中。通过保护非易失性存储器(例如备份存储器)中的内容,也确保当一些块包括压缩的更新内容而其它块包括压缩的原始内容时,如果更新过程在终止之前失败可重新开始更新过程。也就是说,在这种情况下保护提供了可靠性。
此外,应考虑,用于原始块的压缩-参考可参考在更新次序中对更新块较远的内容片段(组成“后向参考”)。如前面提到的,应认识到,在解压缩参考的内容片段之前,更新块的原始内容不能被解压缩且确定地不能被更新。因此,如果更新过程在更新更新块之前失败,则确保前向参考的内容片段还没有被盖写,因而有可能再次解压缩前向参考的内容片段。因此,不需要将前向参考的内容片段保护在非易失性存储器(例如备份存储器)中,以及因此将它们解压缩在RAM(组成RAM-存储器)中就足够了。
根据本发明的一个实施方式,在更新内容和用更新的压缩内容盖写原始的压缩内容之前,在更新过程开始时前向参考的原始内容片段可存储在RAM存储器中。应认识到,有可能解压缩存储在块中的内容,其中前向参考的内容片段存在于这些块之间,接着在RAM存储器中只存储由前向参考的片段使用的内容。以类似的方式,可在更新开始之前将所有后向参考的内容片段保护在备份存储器中。
应认识到,如果所有前向参考的原始内容片段都存储在RAM存储器中以及所有后向参考的内容片段都被保护在备份存储器中,则可根据任何需要的次序继续进行更新,所述任何需要的次序包括不同于压缩次序的更新次序,因为前向参考的内容片段备份在RAM存储器中而后向参考的内容片段被保护在备份存储器中。
进一步解释到,当利用线性压缩时,压缩参考通常指根据压缩次序在压缩-参考之前的内容片段。然而,可能出现例外。例如,霍夫曼编码是一种线性压缩,其中精通本领域的人员应认识到,霍夫曼编码压缩的版本包括霍夫曼表。然而,这个例子是非限制性的,也可存储其它对象,例如不同类别的目录等。在当目录和其它对象存储在原始的压缩版本的末尾(再次根据更新次序)时的那些情况下,例如通过将专用的更新命令***更新数据包中可在备份存储器中保护这些对象。
类似地,应认识到,如果更新的(新的)压缩内容参考在更新顺序中处于较后面的内容,则更新块的新内容不能在解压缩参考的新内容片段之前被解压缩。然而,如果更新过程在参考的内容和被参考的内容的更新之间失败,则除非已经保护被参考的内容,否则新的压缩内容的解压缩是不可行的。
现在详述用于更新内容的非限制性方法的实施方式,其中使用多块压缩来压缩旧的压缩版本和/或新的压缩版本,因此在块之间可能有压缩相关性。
为了限制说明书的长度,当描述相同时,下面为多块实施方式介绍的所有流程图保留上面用于逐块实施方式中的阶段的引用,且读者参考上面的那些阶段的描述,而不重复这里的描述。
图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中),因此解压缩记录可等同地与虚拟块或物理块相关/表示虚拟块或物理块。然而,因为虚拟块当包括相应于特定物理块的旧内容时的大小/边界可能在一些情况下不同于虚拟块包括相应于相同的特定物理块的新内容时的大小/边界,为了简单起见,解压缩记录被处理为与物理块相关/表示物理块。如上解释的解压缩记录中的内容和/或大小可以如上解释的未压缩和/或压缩格式。
解压缩记录还可以或可选地在多块解压缩期间确定。多块解压缩的一个例子在图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之后的块所需要的工作计算结果组成“旧的解压缩段DSold”。需要解压缩更新块B的段或工作计算结果组成“新的解压缩段DSnew”。假定每个DSold或DSnew的形式(压缩或未压缩)与当该DSold或DSnew在包括该DSold或DSnew的解压缩记录中被列为需要的内容时的形式相同,其中在DR中列出的需要的内容的形式可根据如上解释的实施方式变化。
因此,最初,块的DEP值由下列等式给出:
等式3
其中:
Bi是第i个块(注意,这里提到的块是更新块,即,原始内容由更新内容盖写的块,同时不需保护存储在没有被更新的块中的内容);
m是可能需要保护的块中的原始段的数量(m>=0);
CSj是Bi中相应于更新段的原始段,其中j=1,2,...,m(m>0,这种段的数量);
DSoldr是在解压缩的Bi中或压缩的Bi中的段,或者是用于Bi+1(压缩顺序中的下一块)的解压缩的工作计算结果(例如存储器计数器或工作压缩算法的表格),其中其它块(多个块)在被解压缩时表示所述段,同时Bi包括旧内容。注意,r=1,2,...,s(s>0,这种段/结果的数量)。
DSnewu是任何段(在压缩或未压缩的块中)或工作计算结果,该工作计算结果是解压缩包括新内容时的Bi所需要的,其中u=1,2,...,v(v>0,这种段/结果的数量)。
例如,假定图9A和图13的相关性以及原始块9A04与原始块1310相同,则块9A04/1310的最初相关性为:
DEP(9A04/1310)=size(9A11)+size(9A13)+size(9A14)+size(9A15)+size(1313)
应注意,根据在压缩和/或解压缩期间产生的解压缩记录,可容易确定用于特定块的每个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=1,2,...,k),方法1600继续,但如在等式3中一样计算DEP(Bi)(在1604中)。
一旦Bi被置于更新队列中,仍然在块列表中(即,还没有在更新队列中)的任何块的DEP值就可适合于考虑Bj将在较早的时候被更新。已经解释了Bj可能依赖于其它块。也就是说,在Bj中(或更具体地,在Bj的更新版本中)可能有更新段,其相应的原始段在其它原始块中。可选地或另外,Bj的解压缩(当Bj有旧内容时)可能依赖于其它块中的(实际的和/或添加的)内容和/或依赖于与压缩顺序中紧接地在前面的块相关的工作计算结果。也可能其它块的解压缩可依赖于Bj(当Bj有新内容时)或当Bj是压缩顺序中紧接在前面的块时依赖于与Bj相关的工作计算结果。
因此,对于仍然被列在块列表中的每个这样的其它块Bo,相应于Bj的更新版本中的段的段被识别,且其大小从DEP(Bo)中减去。此外或代替地,在阶段1610和1611中,原始Bo中的同样或代替地是解压缩原始Bj所需要的(实际的、添加的和/或虚拟地存储的)段被识别,且其大小从DEP(Bo)中减去。(如上所述,解压缩所需要的段可包括存储在块中不用考虑压缩的实际内容,在压缩期间添加到块的添加内容和/或解压缩紧接在后面的块所需要的虚拟地“存储”的内容,然而所有这些都可被类似地处理)。此外或代替地,在阶段1613和1614中,更新的Bj中的解压缩更新的Bo所需要的(实际的、添加的和/或虚拟地存储的)段被识别,且其大小从DEP(Bo)中减去。明显地是,因为例如使用方法1400或1500产生的解压缩记录列出需要来自原始Bo的其解压缩的内容的块,并列出提供解压缩更新的Bo所需要的内容的块,1611和1614中的计算所需要的的Bj和Bo之间的压缩相关性可容易地从解压缩记录得到。如果例如使用方法1400或1500在1611和1614中使用的大小被记录在解压缩记录中,则可直接从解压缩记录得到该大小。否则可从记录在解压缩记录中的所需要的内容计算该大小。阶段1611和1614的计算通过等式4概括:
等式4
其中:
t是相应于段Bi的Bo中的相应段(CS)的数量(t>=1);
z是用于解压缩原始Bi的旧的Bo中的解压缩段(无论是实际的、添加的还是虚拟地存储的)的数量(z>=1);
b是用于解压缩新的Bo的新的Bi中的解压缩段(无论是实际的、添加的还是虚拟存储的)的数量(b>=1)。
在DEP值可能被修改之后,如在等式4中,对于保留在块列表中的所有块,选择具有最小相关性值的下一个块(1006),且过程自身重复,直到发现块列表是空的为止(然后应认识到,k=0)。
当终止时,更新次序队列表示考虑了更新和压缩相关性的所确定的更新次序。应注意,在其它实施方式中,更新次序可通过修改等式3或4来只考虑更新相关性或只考虑压缩相关性。例如,如果只考虑更新相关性,则等式3或4分别简化为等式1或2。作为另一例子,如果只考虑压缩相关性,则等式3变成
而等式4简化为
读者应理解,上面对等式3和4的修改不是限制性的,且根据本实施方式,更新次序可考虑更新相关性、解压缩相关性(原始版本)和解压缩相关性(更新版本)的任何组合,等式3和4相应地被调整。
应注意,根据一个实施方式,可重新排列更新数据包以反映更新次序。可选地,有可能使更新次序或更准确地,其表示与更新数据包关联起来。更新次序的表示可为例如通过依照更新次序,根据更新命令的目标段地址来分类更新命令并将其存储在更新数据包中。
应认识到,方法1600假定任何段CS和更新和/或解压缩块Bj所需要的块Bo的DSold不需要更新或解压缩任何其它块。然而,在Bo的任何特定段可能是更新和/或解压缩除了Bj外的其它块所需要的实施方式中,可修改等式4,使得如果所有相关的块都在Bo之前,则CS和/或DSold的大小只从Bo的DEP中减去。换句话说,可将阶段1610修改成询问“Bj是更新顺序中依赖于Bo来更新和/或解压缩旧块的最后的块吗?”。
图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,见上面的描述)中的一样继续,然而由于在指定的保护缓冲器中的模拟空间限制,代替在到达最后的更新命令时终止(阶段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中的最后一个元组,本方法就结束。
对读者应很明显,根据本实施方式,例如为了满足***限制,可以用更新数据包为代价来减小保护缓冲器的大小,或反之亦然。
应注意,更新数据包可以可选地包括解压缩命令,用于解压缩存储在存储块中的压缩的原始内容。它也可以可选地包括压缩命令,用于将更新的虚拟块压缩成存储在压缩的更新版本的块中的内容。
根据本实施方式,使用更新数据包构造器和更新设备允许的压缩方法,更新数据包可在提供到更新设备之前被压缩,如下面参考图18描述的。
在转向描述在更新设备中运行的更新过程之前,应认识到,根据一些实施方式,可重新使用保护缓冲器,以便增加其效率。换句话说,当不再需要存储在保护缓冲器中的内容时,一些实施方式可释放被此不需要的内容使用的区域(例如,通过物理删除这些内容或通过将它标记为空闲的,等等),因而允许更新过程重新使用空闲区域,用于进一步备份在更新时需要的操作。有效地重新使用保护缓冲器允许执行更多的保护操作,因此可减小更新数据包大小(较少的被保护内容需要存储在其中)。在产生更新数据包期间模拟重新使用,因而允许发生器知道保护缓冲器何时是满的,以及其中何时有空闲的空间。
在考虑用于产生更新数据包的实施方式1700之后,根据本发明的一个实施方式,图18示出更新被多块压缩的版本的方法。图18可适用于例如在更新设备中可操作的更新过程。应认识到,所示实施方式适合于在具有包括块的存储设备的更新设备中操作。
作为准备工作的一部分(阶段1801),当更新过程开始运行时,它获得或访问存储在存储设备103例如易失性或非易失性存储器中的更新数据包。应认识到,更新设备可已经接收以前来自更新服务器105的更新数据包。可选地,更新数据包通过任何可适用的方式装入存储设备,例如通过从便携式存储设备(例如,软盘或光盘)复制它,或通过从互联网接收它。应进一步认识到,根据本实施方式,被访问的更新数据包有确定的更新次序。该更新次序可简单地由更新数据包中更新命令的顺序确定,或例如,如果不同于在命令数据包中出现的次序,则它可根据所存储的与更新数据包相关的额外信息确定,如确定用于执行更新命令的次序的列表。根据本实施例,更新次序适合于减少更新设备中保护缓冲器的使用,或至少提高其中可用的保护缓冲器的利用率。根据一个实施方式,依照图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(n>1)少的块,这些块被在更新版本中修改。也就是说,在本实施方式中,要求少于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示出根据本发明的实施方式的、用于重新开始在更新块写到存储器期间被中断的更新的方法1900。假定中断出现在阶段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中,使用交叉参照表而不是恢复指示符来取回被保护内容(注意,在方法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得到的更新数据包可为任何更新数据包,包括通过应用已知的自身微分工具而产生的简单增量,或根据可适用于该情况的任何方法产生的任何其它更新数据包。此外,应认识到(如在前面参考例如图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还包括用于执行逐块和/或多块压缩/解压缩的压缩/解压缩模块2105。
应该明显地是,压缩/解压缩模块2005和/或2105可被分离到分开的压缩和解压缩模块中,一个或两个压缩和解压缩模块出现在装置2001和/或2101中的任一个中。例如,在一个实施方式中,装置2001只包括解压缩模块或只包括压缩模块。作为另一例子,在一个实施方式中,装置2101只包括解压缩模块或只包括压缩模块。
在一个实施方式中,用于在装置2001中的解压缩和/或压缩的算法在准备更新数据包时考虑用于在装置2101中的解压缩和/或压缩的算法(当按照准备好的更新数据包更新内容时),反之亦然。
在一个实施方式中,可由安装在可更新的设备上并通过更新过程激活的压缩和/或解压缩软件(组成压缩模块和解压缩模块,例如2105)来执行压缩和/或解压缩。可选地,更新过程可包括用于使压缩的原始版本解压缩的解压缩模块和/或用于压缩更新版本,以产生压缩的更新版本的压缩模块。应认识到,这是非限制性的,如果可适用,允许任何可选的实施方式,例如组合(例如,包括压缩模块并连接到解压缩模块的更新过程)或甚至包括或连接到例如仅仅压缩模块的更新过程。应认识到,后面的更新过程可更新未压缩的原始内容,压缩更新内容以产生压缩的更新内容。相反的情况也是正确的。有可能只包括解压缩模块,因而允许更新解压缩的原始版本,产生未压缩的更新版本,等等。
假定压缩的原始版本由未压缩的更新版本代替,则上述方法和***可在已作了必要的修正后应用,例如省略解压缩/压缩、虚拟块/边界的计算和/或用于更新版本的解压缩记录的确定/检查中的任何一项。假定未压缩的原始版本由压缩的更新版本代替,上述方法和***可在已作了必要的修正后应用,例如省略解压缩/压缩、虚拟块/边界的计算和/或用于原始版本的解压缩记录的确定/检查中的任何一项。
读者应理解,假定原始和更新版本被压缩地存储在存储设备上,则可使用上述单块压缩来压缩一个版本,并可使用上述多块压缩来压缩另一个版本。例如在一个实施方式中,可逐块压缩原始版本,以及可多块压缩更新版本。在另一实施方式中,可多块压缩原始版本,以及可逐块压缩更新版本。上述方法和***可在已作了必要的修正后应用在这些实施方式中。例如,对于逐块压缩的版本,可省略解压缩记录的确定/检查。
因此其中本发明的实施方式包括在存储设备中被逐块压缩的更新版本代替的未压缩的原始版本;被多块压缩的更新版本代替的未压缩的原始版本;被未压缩的更新版本代替的逐块压缩的原始版本;被逐块压缩的更新版本代替的逐块压缩的原始版本(使用相同或不同的压缩算法/比);被多块压缩的更新版本代替的逐块压缩的原始版本;被未压缩的更新版本代替的多块压缩的原始版本;被逐块压缩的更新版本代替的多块压缩的原始版本;以及被多块压缩的更新版本代替的多块压缩的原始版本(使用相同或不同的压缩算法/比)。应理解,根据本实施方式,更新版本的未压缩内容可与原始版本的未压缩内容相同或不同,如上所讨论的。
还应理解,根据本发明的***可以是适当编程的计算机。同样,本发明设想一种被计算机可读的用于执行本发明的方法的计算机程序。本发明进一步设想一种可有形地包括可由用于执行本发明的方法的机器执行的指令程序的机器可读存储器。
此外,精通本领域的人员应认识到,根据本发明的***可为硬件。可选地,***可组成硬件和软件部件。
虽然关于特定的实施方式示出和描述了本发明,但是它没有被这样限制。读者现在会想到在本发明的范围内的很多修改、变更和改进。
Claims (46)
1.一种用于用存储块原位更新存储在非易失性存储设备中的内容的原始版本以产生内容的更新版本的方法,所述方法包括:
获得更新数据包;
将所述原始版本或其一部分复制到易失性存储器;
更新所述原始版本或其一部分以提供未压缩的更新版本或其一部分;
压缩所述未压缩的更新版本或其一部分,以便独立地压缩每个数量的未压缩的更新内容;以及
将所述压缩的更新版本或其一部分代替所述原始版本或其一部分写入所述存储设备中,其中每个所述独立地压缩的数量被写到分离的存储块中。
2.如权利要求1所述的方法,其中所述原始版本被压缩,复制所述原始版本或其一部分的所述步骤包括:
解压缩所述原始版本或其一部分。
3.如权利要求2所述的方法,其中所述压缩的原始版本使用与所述压缩的更新版本不同的压缩算法或压缩比。
4.如权利要求1所述的方法,其中所述原始版本的n(n>1)个块中的每一个的内容的至少一部分在所述更新版本中被修改,且其中所述更新步骤和所述写入步骤包括执行m个块存储操作,每个块存储操作包括将内容写到所述非易失性存储设备中的块中;
所述块存储操作包括将所述更新版本的更新内容存储在所述非易失性存储设备中的更新块存储操作,所述更新内容至少根据所述更新数据包来产生;
其中2<=m<2n。
5.如权利要求1所述的方法,其中所述原始版本的n(n>1)个块中的每一个的内容的至少一部分在所述更新版本中被修改,且其中所述更新步骤和所述写入步骤包括执行块存储操作,每个块存储操作包括将内容写到所述非易失性存储设备中的块中;以及其中所述块存储操作还包括至少一个备份块存储操作,其中每个备份块存储操作包括将被保护的内容存储在非易失性保护缓冲器中。
6.如权利要求5所述的方法,其中所述更新数据包包括转换命令,且其中所述被保护的内容包括与转换命令相关的数据。
7.如权利要求5所述的方法,其中在所述写入步骤期间擦除所述易失性存储器,进一步包括:
将剩余的原始内容或其一部分从所述存储设备复制到易失性存储器;
更新所述剩余的原始内容或其一部分,包括取回所述更新步骤需要的所述被保护的内容的至少一些;
压缩所述更新的剩余的内容或其一部分,以便独立地压缩每个数量的未压缩的更新的原始内容;以及
将所述更新的剩余的内容或其一部分代替所述原始的剩余的内容或其一部分写入所述存储设备中,其中每个所述独立地压缩的数量被写到分离的存储块中。
8.如权利要求5所述的方法,其中
所述更新数据包与更新次序相关,以及其中
所述非易失性保护缓冲器中的所述被保护的内容的大小依赖于所述更新次序;所述大小小于依赖于与所述更新数据包相关的任意更新次序的被保护的内容的任意大小;所述任意更新次序从可与所述更新数据包相关的所有可能的更新次序中被任意地选择。
9.如权利要求5所述的方法,其中
所述更新数据包与更新次序相关,以及其中
在所述非易失性保护缓冲器中的所述被保护的内容的大小依赖于所述更新次序;所述大小是被保护内容的大小中最小的大小,所述被保护内容的大小依赖于可与所述更新数据包相关的所有可能的更新次序中的任一更新次序。
10.如权利要求1所述的方法,其中所述每个数量的未压缩的更新的内容在被压缩时实质上等于存储块的大小。
11.如权利要求1所述的方法,其中所述更新数据包包括用于描述所述每个数量的未压缩的更新的内容的数据。
12.如权利要求11所述的方法,其中所述每个数量中的一个在更新、压缩以及写入所述每个数量中的另一个之前被更新、压缩以及写入。
13.如权利要求1所述的方法,其中所述原始版本被全部更新,并接着在将所述压缩的更新版本写到所述存储设备之前被压缩。
14.一种用于产生更新数据包的方法,用于用存储块原位更新存储在非易失性存储设备中的内容的原始版本以产生内容的更新版本,所述方法包括:
将所述原始和更新版本中的任一个解压缩到包括用于每个独立地压缩的内容的分离的存储块的虚拟块中;以及
在保护缓冲器中模拟执行转换命令所需要的数据的保护。
15.如权利要求14所述的方法,进一步包括:将用于所述原始版本和更新版本中任一个的虚拟块描述存储在所述更新数据包中。
16.如权利要求14所述的方法,其中所述更新数据包与用于更新所述存储块的更新次序相关,以及其中
与转换命令有关的需要保护的数据的总的大小依赖于所述更新次序;所述大小小于依赖于与所述更新数据包相关的任意更新次序的被保护的内容的任意大小;所述任意更新次序从可与所述更新数据包相关的所有可能的更新次序中被任意地选择。
17.如权利要求14所述的方法,其中如果所述保护缓冲器不是充足的,则在所述更新数据包中保护执行转换命令所需要的数据在所述更新数据包中的保护。
18.一种用存储块原位更新存储在存储设备中的内容的原始版本以产生内容的更新版本的方法,所述方法包括:
获得更新数据包;
将所述原始版本复制到易失性存储器,其中如果所述原始版本在多于一个的存储块中包括被相互依赖地压缩的内容,则所述复制步骤包括将所述原始版本解压缩到易失性存储器中并保护解压缩所述原始版本所需要的至少一些内容;
更新所述原始版本以提供未压缩的更新版本;以及
将所述更新版本代替所述原始版本复制回非易失性存储器中,其中如果所述更新版本被压缩地存储在被相互依赖地压缩的块中,则所述复制步骤包括保护解压缩所述更新版本和相互依赖地压缩更新块所需要的至少一些内容;
其中所述原始版本和所述更新版本中的至少一个包括在被相互依赖地压缩的多于一个的存储块中的内容。
19.如权利要求18所述的方法,其中所述被保护的内容包括与压缩无关的版本中的实际内容。
20.如权利要求18所述的方法,其中所述被保护的内容包括添加到与压缩有关的版本中的内容。
21.如权利要求18所述的方法,其中所述被保护的内容包括版本的块的解压缩所需要的数据,所述块实质上与所述版本的紧接在前面的块相关。
22.如权利要求18所述的方法,进一步包括:所述更新数据包包括转换命令,且其中所述更新步骤包括保护与转换命令有关的数据。
23.如权利要求22所述的方法,其中所述原始版本的n(n>1)个块中的每一个的内容的至少一部分在所述更新版本中被修改,且其中所述复制步骤、所述压缩步骤、所述更新步骤和所述写入步骤包括执行m个块存储操作,每个块存储操作包括将内容写到所述非易失性存储设备中的块中;
所述块存储操作包括将所述更新版本的更新内容存储在所述非易失性存储设备中的更新块存储操作,所述更新内容至少根据所述更新数据包来产生;
其中2<=m<2n。
24.如权利要求18所述的方法,其中所述更新数据包与用于更新所述存储块的更新次序相关,且其中解压缩包括更新内容的存储块所需要的所述被保护的内容与包括更新内容的另一存储块相关,根据所述更新次序所述另一存储块晚于所述存储块被更新。
25.如权利要求18所述的方法,其中所述更新数据包与用于更新所述存储块的更新次序相关,且其中解压缩包括原始内容的存储块所需要的所述被保护内容与包括原始内容的另一存储块相关,根据所述更新次序所述另一存储块先于所述存储块被更新。
26.如权利要求18所述的方法,其中所述原始版本的n(n>1)个块中的每一个的内容的至少一部分在所述更新版本中被修改,且其中所述复制步骤、所述压缩步骤和所述写入步骤包括执行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所述的计算机程序,其被包含在计算机可读介质上。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US72393905P | 2005-10-06 | 2005-10-06 | |
US60/723,939 | 2005-10-06 | ||
PCT/IL2006/001165 WO2007039907A2 (en) | 2005-10-06 | 2006-10-05 | Methods and systems for updating content including a compressed version |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101326492A true CN101326492A (zh) | 2008-12-17 |
CN101326492B CN101326492B (zh) | 2013-07-17 |
Family
ID=37771115
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2006800462127A Active CN101326492B (zh) | 2005-10-06 | 2006-10-05 | 用于更新包括压缩版本的内容的方法和*** |
Country Status (5)
Country | Link |
---|---|
US (1) | US8418167B2 (zh) |
EP (1) | EP1934729B1 (zh) |
KR (1) | KR101359834B1 (zh) |
CN (1) | CN101326492B (zh) |
WO (1) | WO2007039907A2 (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103389919A (zh) * | 2013-07-30 | 2013-11-13 | 浙江中控技术股份有限公司 | 一种基于冗余设备***的数据处理方法及装置 |
CN103563255B (zh) * | 2011-04-11 | 2017-07-14 | 马维尔国际贸易有限公司 | 用于可执行代码的压缩与实时解压缩的方法 |
CN107247562A (zh) * | 2017-06-30 | 2017-10-13 | 郑州云海信息技术有限公司 | 一种压缩优化方法及其装置 |
CN107783728A (zh) * | 2016-08-31 | 2018-03-09 | 百度在线网络技术(北京)有限公司 | 数据存储方法、装置和设备 |
CN107948316A (zh) * | 2017-12-25 | 2018-04-20 | 北京搜狐新媒体信息技术有限公司 | 一种文件同步方法、装置及设备 |
CN108027863A (zh) * | 2015-11-13 | 2018-05-11 | 株式会社日立解决方案 | 文件***及程序 |
CN108959662A (zh) * | 2018-08-31 | 2018-12-07 | 百度在线网络技术(北京)有限公司 | 内容更新方法及装置 |
CN109634529A (zh) * | 2018-12-12 | 2019-04-16 | 浪潮(北京)电子信息产业有限公司 | 一种数据压缩方法和解压方法 |
CN111258621A (zh) * | 2019-11-19 | 2020-06-09 | 浙江瑞银电子有限公司 | 一种固件差异化升级方法 |
CN112541147A (zh) * | 2019-09-23 | 2021-03-23 | 北京轻享科技有限公司 | 一种内容发布管理方法及*** |
Families Citing this family (65)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9792308B2 (en) * | 1998-12-11 | 2017-10-17 | Realtime Data, Llc | Content estimation data compression |
US6624761B2 (en) | 1998-12-11 | 2003-09-23 | Realtime Data, Llc | Content independent data compression method and system |
US6601104B1 (en) | 1999-03-11 | 2003-07-29 | Realtime Data Llc | System and methods for accelerated data storage and retrieval |
US8692695B2 (en) | 2000-10-03 | 2014-04-08 | Realtime Data, Llc | Methods for encoding and decoding data |
US9143546B2 (en) | 2000-10-03 | 2015-09-22 | Realtime Data Llc | System and method for data feed acceleration and encryption |
US7386046B2 (en) | 2001-02-13 | 2008-06-10 | Realtime Data Llc | Bandwidth sensitive data compression and decompression |
US6667700B1 (en) * | 2002-10-30 | 2003-12-23 | Nbt Technology, Inc. | Content-based segmentation scheme for data compression in storage and transmission including hierarchical segment representation |
US8176186B2 (en) * | 2002-10-30 | 2012-05-08 | Riverbed Technology, Inc. | Transaction accelerator for client-server communications systems |
JP4576130B2 (ja) * | 2004-02-12 | 2010-11-04 | パイオニア株式会社 | 通信系アプリケーションプログラムのバージョン更新方法及びそのプログラム |
US20060288055A1 (en) * | 2005-06-08 | 2006-12-21 | Johnson Michael K | Methods, systems, and computer program products for provisioning software via a networked file repository in which a parent branch has a shadow associated therewith |
US8255362B2 (en) | 2005-06-08 | 2012-08-28 | rPath | Methods, systems, and computer program products for provisioning software using local changesets that represent differences between software on a repository and a local system |
US20060288054A1 (en) * | 2005-06-08 | 2006-12-21 | Johnson Michael K | Methods, systems, and computer program products for provisioning software via a file repository in which a version string is used to identify branches of a tree structure |
US8255363B2 (en) * | 2005-06-08 | 2012-08-28 | rPath | Methods, systems, and computer program products for provisioning software using dynamic tags to identify and process files |
US8203609B2 (en) * | 2007-01-31 | 2012-06-19 | The Invention Science Fund I, Llc | Anonymization pursuant to a broadcasted policy |
US8732087B2 (en) | 2005-07-01 | 2014-05-20 | The Invention Science Fund I, Llc | Authorization for media content alteration |
US20080013859A1 (en) * | 2005-07-01 | 2008-01-17 | Searete Llc, A Limited Liability Corporation Of The State Of Delaware | Implementation of media content alteration |
US9092928B2 (en) | 2005-07-01 | 2015-07-28 | The Invention Science Fund I, Llc | Implementing group content substitution in media works |
US9426387B2 (en) | 2005-07-01 | 2016-08-23 | Invention Science Fund I, Llc | Image anonymization |
US9230601B2 (en) | 2005-07-01 | 2016-01-05 | Invention Science Fund I, Llc | Media markup system for content alteration in derivative works |
US8910033B2 (en) | 2005-07-01 | 2014-12-09 | The Invention Science Fund I, Llc | Implementing group content substitution in media works |
US7860342B2 (en) * | 2005-07-01 | 2010-12-28 | The Invention Science Fund I, Llc | Modifying restricted images |
US20070005423A1 (en) * | 2005-07-01 | 2007-01-04 | Searete Llc, A Limited Liability Corporation Of The State Of Delaware | Providing promotional content |
US9583141B2 (en) | 2005-07-01 | 2017-02-28 | Invention Science Fund I, Llc | Implementing audio substitution options in media works |
US9065979B2 (en) | 2005-07-01 | 2015-06-23 | The Invention Science Fund I, Llc | Promotional placement in media works |
US20070130232A1 (en) * | 2005-11-22 | 2007-06-07 | Therrien David G | Method and apparatus for efficiently storing and managing historical versions and replicas of computer data files |
US9215512B2 (en) | 2007-04-27 | 2015-12-15 | Invention Science Fund I, Llc | Implementation of media content alteration |
JP4944686B2 (ja) * | 2007-06-28 | 2012-06-06 | ソニーモバイルコミュニケーションズ株式会社 | ソフトウェア更新方法および携帯端末装置 |
US8655858B1 (en) * | 2008-11-13 | 2014-02-18 | Amazon Technologies, Inc. | Digital content reconstruction and distribution |
US8250040B2 (en) * | 2009-06-15 | 2012-08-21 | Microsoft Corporation | Storage or removal actions based on priority |
EP2333660B1 (en) * | 2009-12-04 | 2016-10-05 | ST-Ericsson SA | Method of and apparatus for providing a logical view of data stored in an non-volatile memory |
CN101763269A (zh) * | 2010-01-27 | 2010-06-30 | 中兴通讯股份有限公司 | 一种软件安装包的制作方法 |
US10210162B1 (en) | 2010-03-29 | 2019-02-19 | Carbonite, Inc. | Log file management |
CN102473444B (zh) * | 2010-06-08 | 2015-10-14 | 松下电器(美国)知识产权公司 | 内容管理服务器及内容管理方法 |
US8413132B2 (en) * | 2010-09-13 | 2013-04-02 | Samsung Electronics Co., Ltd. | Techniques for resolving read-after-write (RAW) conflicts using backup area |
KR101720101B1 (ko) * | 2011-03-18 | 2017-03-28 | 삼성전자주식회사 | 메모리 시스템에 데이터를 쓰는 쓰기 방법 및 메모리 시스템의 데이터 쓰기 방법 |
US8745338B1 (en) | 2011-05-02 | 2014-06-03 | Netapp, Inc. | Overwriting part of compressed data without decompressing on-disk compressed data |
US8997085B2 (en) * | 2011-06-24 | 2015-03-31 | International Business Machines Corporation | Image delta-based upgrade of complex stack in software appliance |
EP2727114B1 (en) | 2011-06-28 | 2020-04-22 | Hewlett-Packard Enterprise Development LP | Shiftable memory |
EP2771885B1 (en) | 2011-10-27 | 2021-12-01 | Valtrus Innovations Limited | Shiftable memory supporting atomic operation |
WO2013115779A1 (en) | 2012-01-30 | 2013-08-08 | Hewlett-Packard Development Company, L.P. | Word shift static random access memory (ws-sram) |
WO2013130109A1 (en) | 2012-03-02 | 2013-09-06 | Hewlett-Packard Development Company L.P. | Shiftable memory defragmentation |
US9431074B2 (en) | 2012-03-02 | 2016-08-30 | Hewlett Packard Enterprise Development Lp | Shiftable memory supporting bimodal storage |
CN103457905B (zh) * | 2012-05-28 | 2015-09-09 | 腾讯科技(深圳)有限公司 | 数据同步方法、***及设备 |
US9170804B2 (en) * | 2012-07-05 | 2015-10-27 | Nokia Technologies Oy | Method and apparatus for modifying compressed files |
TWI501110B (zh) * | 2013-02-25 | 2015-09-21 | Pixart Imaging Inc | 通訊協定系統及其自動更新資料的方法 |
KR102005227B1 (ko) * | 2013-03-12 | 2019-07-30 | 삼성전자 주식회사 | 데이터 처리 시스템과 이의 동작 방법 |
US9442944B2 (en) | 2013-11-12 | 2016-09-13 | Dropbox, Inc. | Content item purging |
CN104714819B (zh) * | 2013-12-16 | 2019-11-15 | 中兴通讯股份有限公司 | 文件***升级包制作方法、升级方法及装置、终端 |
CN105404521B (zh) * | 2014-05-30 | 2017-05-31 | 广州市动景计算机科技有限公司 | 一种增量升级方法及相关装置 |
CN107077117B (zh) * | 2014-10-29 | 2019-10-01 | 西门子公司 | 基于上下文知识的自动压缩算法选择和参数调节 |
WO2016121442A1 (ja) * | 2015-01-26 | 2016-08-04 | 日立オートモティブシステムズ株式会社 | 車載制御装置、プログラム書き込み装置、プログラム生成装置及びプログラム |
US20170083254A1 (en) * | 2015-09-19 | 2017-03-23 | Qualcomm Incorporated | Secure transaction management techniques |
US9496893B1 (en) * | 2015-10-29 | 2016-11-15 | Yahoo! Inc. | Content compression and/or decompression |
CN105786563B (zh) * | 2016-02-19 | 2018-11-09 | 联州(上海)信息科技有限公司 | 实现软件在线更新的装置、***和方法 |
CN110402428B (zh) * | 2017-03-24 | 2024-01-30 | 日立安斯泰莫株式会社 | 车载控制装置、及程序更新软件 |
US10374628B2 (en) * | 2017-04-05 | 2019-08-06 | International Business Machines Corporation | In-place data compression with small working memory |
US10416993B2 (en) * | 2017-10-06 | 2019-09-17 | International Business Machines Corporation | Mobile application update manager |
US11119981B2 (en) * | 2017-10-27 | 2021-09-14 | Hewlett Packard Enterprise Development Lp | Selectively redirect-on-write data chunks in write-in-place file systems |
US10642602B2 (en) * | 2017-12-12 | 2020-05-05 | Nxp Usa, Inc. | NVM architecture with OTA support |
FR3084496B1 (fr) * | 2018-07-25 | 2020-08-07 | Orange | Procede et dispositif de generation d'instructions destinees a un dispositif pour realiser une mise a jour sur place d'un fichier de donnees |
JP7225596B2 (ja) * | 2018-07-30 | 2023-02-21 | トヨタ自動車株式会社 | プログラム更新システム、プログラム更新サーバーおよび車両 |
KR20200089490A (ko) * | 2019-01-17 | 2020-07-27 | 삼성전자주식회사 | 펌웨어 업데이트 방법 및 이를 수행하는 장치 |
US10768861B1 (en) | 2019-02-27 | 2020-09-08 | Microsoft Technology Licensing, Llc | In-place safe decompression |
US11758022B2 (en) * | 2020-09-24 | 2023-09-12 | Servicenow, Inc. | Compression of machine-generated data |
US11971857B2 (en) * | 2021-12-08 | 2024-04-30 | Cohesity, Inc. | Adaptively providing uncompressed and compressed data chunks |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3234075B2 (ja) * | 1993-11-30 | 2001-12-04 | ローム株式会社 | 立体映像再生装置 |
US6018747A (en) | 1997-11-26 | 2000-01-25 | International Business Machines Corporation | Method for generating and reconstructing in-place delta files |
IL125846A0 (en) * | 1998-08-19 | 1999-04-11 | Emony | Incremental program update |
US7028251B2 (en) * | 2000-03-02 | 2006-04-11 | Iora, Ltd. | System and method for reducing the size of data difference representations |
US6912711B1 (en) * | 2000-05-25 | 2005-06-28 | International Business Machines Corporation | Method of applying an update to a contained collection of program and data files based upon versions |
US6832373B2 (en) * | 2000-11-17 | 2004-12-14 | Bitfone Corporation | System and method for updating and distributing information |
US7134041B2 (en) * | 2001-09-20 | 2006-11-07 | Evault, Inc. | Systems and methods for data backup over a network |
US7058783B2 (en) * | 2002-09-18 | 2006-06-06 | Oracle International Corporation | Method and mechanism for on-line data compression and in-place updates |
WO2004031961A1 (en) * | 2002-09-30 | 2004-04-15 | Insignia Solutions Plc | Efficient system and method for updating a memory device |
JP2004152136A (ja) * | 2002-10-31 | 2004-05-27 | Matsushita Electric Ind Co Ltd | データ更新システム、データ更新システムの差分データ生成装置及びプログラム、並びに更新後ファイル復元装置及びプログラム |
US6892207B2 (en) * | 2003-01-24 | 2005-05-10 | Hewlett-Packard Development Company, L.P. | Method of updating data in a compressed data structure |
KR101438215B1 (ko) | 2003-06-23 | 2014-09-04 | 레드 밴드 리미티드 | 저장기기에 저장된 콘텐츠의 버전을 갱신하는 방법 및시스템 |
WO2005003963A2 (en) | 2003-07-07 | 2005-01-13 | Red Bend Ltd. | Method and system for updating versions of content stored in a storage device |
US7600225B2 (en) * | 2003-07-21 | 2009-10-06 | Microsoft Corporation | System and method for intra-package delta compression of data |
US7886093B1 (en) * | 2003-07-31 | 2011-02-08 | Hewlett-Packard Development Company, L.P. | Electronic device network supporting compression and decompression in electronic devices |
KR100880783B1 (ko) * | 2003-09-03 | 2009-02-02 | 휴렛-팩커드 디벨롭먼트 컴퍼니, 엘 피 | 전자 장치에서의 3-단계 부팅 프로세스 |
JP4267420B2 (ja) * | 2003-10-20 | 2009-05-27 | 株式会社日立製作所 | ストレージ装置及びバックアップ取得方法 |
US7549042B2 (en) * | 2003-12-16 | 2009-06-16 | Microsoft Corporation | Applying custom software image updates to non-volatile storage in a failsafe manner |
US7103740B1 (en) * | 2003-12-31 | 2006-09-05 | Veritas Operating Corporation | Backup mechanism for a multi-class file system |
EP1738256B1 (en) | 2004-03-15 | 2018-05-02 | Red Bend Ltd. | Method and apparatus for reliably updating a stored version of content |
US7971199B1 (en) * | 2004-05-03 | 2011-06-28 | Hewlett-Packard Development Company, L.P. | Mobile device with a self-updating update agent in a wireless network |
US20060112113A1 (en) * | 2004-11-08 | 2006-05-25 | Jinsheng Gu | Static file system differencing and updating |
-
2006
- 2006-10-05 CN CN2006800462127A patent/CN101326492B/zh active Active
- 2006-10-05 EP EP06796156.5A patent/EP1934729B1/en active Active
- 2006-10-05 WO PCT/IL2006/001165 patent/WO2007039907A2/en active Application Filing
- 2006-10-05 KR KR1020087010881A patent/KR101359834B1/ko active IP Right Grant
- 2006-10-06 US US11/543,996 patent/US8418167B2/en active Active
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103563255B (zh) * | 2011-04-11 | 2017-07-14 | 马维尔国际贸易有限公司 | 用于可执行代码的压缩与实时解压缩的方法 |
CN103389919B (zh) * | 2013-07-30 | 2016-09-14 | 浙江中控技术股份有限公司 | 一种基于冗余设备***的数据处理方法及装置 |
CN103389919A (zh) * | 2013-07-30 | 2013-11-13 | 浙江中控技术股份有限公司 | 一种基于冗余设备***的数据处理方法及装置 |
CN108027863B (zh) * | 2015-11-13 | 2021-06-22 | 株式会社日立解决方案 | 文件***及程序 |
CN108027863A (zh) * | 2015-11-13 | 2018-05-11 | 株式会社日立解决方案 | 文件***及程序 |
CN107783728A (zh) * | 2016-08-31 | 2018-03-09 | 百度在线网络技术(北京)有限公司 | 数据存储方法、装置和设备 |
CN107247562A (zh) * | 2017-06-30 | 2017-10-13 | 郑州云海信息技术有限公司 | 一种压缩优化方法及其装置 |
CN107247562B (zh) * | 2017-06-30 | 2020-03-06 | 郑州云海信息技术有限公司 | 一种压缩优化方法及其装置 |
CN107948316A (zh) * | 2017-12-25 | 2018-04-20 | 北京搜狐新媒体信息技术有限公司 | 一种文件同步方法、装置及设备 |
CN107948316B (zh) * | 2017-12-25 | 2020-11-03 | 北京搜狐新媒体信息技术有限公司 | 一种文件同步方法、装置及设备 |
CN108959662A (zh) * | 2018-08-31 | 2018-12-07 | 百度在线网络技术(北京)有限公司 | 内容更新方法及装置 |
CN108959662B (zh) * | 2018-08-31 | 2022-09-27 | 百度在线网络技术(北京)有限公司 | 内容更新方法及装置 |
CN109634529A (zh) * | 2018-12-12 | 2019-04-16 | 浪潮(北京)电子信息产业有限公司 | 一种数据压缩方法和解压方法 |
CN112541147A (zh) * | 2019-09-23 | 2021-03-23 | 北京轻享科技有限公司 | 一种内容发布管理方法及*** |
CN111258621B (zh) * | 2019-11-19 | 2022-08-02 | 浙江瑞银电子有限公司 | 一种固件差异化升级方法 |
CN111258621A (zh) * | 2019-11-19 | 2020-06-09 | 浙江瑞银电子有限公司 | 一种固件差异化升级方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2007039907A3 (en) | 2007-06-07 |
KR101359834B1 (ko) | 2014-02-07 |
WO2007039907A2 (en) | 2007-04-12 |
CN101326492B (zh) | 2013-07-17 |
US20070083571A1 (en) | 2007-04-12 |
EP1934729A2 (en) | 2008-06-25 |
KR20080067639A (ko) | 2008-07-21 |
EP1934729B1 (en) | 2021-06-23 |
US8418167B2 (en) | 2013-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101326492B (zh) | 用于更新包括压缩版本的内容的方法和*** | |
CN105009067B (zh) | 管理对存储数据单元的操作 | |
EP1934727B1 (en) | Method and system for in-place updating content stored in a storage device | |
CN1329841C (zh) | 建立和恢复图像文件的方法和*** | |
JP6491605B2 (ja) | 記憶されたデータユニットに対する操作の管理 | |
CN102378969A (zh) | 拷贝卷中存储的数据的去重复 | |
KR20070003578A (ko) | 데이터 무결성의 검증을 지연시킨 파일 시스템 | |
KR20070003576A (ko) | 파일 시스템 무결성에 대한 최적화된 시동 검증 | |
CN103714105A (zh) | 更新导航装置的数据库的方法和装置 | |
US20080172584A1 (en) | Method and system for in-place updating content stored in a storage device | |
US20080320461A1 (en) | Method and Apparatus for Reliable In-Place Update | |
KR102275240B1 (ko) | 저장된 데이터 유닛들의 동작 관리 | |
KR102165860B1 (ko) | 슬로티드 페이지의 더블 헤더 로깅 방법 및 데이터베이스 장치 | |
CN115904799A (zh) | 利用参数服务器执行的机器学习模型的训练方法及装置 | |
CN116185711A (zh) | 数据备份和恢复方法及装置 | |
JP2004341841A (ja) | 復元方法及びそのシステム | |
CN115826869A (zh) | 嵌入式芯片Flash防掉电方法、设备及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |