首页 / 专利库 / 纺织设备及加工 / 针织机 / 经编机 / 用于更新电子文件的系统及其中的方法

用于更新电子文件的系统及其中的方法

阅读:295发布:2022-07-19

专利汇可以提供用于更新电子文件的系统及其中的方法专利检索,专利查询,专利分析的服务。并且为例如字节级文件差分提供了系统和方法。文件版本之间的 软件 /可执行的改变包括限定为源代码改变的主要改变/逻辑改变以及次要改变。次要改变一般由主要改变引起并由软件编译器/链接器应用产生。次要改变包括地址改变、 指针 目标地址改变以及地址偏移改变。所提供的预处理系统和方法在文件版本间使用近似规则来去除/减少次要改变,并把有关去除这些改变的信息编码在对应差别文件的信息中。,下面是用于更新电子文件的系统及其中的方法专利的具体信息内容。

1.一种用于更新电子文件的系统,包括:
第一设备,用于产生包括电子文件的原始版本和新版本之间的经编 码差别的差别文件,其中所述第一设备包括:
用于对应于由代码行删除、代码行添加以及代码行修改中的至 少一种所引起的地址偏移,来识别所述原始版本和新版本之间的差别的 组件;
用于通过使用所述原始版本的文本段的地址与所述新版本的 对应文本段的地址之间的至少一种关系而修改所述原始版本的指令目标 地址,来去除所述原始版本和新版本所共有的文本段中的所识别差别的 组件;
用于产生包括具有所述经修改目标地址的指令的所述原始版 本的修改版本的组件;
用于利用所述新版本和所述原始版本的所述修改版本来产生 所述差别文件的组件;以及
第二设备,接收所述差别文件并用所述差别文件在所述第二设备中 产生所述新版本。
2.权利要求1的系统,其中用于去除所述原始版本和新版本所共有的
文本段中的所识别差别的组件进一步包括:
用于识别所述原始版本和新版本间所共有的第一和第二文本段的组 件,其中所述原始版本中的第一文本段包括第一可计算指令,而所述新版 本中的第二文本段包括第二可计算指令;
用于识别所述原始和新版本间所共有的第三和第四文本段的组件,其 中所述原始版本中的第三文本段包括对应所述第一可计算指令的第一目 标地址,其中所述新版本中的第四文本段包括对应所述第二可计算指令的 第二目标地址;
用于通过用第三和第四函数单元的开始地址之间的第一差别及用第 一和第二函数单元的开始地址之间的第二差别而修改第一指令值,来从所 述第二可计算指令产生第二指令值的组件;以及
用于用所述第二指令值替换所述第一可计算指令的第一指令值的组 件。
3.权利要求1的系统,进一步包括用于通过修改所述原始版本中的数 据指针值来去除包括指向所述原始版本和新版本所共有的数据段的 数据指针的指令中的所识别差别的组件,其中使用由当前数据指针 指向的所述原始版本中的数据段的开始地址与所述新版本中的对应 数据段的开始地址之间的差别来修改数据指针值。
4.权利要求3的系统,其中用于去除包括数据指针的指令中的所识别差 别的组件进一步包括:
用于识别所述原始版本和新版本之间所共有的第一和第二代码段的 组件,其中所述原始版本中的第一代码段包括第一数据指针而所述新版本 中的第二代码段包括第二数据指针;
用于识别所述原始版本和新版本之间所共有的第一和第二数据单元 的组件,其中所述原始版本中的第一数据单元包括对应所述第一数据指针 的第一目标地址,其中所述新版本中的第二数据单元包括对应所述第二数 据指针的第二目标地址;
用于通过用所述第一和第二数据单元的开始地址间的差别而修改第 一指针值,来从所述第二数据指针产生第二数据指针值的组件;以及
用于用所述第二数据指针值替换所述第一数据指针的第一数据指针 值的组件。
5.权利要求1的系统,其中所述第二设备包括从个人计算机、便携式 计算设备、蜂窝电话、便携式通信设备以及个人数字助理当中选择 的至少一种基于处理器的设备。
6.权利要求1的系统,其中所述第一设备用至少一种耦合来传送差别 文件到所述第二设备,其中所述至少一种耦合为无线耦合、有线耦 合以及混合无线/有线耦合当中的至少一种。
7.一种用于产生差别文件的设备,包括:
用于接收电子文件的原始版本和新版本的装置;
用于识别所述原始版本和新版本所共有的代码单元的装置;
用于识别所述代码单元所共有的指令的装置,其中所述指令包括指 示处理所述电子文件的对应版本的另一部分的指令值;
用于从所述原始版本的第一指令产生第一指令值的装置;
用于从所述新版本的第二指令产生第二指令值的装置,其中所述第 二指令对应于所述第一指令;
用于以所述第二指令值替换所述第一指令的第一指令值的装置;
用于产生包括具有所述第二指令值的第一指令的所述原始版本的修 改版本的装置;以及
用于利用所述新版本和所述原始版本的所述修改版本来产生所述差 别文件的装置。
8.一种用于减小包括电子文件的原始版本和新版本之间的经编码差别 的差别文件的大小的方法,包括:
对应于由代码行删除、代码行添加以及代码行修改中的至少一种所 引起的地址偏移,来识别所述原始和新版本之间的差别;
通过使用所述原始版本的文本段与所述新版本的对应文本段的地址 之间的至少一种关系而修改所述原始版本的指令的目标地址,来去除所 述原始和新版本所共有的文本段中的所识别差别;
产生包括具有经修改目标地址的指令的所述原始版本的修改版本; 以及
利用所述新版本和所述原始版本的所述修改版本来产生所述差别文 件。
9.权利要求8的方法,其中去除进一步包括:
识别所述原始版本和新版本间所共有的第一和第二文本段,其中所 述原始版本中的第一文本段包括第一可计算指令,而所述新版本中的第 二文本段包括第二可计算指令;
识别所述原始版本和新版本间所共有的第三和第四文本段,其中所 述原始版本中的第三文本段包括对应所述第一可计算指令的第一目标地 址,其中所述新版本中的第四文本段包括对应所述第二可计算指令的第 二目标地址;
通过用第三和第四函数单元的开始地址之间的第一差别及用第一 和第二函数单元的开始地址之间的第二差别而修改第一指令值,来从所 述第二可计算指令产生第二指令值;以及
用所述第二指令值替换所述第一可计算指令的第一指令值。
10.权利要求8的方法,进一步包括通过修改所述原始版本中的数据指 针值来去除包括指向所述原始版本和新版本所共有的数据段的数据 指针的指令中的所识别差别,其中使用由当前数据指针指向的所述 原始版本中的数据段的开始地址与所述新版本的对应数据段的开始 地址之间的差别来修改数据指针值。
11.权利要求10的方法,其中去除包括数据指针的指令中的所识别差别 进一步包括:
识别所述原始版本和新版本之间所共有的第一和第二代码段,其中 所述原始版本中的第一代码段包括第一数据指针,而所述新版本中的第 二代码段包括第二数据指针;
识别所述原始版本和新版本之间所共有的第一和第二数据单元,其 中所述原始版本中的第一数据单元包括对应所述第一数据指针的第一目 标地址,其中所述新版本中的第二数据单元包括对应所述第二数据指针 的第二目标地址;
从所述第二数据指针产生第二数据指针值;以及
用所述第二数据指针值替换所述第一数据指针的第一数据指针值。
12.权利要求11的方法,其中产生所述第二数据指针值包括用所述第一 和第二数据单元的开始地址间的差别来修改第一数据指针值。
13.权利要求10的方法,进一步包括产生所述原始版本的修改版本,所 述修改版本包括具有经修改数据指针的指令。
14.权利要求10的方法,进一步包括合并共有数据单元以形成共有数据
15.权利要求14的方法,其中合并共有数据单元包括:
当所述原始版本的第一数据单元与所述新版本的第一数据单元大小 相等、所述原始版本的第一数据单元的结束地址等于所述原始版本的第 二数据单元的开始地址以及所述新版本的第一数据单元的结束地址等于 所述新版本的第二数据单元的开始地址时,组合所述原始版本的第一和 第二数据单元并组合所述新版本的对应第一和第二数据单元以形成共有 数据块;以及
对另外的可合并数据单元重复该组合操作。
16.权利要求15的方法,进一步包括合并共有文本段以形成共有函数 块。
17.权利要求16的方法,其中合并共有文本段包括:
当所述原始版本的第一文本段与所述新版本的第一文本段大小相 等、所述原始版本的第一文本段的结束地址等于所述原始版本的第二文 本段的开始地址以及所述新版本的第一文本段的结束地址等于所述新版 本的第二文本段的开始地址时,组合所述原始版本的第一和第二文本段 并组合所述新版本的对应第一和第二文本段以形成共有函数块;以及
对另外的可合并文本段重复该组合操作。
18.一种用于执行文件差分的方法,包括:
接收电子文件的原始版本和新版本;
识别所述原始版本和新版本所共有的代码单元;
识别所述代码单元所共有的指令,其中所述指令包括有关所述电子 文件的对应版本的另一部分的指令值;
从所述原始版本的第一指令解码第一指令值;
从所述新版本的第二指令产生第二指令值,其中所述第二指令对应 于所述第一指令;
用所述第二指令值替换所述第一指令的第一指令值;
产生包括具有所述第二指令值的第一指令的所述原始版本的修改版 本;以及
在所述新版本和所述原始版本的所述修改版本之间执行文件差分并 产生差别文件。
19.权利要求18的方法,进一步包括从相关的映射文件中提取共有代码 单元,其中所述共有代码单元包括共有函数单元和共有数据单元。
20.权利要求18的方法,进一步包括合并所述代码单元的共有函数单元 以形成共有函数块。
21.权利要求20的方法,其中合并所述代码单元的共有函数单元包括:
当所述原始版本的第一函数单元与所述新版本的第一函数单元大小 相等、所述原始版本的第一函数单元的结束地址等于所述原始版本的第 二函数单元的开始地址以及所述新版本的第一函数单元的结束地址等于 所述新版本的第二函数单元的开始地址时,组合所述原始版本的第一和 第二函数单元并组合所述新版本的对应第一和第二函数单元以形成共有 函数块;以及
对另外的可合并函数单元重复该组合操作。
22.权利要求20的方法,进一步包括编码所述共有函数块。
23.权利要求18的方法,进一步包括合并所述代码单元的共有数据单元 以形成共有数据块。
24.权利要求23的方法,其中合并所述代码单元的共有数据单元包括:
当所述原始版本的第一数据单元与所述新版本的第一数据单元大小 相等、所述原始版本的第一数据单元的结束地址等于所述原始版本的第 二数据单元的开始地址以及所述新版本的第一数据单元的结束地址等于 所述新版本的第二数据单元的开始地址时,组合所述原始版本的第一和 第二数据单元并组合所述新版本的对应第一和第二数据单元以形成共有 数据块;以及
对另外的可合并数据单元重复该组合操作。
25.权利要求23的方法,进一步包括编码所述共有数据块。
26.权利要求18的方法,其中所述原始版本和新版本所共有的代码单元 是共有函数单元,其中所述第一指令包括第一可计算指令而所述第 二指令包括第二可计算指令,其中产生所述第二指令值包括用包括 目标地址的所述原始和新版本的共有函数单元的开始地址之间的第 一差别以及用包括所述第一和第二可计算指令的所述原始版本和新 版本的共有函数单元的开始地址之间的第二差别来修改所述第一指 令值。
27.权利要求18的方法,其中所述代码单元包括函数单元。
28.权利要求27的方法,其中产生所述第一指令值包括产生第一可计算 指令的当前指令地址与第一可计算指令的目标地址之间的差别。
29.权利要求27的方法,其中产生所述第二指令值包括:
产生第一可计算指令的当前指令地址与第一可计算指令的目标地址 之间的差别;
产生新版本的第一共有函数单元的开始地址与原始版本的对应第一 共有函数单元的开始地址之间的差别;以及
产生所述新版本的第二共有函数单元的开始地址与所述原始版本的 对应第二共有函数单元的开始地址之间的差别。
30.权利要求18的方法,其中所述代码单元包括数据单元而所述指令包 括数据指针。
31.权利要求18的方法,其中所述原始版本和新版本所共有的代码单元 是共有数据单元,其中所述第一指令包括第一数据指针而所述第二 指令包括第二数据指针,其中所述第一指令值包括所述第一数据指 针值而所述第二指令值包括所述第二数据指针值,其中产生所述第 二指令值包括通过用第一和第二数据单元的开始地址之间的差别修 改所述第一数据指针值来产生第二数据指针值。
32.权利要求18的方法,进一步包括:
将所述差别文件传送到便携式处理系统;以及
用所述差别文件在所述便携式处理系统中产生所述新版本。
33.权利要求32的方法,进一步包括:
合并所述代码单元的共有函数单元以形成共有函数块;
合并所述代码单元的共有数据单元以形成共有数据块;以及
编码所述共有函数块和所述共有数据块以便用于在便携式处理系统 中产生所述新版本。
34.一种用于判定电子文件之间的差别的方法,包括:
接收电子文件的原始版本和新版本;
识别所述原始和新版本之间所共有的第一和第二函数单元,其中所 述原始版本中的第一函数单元包括第一可计算指令而所述新版本中的第 二函数单元包括第二可计算指令;
识别所述原始和新版本之间所共有的第三和第四函数单元,其中所 述原始版本中的第三函数单元包括对应所述第一可计算指令的第一目标 地址,其中所述新版本中的第四函数单元包括对应所述第二可计算指令 的第二目标地址;
从所述第二可计算指令产生第二指令值;
用该第二指令值替换所述第一可计算指令的第一指令值;以及
产生包括具有所述第二指令值的第一指令的原始版本的修改版本; 以及
利用所述新版本和所述原始版本的所述修改版本来产生差别文件, 所述差别文件包括所述差别。
35.权利要求34的方法,其中产生所述第二指令值包括用所述第三和第 四函数单元的开始地址之间的第一差别以及用所述第一和第二函数 单元的开始地址之间的第二差别来修改所述第一指令值。
36.权利要求34的方法,进一步包括:
识别所述原始版本和新版本之间所共有的第一和第二代码段,其中 所述原始版本中的第一代码段包括第一数据指针,而所述新版本中的第 二代码段包括第二数据指针;
识别所述原始版本和新版本之间所共有的第一和第二数据单元,其 中所述原始版本中的第一数据单元包括对应所述第一数据指针的第一目 标地址,其中所述新版本中的第二数据单元包括对应所述第二数据指针 的第二目标地址;
从所述第二数据指针产生第二数据指针值;
用该第二数据指针值替换所述第一数据指针的第一数据指针值;以 及
产生包括具有所述第二数据指针值的第一数据指针的原始版本的修 改版本。
37.权利要求36的方法,其中产生所述第二数据指针值包括产生由当前 数据指针所指向的原始版本中的数据段的开始地址与所述新版本中 的对应数据段的开始地址之间的差别。
38.权利要求34的方法,进一步包括合并共有函数单元以形成共有函数 块。
39.权利要求34的方法,进一步包括合并共有数据单元以形成共有数据 块。
40.权利要求34的方法,进一步包括:
将所述差别文件传送到便携式处理系统;以及
用所述差别文件在所述便携式处理系统中产生所述新版本。

说明书全文

技术领域

所公开的实施例涉及用差别文件更新电子文件。

背景技术

运行在处理器、微处理器和/或处理单元上以提供某种功能的软件随 时间经常改变。此改变可以是由例如纠正软件文件中的bug或错误、适应 技术发展或添加新特征的需要而引起的。特别的,掌控在移动处理设备例 如移动无线设备上的嵌入式软件组件常常包括很多需要纠正的软件bug。 软件包括以人类可读的美国信息交换标准码(ASCII)普通文本文件或二 进制代码形式的一个或多个文件。软件文件可以分成通常称为模或组件 的较小单元。
基于便携式处理器的设备如移动处理设备典型地包括实时操作系统 (RTOS),在所述实时操作系统中设备的所有软件组件链接为一个单独的 大文件。此外,在这些移动无线设备中,通常没有提供文件系统支持。而 且,该单独的大文件需要使用慢速通信链路如无线电、红外线或串行链接 来预加载或嵌入到所述设备中。
通过慢速通信链接来更新移动处理设备的大文件的障碍包括有关将 更新的文件递送到设备的时间、带宽以及成本。对递送大文件到移动处理 设备的问题的一个现有解决方案包括使用压缩。尽管通常使用若干现有的 压缩算法,但是,经常是即使压缩过的文件对于通过慢速、昂贵、窄带的 通信链路下载到设备也太大。
更新文件的另一典型解决方案使用差别程序来产生修正的文件如何 区别于原始文件的说明。有生成这种差别数据的可得到的差别程序。但是, 即使压缩过,对于通过有关的通信协议传送,使用这些差别程序生成的差 别文件有时也太大。
附图说明
图1是示出一个实施例中文件差分和更新的框图
图2是在图1的实施例下产生增量(delta)文件的流程图
图3是可执行文件的原始和新版本的框图。
图4是图1和图2的实施例中预处理电子文件的不同版本的流程图。
图5是在图4的实施例中的预处理电子文件的不同版本的代码(文本) 段的流程图。
图6是在图5的实施例中的为电子文件的原始版本的代码(文本)段 产生新目标地址值的流程图。
图7是在一个实施例中的文件的原始版本和新版本的框图,示出关于 为电子文件的原始版本的代码(文本)段产生新目标地址值而描述的不同 地址(和相应记号)。
图8是在图4的实施例中的预处理电子文件的原始和新版本的数据段 的流程图。
图9是在图8的实施例中的为电子文件的原始版本的数据段产生新的 数据指针值的流程图。
图10是在一个实施例中的文件的原始版本和新版本的框图,示出为 电子文件的原始版本产生新数据指针值所使用的不同地址(和相应记号)。
图11是在图4的实施例中的共有函数单元的提示合并的流程图。
图12是在图4的实施例中的共有数据单元的提示合并的流程图。
在所述图中,相同的参考号识别相同或基本相似的元素或行为。为了 易于识别对任何特殊元件或行为的讨论,参考号中最重要的位指的是该元 素第一次被介绍的图号(如,元件124关于图1被第一次介绍和讨论)。

具体实施方式

提供了系统和方法,用于预处理文件的原始和新版本作为原始和新版 本之间的差别文件产生的一部分。该预处理支持进一步减小差别文件的大 小。软件/文件版本间的可执行改变包括限定为源代码改变的主要改变/逻 辑改变以及次要改变。次要改变一般是由主要改变引起的并由软件编译器 /链接器应用来产生。次要改变包括由主要改变引起的并由软件编译器/链 接器应用所产生的地址改变、指针目标地址改变以及地址偏移改变。所提 供的预处理系统和方法在文件版本间使用近似规则来去除/减少次要改变, 并把有关去除这些改变的信息编码到对应的差别文件的信息中。
在此详细描述用于在电子文件的两个版本之间产生差别文件的系统 和方法,其在这里称为文件差分。图1是示出在一个实施例中的文件差分 和更新的框图。所述文件差分和更新包括差分组件和更新组件。差分组件, 此处称为文件差别生成器,根据电子文件的原始版本和新版本在第一基于 处理器的或计算机系统中产生差别文件。更新组件,此处称为更新生成器, 使用差别文件和原始文件的掌控拷贝在第二基于处理器的或计算机系统 上产生新文件的拷贝。
在以下说明中,介绍了若干具体细节以提供对本发明的实施例的完全 理解和实现说明。但是,本领域的技术人员将认识到本发明可以不需具体 细节的一个或多个而实现,或利用其他组件、系统等等来实现。在其他例 子中,不显示或不详细说明公知的结构或操作,以避免模糊本发明的方面。
参考图1,第一计算机系统102和第二计算机系统104通过通信路径 106通信。如在本领域公知的,计算机102和104包括一起工作的计算组 件和设备的任何集合。计算机系统102和104也可以是较大的计算机系统 或网络中的组件或子系统。
通信路径106包括任何介质,文件通过所述介质在计算机102和104 之间交换和传送。因此,路径106包括无线连接、有线连接和混合无线/ 有线连接。通信路径106还包括到包括本地局域网(LAN)、城域网(MAN)、 广域网(WAN)、专用网、局间或后端网络以及Internet的网络的耦合或 连接。此外,通信路径106包括可移动的固定介质如软盘硬盘驱动器和 CD-ROM盘,以及电话线、总线和电子邮件消息。
第一通信系统102接收电子文件的原始的、或旧的版本110和新版本 112。新文件112通常是原始文件110的更新或修正的版本,但并不限制 于此。电子文件110和112包括:软件文件,包括动态链接库文件、共享 对象文件、嵌入式软件组件(EBSC)、固件文件、可执行文件;数据文件, 包括十六进制数据文件、系统配置文件;以及包括个人使用数据的文件, 但并不限制于此。因为任何类型的文件都可以看作字节流,以下依据上下 文而可将文件描述为字节流。
如下所述,文件差别生成器114的组件接收新文件112,把它与原始 文件110比较,并计算被比较文件间的差别。这些差别包括被比较文件间 的字节级差别,但并不限制于此。文件差别生成器114在比较期间产生差 别文件116,这里称作增量文件116。
一个实施例的文件差别生成器114耦合于主机系统102的组件之间, 其中所述组件包括至少一个处理器、至少一个控制器、至少一个存储器设 备以及至少一个总线,但并不限制于此。一个实施例的文件差别生成器114 的组件包括至少一个预处理子系统124和至少一个差分子系统134。预处 理子系统124也称为预处理器124,包括在预处理算法、程序或例程的至 少一个的控制下运行的至少一个处理器。同样,差分子系统134包括在差 分算法、程序或例程的至少一个的控制下运行的至少一个处理器。
增量文件116的内容提供了对新文件112和原始文件110之间差别的 有效表示。增量文件116包括表现有关文件的新的或当前版本与该文件的 以前版本之间差别的元数据以及代替和/或插入操作的真实数据,如2002 年5月13日提出的标题为“Byte-Level File Differencing and Updating Algorithms”、申请专利号10/146,545的美国专利申请所述。文件差别生成 器114用最少量的字节和预定义的格式或协议在增量文件116中提供原始 110和新112文件之间的任何差别,从而提供在空间上优化的增量文件。
增量文件116通过通信路径106传送或传输到另一处理系统104。传 送之前,增量文件116可用本领域公知的压缩技术来压缩,但并不限制于 此。掌控在接收系统104上的更新生成器118用增量文件116与掌控的原 始文件110H一起产生或创建新文件的拷贝112C。新文件的拷贝112C随 后用于更新掌控在目的为修正或更新的客户设备上的原始文件110H。当 该更新过程完成时,现在存储在第二计算机系统上的新文件与第一计算机 系统102中接收的新文件112一致。
原始文件和新文件之间的差别通常比新文件小,如果是差别而不是整 个新文件被传输和存储,则显著节省了存储和传输。这对掌控着通过可通 常是慢速和昂贵的连接如无线或蜂窝状连接而更新的程序的移动电子设 备(客户设备)特别重要。增量文件减小的大小提供了很多改进,其中之 一包括将增量文件传输到客户设备所需的带宽减小;较小的文件意味着传 送需要较小的带宽。而且,较小的文件需要较少的传输时间,并且因此降 低了文件传送被中断的可能性且同时减少了接收文件中的传输错误。另 外,通过非安全连接传输增量文件比传输新软件映像更安全。所有这些改 进提高了用户满意度。
图2是在图1的实施例中的产生增量文件的流程图。在块204,当新 文件和原始文件在第一处理或计算机系统中被接收时,操作开始。对应于 新和原始文件的映射文件也被接收。映射文件是包括软件映像的每个符号 的开始地址和大小的高级文本文件,其中符号实例包括函数和全局变量。 映射文件由编译器/链接器应用来输出,并且也称为日志文件、符号文件和 /或列表文件。
在块206,在新文件和原始文件的内容之间执行预处理操作以便识别 两文件内容的共有段和简单模式。通常,预处理使用所识别共有段和模式 来减少/去除新和原始文件间的次要改变。一个实施例的预处理包括减少和 /或去除由与逻辑改变相关联的地址偏移所引起的原始和新文件之间的改 变,如下所述,但并不限制于此。于是,该预处理减少了文件共有段之间 的差别,包括次要改变,因此提高了差别计算的效率。
预处理之后,在块208,计算新文件和经修改原始文件之间的字节级 差别。在块210,编码和合并经计算的差别并通过遵循预定义的编码格式 而产生增量文件。如果可能,在块212,然后如本领域公知的优化增量文 件以进一步减小文件大小,并且在块214,提供优化的增量文件作为输出。
如上所述,在新文件和原始文件的内容之间执行预处理操作以便识别 两文件内容中的共有段和简单模式。共有段和简单模式的知识用于减少/ 去除次要改变,因此造成整体性能增强。
如上所述,电子文件或软件更新在系统和客户设备之间的传输会花大 量时间,尤其是通过低带宽通道传输时。一个实例是蜂窝电话软件升级。 典型的实现是通过蜂窝无线耦合发送新和原始软件版本之间的字节级文 件差别或改变。出现相当大的传递时间是因为可执行文件的新和原始版本 之间的差别比其对应的源文件之间的差别更复杂。
出现这些新和原始文件版本之间的复杂差别一部分是因为源文件中 小的改变经常引入贯穿可执行文件的较大改变。例如,可执行文件中引入 的改变包括两种主要类型的改变:主要改变和次要改变。主要改变,也称 为逻辑改变,是由从原始文件中删除源代码行、添加源代码行到新文件以 及修改源代码行所引起的源代码改变。次要改变限定为包括但不局限于由 主要改变引起并由编译器/链接器应用产生的地址改变、指针目标地址改变 以及地址偏移改变。下面所述的预处理例程减少/去除了次要改变并把有关 去除这些改变的信息编码到对应增量文件的信息中。
对可执行文件中引入的次要改变的分析从假设可执行文件包括代码 (文本)段和数据段开始。图3是框图300,示出可执行文件的原始版本 V1和新版本V2。原始版本V1和新版本V2都包括代码(文本)段310 和320及数据段312和322。新版本V2和原始版本V1差别在于新版本 V2包括了大小为0x500的附加的新代码块302。新代码块302的存在引入 了两种次要改变。
第一种次要改变发生在新版本V2的代码(文本)段320并导致分支 指令BRANCH具有不同的分支位移,也称为相对地址或分支偏移,由在 分支指令地址BRANCH和目标指令地址TARGET之间添加新代码块302 引起。在此实例中,目标指令地址是0x1000,而分支指令地址是0x3000, 导致原始版本中0x2000(0x3000—0x1000)的分支位移。在分支指令地址 和目标指令地址之间的新代码块(大小为0x500)的添加把分支指令地址 改变为0x3500(0x3000+0x500)。所以,新版本V2中的分支位移改变为 0x2500(0x3500—0x1000)。
第二种次要改变发生在新版本V2的数据段322中并导致数据指针 POINTER中存储的值改变或存储对应数据区的绝对地址的数据指针值改 变。数据指针值的改变由在代码(文本)段中添加新代码302引起。新代 码302插入在数据段322之前的原始文件中的一个点。因此,在原始版本 中为0x8000的数据指针值在新版本中改变为0x8500(0x8000+0x500)。
由于软件开发变得越来越复杂,次要改变遍布在可执行文件中,以至 当考虑字节级文件差分的上下文时次要改变的数量超过了主要改变。下述 的预处理例程使用文件的原始和新版本之间的关系来减少编码在增量文 件中的有关次要改变的差别的信息数量。利用最少的信息,当进行字节级 差分和重构时可以达到级联计算的效果,从而减小了增量文件的大小。
通常,一个实施例的预处理例程包括用于最小化增量文件大小的至少 一个近似例程和至少一个合并例程。近似例程作用是根据文本(代码)和 数据模型假设来减少/去除次要改变。合并例程,也称为提示合并例程,以 用于传送到接收新版本的设备的最低成本平来编码模型信息。如上所 述,模型信息用于设备中的新版本的恢复,但并不限制于此。
图4是图1和图2的实施例中预处理电子文件的不同版本的流程图 206。在块402,当接收到文件的新和原始版本时,从相关的映射文件中提 取共有函数单元和共有数据单元。在块404,合并共有函数单元以形成共 有函数块,其在以下及参考图11详细描述。同样,合并共有数据单元以 形成共有数据块,其在以下参考图12详细说明。然后,在块408,预处理 系统的预处理例程预处理新和原始文件的代码(文本)段,其在以下参考 图5、6、7描述。在块410,预处理例程随后或同时预处理新和原始文件 的数据段,其在以下参考图8、9、10描述。在块412,编码共有函数块和 共有数据块,并输出原始文件的经修改版本以用于执行字节级文件差分。
图5是在图4的实施例中的预处理电子文件的不同版本的代码(文本) 段的流程图408。通常,文件的代码(文本)段由一个或多个函数单元或 块组成。在块502,一个实施例的代码(文本)段的预处理从识别原始和 新文件的每个函数单元的开始和结束地址开始,其中原始文件的函数单元 在这里称为“原始函数单元”而新文件的函数单元称为“新函数单元”。 函数单元的开始和结束地址使用映射文件识别,但并不限制于此。
在块504,预处理器接下来给每个唯一的函数单元分配唯一的索引或 索引值。给唯一函数单元分配索引值支持对原始和新文件版本都是共有的 函数单元的识别。随后,当在文件的原始和新版本中都发现相同的函数单 元时,该函数被分配一个共有索引值,但该实施例并不限制于此。
例如,考虑包括原始函数单元F1、F2、F3和F4的原始文件版本,以 及包括新函数单元F1、F2、F3和F5的新文件版本。如果预处理器分别用 索引值1、2、3、4和5来索引函数单元F1、F2、F3、F4和F5,则下表 是针对原始文件版本组合的:
Index       startAddressV1        endAddressV1
1           0x8040                0x8062
2           0x8062                0x8080
3           0x8086                0x809e
4           0x9056                0x90a8
同样,下表是针对新文件版本组合的:
Index       startAddressV2        endAddressV2
1           0x8060                0x8082
2           0x8082                0x80a0
3           0x80a6                0x80be
5           0x90e6                0x9138
在这两个表中,startAddress通常限定为对应函数单元的开始地址; 因此“startAddressV1”是原始文件的函数单元的startAddress,而 “startAddressV2”是新文件的函数单元的startAddress。进一步地, endAddress通过把函数单元大小与函数单元开始地址相加而产生,即
endAddress=startAddress+函数单元大小
但是该实施例并不限制于此。于是,endAddressV1限定为原始文件的函数 单元的endAddress,而endAddressV2限定为新文件的函数单元的 endAddress。对结束地址的该限定这里也适用于数据单元,但并不限制于 此。
接下来,在块506,预处理器使用来自于上表的索引值、开始地址和 结束地址的信息产生共有函数单元的HintTable。该HintTable包括组合在 一个表中的共有函数单元的信息,包括索引值、原始文件版本(V1)的原 始函数单元的开始和结束地址以及新文件版本(V2)的新函数单元的开始 和结束地址。HintTable的信息使用任何数量的本领域公知的技术来设置。 使用以上信息,一个实施例的HintTable如下产生:
Index     startAddrV1      endAddrV1     startAddrV2      endAddrV2
1         0x8040           0x8062        0x8060           0x8082
2         0x8062           0x8080        0x8082           0x80a0
3         0x8086           0x809e        0x80a6           0x80be
在块508,预处理器继续为包括目标地址的原始函数单元的指令产生 新目标地址值。图6是在图5的实施例下为电子文件的原始版本的代码(文 本)段产生新目标地址值的流程图508。
在描述新目标地址值的产生时,与函数单元相关联的各种地址用特殊 记号说明如下。指令地址在此通常用记号“addr”表示;因此,“addrV1” 表示原始函数单元中的指令地址,而“addrV2”表示新函数单元中的指令 地址。目标地址在此通常用记号“targetAddr”表示;因此,“targetAddrV1” 表示原始函数单元中的目标地址,而“targetaddrV2”表示新函数单元中的 对应目标地址。此外,包括targetAddrV1的原始函数单元的开始地址在此 用记号“targetStartAddrV1”表示,是包括targetAddrV1的原始函数单元 的开始地址,而包括targetAddrV2的新函数单元的开始地址在此用记号 “targetStartAddrV2”表示。
图7是一个实施例中的文件的原始版本V1和新版本V2的框图,示 出关于为电子文件原始版本的代码(文本)段产生新目标地址值而描述的 不同地址(和相应记号)。第一共有函数单元CFU A和第二共有函数单元 CFU B对原始版本V1和新版本V2都是共有的。原始版本V1的共有函数 单元CFU B具有开始地址startAddrV1,并包括位于指令地址addrV1的可 计算指令cal_insA。该可计算指令在以下描述。原始版本V1的共有函数 单元CFU A具有开始地址targetStartAddrV1,并包括可计算指令cal-insA 的目标地址targetAddrV1。
同样地,新版本V2的共有函数单元CFU B具有开始地址startAddrV2, 并包括位于指令地址addrV2的可计算指令cal_insB。新版本V2的共有函 数单元CFU A具有开始地址targetStartAddrV2,并包括可计算指令cal-insB 的目标地址targetAddrV2。
回到图6,在块602,通过从原始文件版本的原始函数单元j读取未 预处理的可计算指令开始产生新目标地址值,其中j是计数器值,值初始 化为1并且接下来每次增加1直到j=n,其中n代表原始版本和新版本间 的共有函数单元的总数。
然后在块604产生或计算可计算指令的当前目标地址,如下所述。对 包括目标地址的任何指令,例如象程序计数器相关的跳转指令和加载/存储 指令,目标地址用当前指令地址和对应指令解码来计算。使用以上提及的 记号,当前目标地址计算变成
targetAddrV1=addrV1+解码(指令),或可替换地,
解码(指令)=targetAddrV1—addrV1。
如果值[targetAddrV1—addrV1]已知,该指令也可基于对应的编码方案来计 算:
指令=编码(targetAddrV1—addrV1)
这一类指令称为可计算指令,在此用“cal-ins”表示,而值(targetAddrV1 —addrV1)称为可计算指令的值或“指令值”。
对共有函数单元中的可计算指令,一个实施例的预处理器使用原始版 本中的指令值连同原始函数单元开始地址及新函数单元开始地址一起产 生共有函数单元的新版本中的指令值。利用以上提及的记号,于是,使用 原始版本中的指令值(targetAddrV1—addrV1)、startAddrV1、 targetStartAddrV1、startAddrV2和targetStartAddrV2来产生或计算新版本 中的指令值(targetAddrV2—addrV2)。
因此,在块606,一旦产生原始文件的目标地址(targetAddrV1),预 处理器访问HintTable以识别k,即包括目标地址targetAddrV1的原始文件 版本的函数单元。在块608,利用原始函数单元j及其目标函数单元k的 识别,预处理器从HintTable中读取startAddrV1、startAddrV2、 targetStartAddrV1和targetStartAddrV2。
接下来,在块610,预处理器现在为cal_insB产生指令值(targetAddrV2 —addrV2)以替换cal_insA的指令值,如下所述。一个实施例的预处理器 在至少两个假设之下操作,但并不限制于此。第一假设假定在原始版本和 新版本中具有相同大小的共有函数单元具有在原始和新版本上的相同指 令结构,这里所述指令结构包括指令类型和指令顺序。第二假设假定对于 满足第一假设的共有函数单元中的任何可计算指令,当所述可计算指令是 函数调用或可计算指令的目标地址落入也满足第一假设的共有函数单元 中时,两个不变量通常在原始和新版本上保持如下:
addrV1-startAddrV1=addrV2-startAddrV2

targetAddrV1-targetStartAddrV1=targetAddrV2-targetStartAddrV2。
于是,根据这两个假设,在块610,预处理器为cal_insA产生新指令值 (targetAddrV2—addrV2),如
targetAddrV2-addrV2=(targetAddrV1-addrV1)
                   +(targetStartAddrV2-targetStartAddrV1)
                   -(startAddrV2-startAddrV1),
在此称为公式1。
在块612,使用cal_insA的新指令值,预处理器将cal_insA修改为
指令=编码(targetAddrV2—addrV2)。
在原始版本的地址addrV1的原始指令cal_insA就以新指令替换。
在块614,预处理器随后判定是否有原始函数单元j的任何可计算指 令仍然是未预处理。当可计算指令仍然是未预处理,预处理器返回去在块 602从原始函数单元j读取另一个或可替换地下一个未预处理的可计算指 令,并且继续如上所述进行预处理。
如在块614所判定的,当原始函数单元j的所有可计算指令都预处理 后,在块616,预处理器判定计数器中的值j是否大于值n。判定j不大于 n表明有共有函数单元未被预处理,所以在块618,计数器中的值j增加1, 并继续如上所述进行预处理。
判定j大于n表明原始文件版本的所有函数单元都已被预处理。随后, 在块620,预处理器输出包括新文件的近似版本的原始文件的修改版本。
如以上参考图4所述的,在块410,除了根据文本(代码)模型假设 以去除次要改变,预处理器和近似例程还起到根据数据模型假设以去除次 要改变的作用。图8是在图4的实施例下的用来预处理电子文件的原始和 新版本的数据段的流程图410。通常,文件的数据段由一个或多个全局变 量单元或块组成,所述单元或块此处称为“数据单元”。
在块802,一个实施例的数据段的预处理开始于对原始和新文件的每 个数据单元的开始和结束地址的识别,这里原始文件的数据单元表示为 “原始数据单元”,而新文件的数据单元表示为“新数据单元”。数据单元 的开始和结束地址用映射文件识别,但并不限制于此。
在块804,预处理接下来给每个唯一的数据单元分配唯一的索引或索 引值。给每个唯一的数据单元分配索引值支持对原始和新文件版本都是共 有的数据单元的识别。随后,当在文件的原始和新版本中发现相同的数据 单元时,给该数据单元分配一共有索引值,但该实施例并不限制于此。给 唯一的数据单元的索引值的分配与上述给唯一的函数单元的索引值的分 配相同,但并不限制于此。同样,根据索引值所组织的并包括每个数据单 元的开始和结束地址的表的产生与用于原始和新文件版本的函数单元的 上述表的产生相同。但是,可替换的实施例可使用任何数量的本领域公知 的技术来分配索引值和产生表。
接下来,在块806,预处理器用来自上表的索引值、开始地址和结束 地址的信息来产生共有数据单元的HintTable。该HintTable包括组合在一 张表中的共有数据单元信息,包括索引值、原始文件版本(V1)的原始数 据单元的开始和结束地址以及新文件版本(V2)的新数据单元的开始和结 束地址。该HintTable的产生与参考共有函数单元的HintTable在以上所描 述的相同,但是在可替换实施例中可使用任何数量的本领域公知的技术来 产生该HintTable。
在块808,预处理器继续为原始版本的数据指针产生新数据指针值。 图9是在图8的实施例下的用于为电子文件原始版本中的数据指针产生新 数据指针值的流程图808。
数据指针是指向数据单元中的一些数据的指令。接着描述此处用于描 述新数据指针值的产生的记号。包括数据指针的指令的地址在此通常用记 号“dataPointer”表示;因此,“dataPointerV1”表示原始版本中的dataPointer, 而“dataPointerV2”表示新版本中的dataPointer。包括由数据指针所指向 的数据的数据单元的开始地址在此用“dataStartAddr”表示;因此 “dataStartAddrV1”表示原始版本中的dataStartAddr,而“dataStartAddrV2” 表示新版本中的dataStartAddr。
图10是一个实施例中的原始版本V1和新版本V2的框图,示出用于 为电子文件原始版本产生新数据指针值的不同地址(和对应记号)。原始 版本V1和新版本V2都包括代码(文本)段和数据段。数据段包括对原 始文件版本V1和新文件版本V2都是共有的共有数据单元CDU A。原始 版本V1包括指向原始版本的共有数据单元CDU A中的一些数据的代码 (文本)段中的数据指针dataPointerV1,这里原始版本V1的CDU A的开 始地址是dataStartAddrV1。同样,新版本V2包括指向新版本V2的共有 数据单元CDU A中的一些数据的代码(文本)段中的数据指针 dataPointerV2,这里新版本V2的CDU A的开始地址是dataStartAddrV2。 dataStartAddr地址来自与文件的原始版本V1和新版本V2的软件映像相关 联的映射文件。
回到图9,在块902,新数据指针值的产生通过识别原始版本中的未 预处理的数据指针开始。一个实施例的预处理器用原始版本中的指针值 (dataPointerV1)连同包括dataPointerV1所指向数据的数据单元的开始地 址(dataStartAddrV1)及它在新版本中的对应数据单元的开始地址 (dataStartAddrV2)一起产生新版本中的数据指针值(dataPointerV2),如 下所述。这是通过在块904通过访问HintTable以识别k、即原始版本中的 一数据单元来完成的,所述数据单元包括由dataPointerV1指向的数据。在 块906,利用对数据单元k的识别,预处理器从HintTable中读取 dataStartAddrV1和dataStartAddrV2。
在块908,预处理器随后产生数据指针值(dataPointerV2)以替换 dataPointerV1,如下所述。一个实施例的预处理器在有关数据单元的至少 两个附加假设下操作,这里称为第三和第四假设,但并不限制于此。第三 假设假定在原始版本和新版本中具有相同大小的共有数据单元在原始和 新版本上具有相同数据结构,这里所述数据结构包括数据变量的类型、大 小和顺序。第四假设假定对满足第三假设的共有数据单元中的任何数据指 针,不变式在原始和新版本上通常保持如下:
dataPointerV1-dataStartAddrV1=dataPointerV2-dataStartAddrV2。
因此,根据第三和第四假设,在块908,预处理器为新数据单元产生新数 据指针值(dataPointerV2),如
dataPointerV2=dataPointerV1+(dataStartAddrV2-dataStartAddrV1),
在此称为公式2。
在块910,利用数据指针值dataPointerV2,预处理器在原始版本中的 对应地址处用dataPointerV2替换dataPointerV1。在块912,预处理器随后 判定是否有原始数据单元的任何数据指针仍然是未预处理。
在块912,当原始数据单元的数据指针仍然是未预处理,预处理器返 回以从原始数据单元读取另一个或可替换地下一个未预处理的数据指针, 且如上所述继续进行预处理。如在块912所判定的,当原始数据单元的所 有数据指针都预处理了,在块914,预处理器输出包括新文件的近似版本 的原始文件的修改版本。
如以上在HintTable中所用的共有函数单元及共有数据单元的开始和 结束地址共同称为“算法提示”或“提示”,因为它们用于判定不同文件 版本间的共有单元的相对位置。如此,所述提示被传送给接收差别或增量 文件以用于从增量文件和原始文件恢复新文件版本的客户设备,如上所 述。由于传送提示通过与用于传送增量文件和其他信息到客户设备相同的 低带宽通道来执行,一个实施例的预处理器执行提示合并以合并HintTable 的共有函数单元和共有数据单元而不影响预处理算法或例程的性能。该合 并减小了包括提示的文件大小并因此减小了传送给客户设备的信息量。
利用由上述预处理代码(文本)段所得到的共有函数单元,并返回到 图4,在块404,在提示合并例程或算法的控制下的预处理器合并共有函 数单元以形成共有函数块。图11是在图4的实施例下的共有函数单元的 提示合并404的流程图。
同样,在块406,预处理器使用由上述数据段的预处理所产生的共有 数据单元来合并共有数据单元以形成共有数据块。图12是在图4的实施 例下的共有数据单元的提示合并406的流程图。下面依次描述共有函数单 元和共有数据单元的提示合并。
尽管为了清楚在此分开描述了共有函数单元和共有数据单元的提示 合并,所述实施例可以按任意顺序和任意组合来执行与合并相关联的操 作。有关记号,函数或数据单元的开始地址在此通常用如上所述的记号 “startAddress”表示;因此,“startAddressV1”表示原始函数或数据单元 的开始地址,而“startAddressV2”表示在新函数或数据单元中的对应开始 地址。同样,函数或数据单元的结束地址在此通常用记号“endAddress” 表示;因此,“endAddressV1”表示原始函数或数据单元的结束地址,而 “endAddressV2”表示在新函数或数据单元中的对应结束地址。
如以上参考图5所述的,产生共有函数单元的HintTable,其包括组合 在一张表中的共有函数单元的信息,所述信息包括索引值、原始文件版本 V1的原始函数单元的开始和结束地址以及新文件版本V2的新函数单元的 开始和结束地址。上面提供的HintTable用作描述共有函数单元的提示合 并的例子,但所述实施例并不限制于此:
Index   startAddrV1    endAddrV1    startAddrV2   endAddrV2
1       0x8040         0x8062       0x8060        0x8082
2       0x8062         0x8080       0x8082        0x80a0
3       0x8086         0x809e       0x80a6        0x80be
参考图4和图11以及该HintTable,在块1102,共有函数单元的提示 合并404的操作开始于预处理器将HintTable的所有n个记录标记为可用、 设置计数器j=1以及从关联的HintTable读取函数单元j和单元(j+1)的 原始和新版本。在此例中,单元j和单元(j+1)的值对应于提示表的索引 值,这里j=1,2,...(n-1),但并不限制于此。此外,j的值初始地设置为等于 1且随后在进行提示合并404和处理了共有单元时用本领域公知的方法来 增加。所以,在块1102,读取与索引值1和2(j+1=1+1=2)关联的共有 函数单元的信息。
在块1104,预处理器判定共有函数单元j的原始版本V1和新版本V2 的大小是否相等。该判定通过在原始版本V1和新版本V2的开始和结束 地址之间求差来完成,如
endAddrV1(j)-startAddrV1(j)=endAddrV2(j)-startAddrV2(j),
但并不限制于此。当原始版本V1和新版本V2具有不同大小的文件时, 在块1112,操作进行为判定j的值是否小于量(n-1)。
当原始版本V1和新版本V2具有相同大小时,在块1116,预处理器 判定共有函数单元j的原始版本V1的结束地址是否与共有函数单元(j+1) 的原始版本V1的开始地址相同,如
endAddrV1(j)=startAddrV1(j+1),
但并不限制于此。当共有函数单元j的原始版本V1的结束地址与共有函 数单元(j+1)的原始版本V1的开始地址不同时,在块1112,操作进行为 判定j的值是否小于量(n-1)。
当共有函数单元j的原始版本V1的结束地址与共有函数单元(j+1) 的原始版本V1的开始地址相同时,在块1108,预处理器判定共有函数单 元j的新版本V2的结束地址是否与共有函数单元(j+1)的新版本V2的 开始地址相同,如
endAddrV2(j)=startAddrV2(j+1),
但并不限制于此。当共有函数单元j的新版本V2的结束地址与共有函数 单元(j+1)的新版本V2的开始地址不同时,在块1112,操作进行为判定 j的值是否小于量(n-1)。
当共有函数单元j的新版本V2的结束地址与共有函数单元(j+1)的 新版本V2的开始地址相同时,在块1110,预处理器合并共有函数单元j 和共有单元(j+1)的信息以形成共有函数块来替换单元(j+1)的记录, 然后把单元j的记录标记为不可用。在块1112,操作然后进行为判定j的 值是否小于量(n-1)。
在块1112,预处理器判定j的值是否小于量(n-1)。当j的值等于量 (n-1),表明所有函数单元都已预处理,在块1116,操作进行为输出所有 可用的记录作为共有函数块,并且操作返回。当j的值小于量(n-1),表 明函数单元仍然是未预处理,在块1114,j的值增加,并且在块1102,操 作进行为读取对应于j的新值的共有函数单元的信息。如上所述继续进行 预处理。
下面参考图11和HintTable说明包括共有函数单元的提示合并的例 子。操作开始于预处理器把所有三个记录标记为可用并从HintTable中读 取函数单元1和2的原始和新版本。然后预处理器判定共有函数单元1的 原始版本V1和新版本V2是否大小相等。该判定通过在原始版本V1和新 版本V2的开始和结束地址之间求差来完成,如
endAddrV1(1)-startAddrV1(1)=endAddrV2(1)-startAddrV2(1)。
用来自HintTable的真实值代替产生
(0x8062)-(0x8040)=(0x8082)-(0x8060)。
由于原始版本V1和新版本V2大小相等,预处理器接下来判定共有 函数单元1的原始版本V1的结束地址是否与共有函数单元2的原始版本 V1的开始地址相同,如
endAddrV1(1)=startAddrV1(2)。
用来自HintTable的真实值代替产生共有函数单元1的原始版本V1的结束 地址与共有函数单元2的原始版本V1的开始地址相同的判定,如
(0x8062)=(0x8062)。
因为共有函数单元1的原始版本V1的结束地址与共有函数单元2的 原始版本V1的开始地址相同,接下来判定共有函数单元1的新版本V2 的结束地址是否与共有函数单元2的新版本V2的开始地址相同,如
endAddrV2(1)=startAddrV2(2)。
用来自HintTable的真实值代替产生共有函数单元1的新版本V2的结束地 址与共有函数单元2的新版本V2的开始地址相同的判定,如
(0x8082)=(0x8082)。
响应于共有函数单元1的新版本V2的结束地址与共有函数单元2的 新版本V2的开始地址相同的判定,预处理器合并共有函数单元1和共有 函数单元2的信息以形成共有函数块如下:
Index    startAddrV1       endAddrV1     startAddrV2      endAddrV2
1        0x8040            0x8062        0x8060           0x8082     不可用
2        0x8040            0x8080        0x8060           0x80a0     可用
3        0x80860x809e                    0x80a6           0x80be     可用
继续该例子,预处理器接下来从HintTable读取函数单元2和3的原 始和新版本。预处理器判定共有函数单元2的原始版本V1和新版本V2 是否大小相等。该判定通过在原始版本V1和新版本V2的开始和结束地 址之间求差来完成,如
endAddrV1(2)-startAddrV1(2)=endAddrV2(2)-startAddrV2(2)。
用来自HintTable的真实值代替产生
(0x8080)-(0x8040)=(0x80a0)-(0x8060),
表示原始版本V1和新版本V2大小相等。
预处理器接下来判定共有函数单元2的原始版本V1的结束地址是否 与共有函数单元3的原始版本V1的开始地址相同,如
endAddrV1(2)=startAddrV1(3)。
用来自HintTable的真实值代替产生判定共有函数单元2的原始版本V1 的结束地址与共有函数单元3的原始版本V1的开始地址不同的判定,如
(0x8080)不等于(0x8086)。
因为共有函数单元2的原始版本V1的结束地址与共有函数单元3的 原始版本V1的开始地址不同,操作返回并且共有函数单元2和3不合并 以形成共有函数块。
合并共有函数单元之后,上面例子的HintTable的可用记录如下输出:
Index     startAddrV1     endAddrV1       startAddrV2      endAddrV2
2         0x8040          0x8080          0x8060           0x80a0
3         0x8086          0x809e          0x80a6           0x80be
一个实施例的预处理器使用与上述关于共有函数单元的类似的方式 来执行共有数据单元的提示合并。参考图4和图12,共有数据单元的提示 合并406的操作开始于预处理器标记HintTable的所有n个记录、设置计 数器j=1以及在块1202从关联的HintTable读取数据单元j和(j+1)的 原始和新版本。单元j和单元(j+1)的值对应于提示表的索引值,这里 j=1,2,...(n-1),但并不限制于此。
在块1204,预处理器判定共有数据单元j的原始版本V1和新版本V2 的大小是否相等。该判定通过在原始版本V1和新版本V2的开始和结束 地址之间求差来完成,如
endAddrV1(j)-startAddrV1(j)=endAddrV2(j)-startAddrV2(j),
但并不限制于此。当原始版本V1和新版本V2具有不同大小的文件时, 在块1212,操作进行为判定j的值是否小于量(n-1)。
当原始版本V1和新版本V2大小相等时,在块1206,预处理器判定 共有数据单元j的原始版本V1的结束地址是否与共有数据单元(j+1)的 原始版本V1的开始地址相同,如
endAddrV1(j)=startAddrV1(j+1),
但并不限制于此。当共有数据单元j的原始版本V1的结束地址与共有数 据单元(j+1)的原始版本V1的开始地址不同时,在块1212,操作进行 为判定j的值是否小于量(n-1)。
当共有数据单元j的原始版本V1的结束地址与共有数据单元(j+1) 的原始版本V1的开始地址相同时,在块1208,预处理器判定共有数据单 元j的新版本V2的结束地址是否与共有数据单元(j+1)的新版本V2的 开始地址相同,如
endAddrV2(j)=startAddrV2(j+1),
但并不限制于此。当共有数据单元j的新版本V2的结束地址与共有数据 单元(j+1)的新版本V2的开始地址不同时,在块1212,操作进行为判 定j的值是否小于量(n-1)。
当共有数据单元j的新版本V2的结束地址与共有数据单元(j+1)的 新版本V2的开始地址相同时,在块1210,预处理器合并共有数据单元j 和共有数据单元(j+1)的信息以形成共有数据块来替换单元(j+1)的记 录,然后把单元j的记录标记为不可用。在块1212,操作进行为判定j的 值是否小于量(n-1)。
在块1212,预处理器判定j的值是否小于量(n-1)。当j的值等于量 (n-1),表明所有数据单元都已预处理,在块1216,操作进行为输出 HintTable中的可用记录作为共有数据块,并且操作返回。当j的值小于量 (n-1),表明数据单元未被预处理,在块1214,j的值增加,并且在块1202, 操作进行为读取对应于j的新值的共有数据单元的信息。如上所述继续进 行预处理。
所述用于预处理电子文件的不同版本的系统和方法可应用于使用任 意数量的指令架构的任意数量的处理和/或基于处理器的系统的软件和可 执行文件。例如,此处的系统和方法可用于架构,如由D.Jagger 和D.Seal的“ARM架构参考手册”第二版所述。ARM架构是基于16/32 位嵌入式精简指令集计算机(RISC)核心的微处理器架构,并引入Thumb 16位指令集。当用在架构中时,例如,以上提及的可计算指令将 包括ARM/Thumb指令集的“利用链接分支(BL)”和“利用链接分支以 及将模式改变为ARM/Thumb(BLX)”指令。此外,以上提及的数据指针 包括ARM/Thumb指令集的DCD指令。
作为使用上述预处理的设备和/或系统的例子,接收和使用增量文件 的计算设备可以是掌控更新所需的对应软件应用的客户设备,例如蜂窝电 话、移动电子设备、移动通信设备、个人数字助理以及其他基于处理器的 设备。通过使运营商和设备制造商能够经由他们的无线基础设施有效地发 布电子文件内容和应用,对范围从固件到嵌入式应用的所有移动设备软件 提供这种支持。
得益于上述预处理的系统的另一例子包括使用有线串行连接将增量 文件从掌控文件差别生成器的设备传送到掌控文件更新生成器的设备的 系统。这些系统典型地具有低的传送速率,并且因为传送速率低,减小增 量文件大小是一种实现较快传送时间的途径。
得益于使用预处理的系统的又一例子包括使用无线电通信将增量文 件从掌控文件差别生成器的设备传送到运行文件更新生成器的设备的系 统。在经受与无线连接相关的低可靠性的同时,这些系统也具有低的传送 速率。在这些系统中使用较小的增量文件提供了几个优点。例如,较小的 文件大小导致较快的增量文件传送时间。较快的传送时间在为设备用户节 约时间的同时也减少了将错误引入增量文件中的机会,从而提高了系统可 靠性。而且,利用蜂窝通信,减少的传送时间造成为典型地按分钟为服务 付费的消费者节约了成本。
作为另一优点,较小的增量文件减小了传送增量文件到客户设备所需 的带宽。减小的带宽使得通过分配的通道支持更多客户设备。如同减少的 传送时间,这也导致为无线服务提供商减少了运营成本。
用于预处理文件的原始和新版本作为在原始和新文件之间产生的差 别文件的一部分的上述系统包括用于产生差别文件的第一设备,以及接收 差别文件并用差别文件在第二设备中产生新文件版本的第二设备。第一设 备包括减小差别文件大小的至少一个组件,所述减小通过以下进行:对应 于由代码行删除、代码行添加以及代码行修改的至少一种所引起的地址偏 移来识别原始和新版本之间的差别;通过使用原始版本的文本段的地址与 新版本的对应文本段的地址之间的至少一种关系来修改原始版本的指令 的目标地址,来去除原始和新版本之间所共有的文本段中的所识别差别; 以及产生原始文件的修改版本,所述修改版本包括具有经修改目标地址的 指令。
在一个实施例中,去除原始和新版本之间所共有的文本段中的所识别 差别进一步包括:识别原始和新版本间所共有的第一和第二文本段,其中 原始版本中的第一文本段包括第一可计算指令而新版本中第二文本段包 括第二可计算指令;识别原始和新版本间所共有的第三和第四文本段,其 中原始版本中的第三文本段包括对应第一可计算指令的第一目标地址,其 中新版本中的第四文本段包括对应第二可计算指令的第二目标地址;通过 用第三和第四函数单元的开始地址之间的第一差别及用第一和第二函数 单元的开始地址之间的第二差别修改第一指令值,来从第二可计算指令产 生第二指令值;以及用第二指令值替换第一可计算指令的第一指令值。
文件预处理作为一个实施例的差别文件产生的部分进一步包括通过 修改原始版本中的数据指针值来去除包括指向原始和新版本所共有的数 据段的数据指针的指令中的所识别差别,其中使用由当前数据指针指向的 原始版本中的数据段的开始地址与新版本中的对应数据段的开始地址之 间的差别来修改数据指针值。去除包括数据指针的指令中的所识别差别进 一步包括:识别原始和新版本之间所共有的第一和第二代码段,其中原始 版本中的第一代码段包括第一数据指针,而新版本中的第二代码段包括第 二数据指针;识别原始和新版本之间所共有的第一和第二数据单元,其中 原始版本中的第一数据单元包括对应第一数据指针的第一目标地址,其中 新版本中的第二数据单元包括对应第二数据指针的第二目标地址;通过用 第一和第二数据单元的开始地址间的差别修改第一指针值,来从第二数据 指针产生第二数据指针值;以及用第二数据指针值替换第一数据指针的第 一数据指针值。
一个实施例的系统中的第一设备用至少一种耦合来传送差别文件到 第二设备,其中至少一种耦合是无线耦合、有线耦合以及混合无线/有线耦 合中的至少一种。
一个实施例的系统中的第二设备包括至少一个基于处理器的设备,如 个人计算机、便携式计算设备、蜂窝电话、便携式通信设备以及个人数字 助理。
上述用于预处理文件的原始和新版本作为在原始和新版本之间的差 别文件产生的部分的系统包括用于产生差别文件的设备。该设备包括:用 于接收电子文件原始版本和新版本的装置;用于识别原始和新版本所共有 的代码单元的装置;用于识别代码单元所共有的指令的装置,其中所述指 令包括指示对相应文件的另一部分处理的指令值;用于从原始版本的第一 指令产生第一指令值的装置;用于从新版本的第二指令产生第二指令值的 装置,其中第二指令对应于第一指令;用于用第二指令值替换第一指令的 第一指令值的装置;以及用于产生包括具有第二指令值的第一指令的原始 文件的修改版本的装置。
上述用于预处理文件的原始和新版本作为原始和新版本之间的差别 文件产生的部分的系统包括相关的方法。这些方法当中有一种方法用于减 小包括电子文件的原始版本和新版本之间的经编码差别的差别文件的大 小。一个实施例的方法包括:对应于由代码行删除、代码行添加以及代码 行修改中的至少一种引起的地址偏移,来识别原始和新版本之间的差别; 通过使用原始版本的文本段的地址与新版本的对应文本段的地址之间的 至少一种关系修改原始版本的指令目标地址,来去除原始和新版本所共有 的文本段中的所识别差别;以及产生包括具有经修改目标地址的指令的原 始文件的修改版本。
去除共有文本段中的所识别差别的方法,进一步包括:识别原始和新 版本间所共有的第一和第二文本段,其中原始版本中第一文本段包括第一 可计算指令,而新版本中第二文本段包括第二可计算指令;识别原始和新 版本间所共有的第三和第四文本段,其中原始版本中的第三文本段包括对 应第一可计算指令的第一目标地址,其中新版本中的第四文本段包括对应 第二可计算指令的第二目标地址;通过用第三和第四函数单元的开始地址 之间的第一差别以及用第一和第二函数单元的开始地址之间的第二差别 修改第一指令值,来从第二可计算指令产生第二指令值;以及用第二指令 值替换第一可计算指令的第一指令值。
一个实施例的方法进一步包括通过修改原始版本中的数据指针值来 去除包括指向原始和新版本所共有的数据段的数据指针的指令中的所识 别差别,其中使用由当前数据指针所指向的原始版本中的数据段的开始地 址与新版本中的对应数据段的开始地址之间的差别来修改数据指针值。
去除包括数据指针的指令中的所识别差别进一步包括:识别原始和新 版本之间所共有的第一和第二代码段,其中原始版本中的第一代码段包括 第一数据指针,而新版本中的第二代码段包括第二数据指针;识别原始和 新版本之间所共有的第一和第二数据单元,其中原始版本中的第一数据单 元包括对应第一数据指针的第一目标地址,其中新版本中的第二数据单元 包括对应第二数据指针的第二目标地址;从第二数据指针产生第二数据指 针值;以及用第二数据指针值替换第一数据指针的第一数据指针值。一个 实施例的第二数据指针值的产生包括用第一和第二数据单元的开始地址 之间的差别来修改第一数据指针值。
一个实施例的方法进一步包括产生包括具有经修改数据指针的指令 的原始文件的修改版本。
一个实施例的方法进一步包括合并共有数据单元以形成共有数据块。 一个实施例的合并包括:当原始版本的第一数据单元与新版本的第一数据 单元大小相等、原始版本的第一数据单元的结束地址等于原始版本的第二 数据单元的开始地址以及新版本的第一数据单元的结束地址等于新版本 的第二数据单元的开始地址时,组合原始版本的第一和第二数据单元并组 合新版本的对应第一和第二数据单元以形成共有数据块;以及对另外的可 合并数据单元重复该组合操作。所述合并进一步包括合并共有文本段以形 成共有函数块。所述合并还可包括:当原始版本的第一文本段与新版本的 第一文本段大小相等、原始版本的第一文本段的结束地址等于原始版本的 第二文本段的开始地址以及新版本的第一文本段的结束地址等于新版本 的第二文本段的开始地址时,组合原始版本的第一和第二文本段并组合相 应新版本的对应第一和第二文本段以形成共有函数块;以及对另外的可合 并文本段重复该组合操作。
上述用于预处理文件的原始和新版本作为在原始和新版本之间的差 别文件产生的部分的系统包括相关的方法。这些方法当中有一种方法用于 执行文件差分,包括:接收电子文件的原始版本和新版本;识别原始和新 版本所共有的代码单元;识别代码单元所共有的指令,其中所述指令包括 有关对应文件的另一部分的指令值;从原始版本的第一指令解码第一指令 值;从新版本的第二指令产生第二指令值,其中第二指令对应于第一指令; 用第二指令值替换第一指令的第一指令值;以及产生包括具有第二指令值 的第一指令的原始文件的修改版本。
一个实施例的方法进一步包括从相关的映射文件中提取共有代码单 元,其中所述共有代码单元包括共有函数单元和共有数据单元。
一个实施例的方法进一步包括合并代码单元的共有函数单元以形成 共有函数块。一个实施例的合并包括:当原始版本的第一函数单元与新版 本的第一函数单元大小相等、原始版本的第一函数单元的结束地址等于原 始版本的第二函数单元的开始地址以及新版本的第一函数单元的结束地 址等于新版本的第二函数单元的开始地址时,组合原始版本的第一和第二 函数单元并组合新版本的对应第一和第二函数单元以形成共有函数块;以 及对另外的可合并函数单元重复该组合操作。一个实施例的方法进一步包 括编码所述共有函数块。
一个实施例的方法进一步包括合并代码单元的共有数据单元以形成 共有数据块。一个实施例的合并包括:当原始版本的第一数据单元与新版 本的第一数据单元大小相等、原始版本的第一数据单元的结束地址等于原 始版本的第二数据单元的开始地址以及新版本的第一数据单元的结束地 址等于新版本的第二数据单元的开始地址时,组合原始版本的第一和第二 数据单元并组合新版本的对应第一和第二数据单元以形成共有数据块;以 及对另外的可合并数据单元重复该组合操作。所述方法可以进一步包括编 码共有数据块。
在一个实施例的方法中,原始和新版本所共有的代码单元是共有函数 单元,其中第一指令包括第一可计算指令,而第二指令包括第二可计算指 令,其中产生第二指令值包括用包括目标地址的原始和新版本的共有函数 单元的开始地址之间的第一差别以及用包括第一和第二可计算指令的共 有函数单元的开始地址之间的第二差别来修改第一指令值。
一个实施例的方法的代码单元包括函数单元。在这些方法中,产生第 一指令值包括产生第一可计算指令的当前指令地址与第一可计算指令的 目标地址之间的差别。产生第二指令值包括:产生第一可计算指令的当前 指令地址与第一可计算指令的目标地址之间的差别;产生新版本的第一共 有函数单元的开始地址与原始版本的对应第一共有函数单元的开始地址 之间的差别;以及产生新版本的第二共有函数单元的开始地址与原始版本 的对应第二共有函数单元的开始地址之间的差别。
在一个实施例的一些方法中,代码单元包括数据单元而指令包括数据 指针。
在一个实施例的方法中,原始和新版本所共有的代码单元是共有数据 单元,其中第一指令包括第一数据指针而第二指令包括第二数据指针,其 中第一指令值包括第一数据指针值而第二指令值包括第二数据指针值,其 中产生第二指令值包括通过用第一和第二数据单元的开始地址之间的差 别修改第一数据指针值来产生第二数据指针值。
一个实施例的方法进一步包括在原始文件的修改版本与新文件之间 执行文件差分并产生差别文件。该方法还进一步包括:传送差别文件到便 携式处理系统;以及用差别文件在便携式处理系统中产生新文件版本。一 个实施例的方法还进一步包括:合并代码单元的共有函数单元以形成共有 函数块;合并代码单元的共有数据单元以形成共有数据块;以及编码共有 函数块和共有数据块以用于在便携式处理系统中产生新文件版本。
上述用于预处理文件的原始和新版本作为原始和新版本之间的差别 文件产生的部分的系统还包括附加的相关的方法。这些方法当中有一种方 法用于判定电子文件之间的差别,包括:接收电子文件的原始版本和新版 本;识别原始和新版本之间所共有的第一和第二函数单元,其中原始版本 中的第一函数单元包括第一可计算指令而新版本中的第二函数单元包括 第二可计算指令;识别原始和新版本之间所共有的第三和第四函数单元, 其中原始版本中的第三函数单元包括对应第一可计算指令的第一目标地 址,其中新版本中的第四函数单元包括对应第二可计算指令的第二目标地 址;从第二可计算指令产生第二指令值;用第二指令值替换第一可计算指 令的第一指令值;以及产生包括具有第二指令值的第一指令的原始文件的 修改版本。
在所述方法下产生第二指令值包括用第三和第四函数单元的开始地 址之间的第一差别以及用第一和第二函数单元的开始地址之间的第二差 别来修改第一指令值。
一个实施例的方法进一步包括:识别原始和新版本之间所共有的第一 和第二代码段,其中原始版本中的第一代码段包括第一数据指针而新版本 中的第二代码段包括第二数据指针;识别原始和新版本之间所共有的第一 和第二数据单元,其中原始版本中的第一数据单元包括对应第一数据指针 的第一目标地址,其中新版本中的第二数据单元包括对应第二数据指针的 第二目标地址;从第二数据指针产生第二数据指针值;用第二数据指针值 替换第一数据指针的第一数据指针值;以及产生包括具有第二数据指针值 的第一数据指针的原始文件的修改版本。在一个实施例中产生第二数据指 针值包括产生由当前数据指针指向的原始版本中的数据段的开始地址与 新版本中的对应数据段的开始地址之间的差别。
一个实施例的方法进一步包括合并共有函数单元以形成共有函数块。
一个实施例的方法进一步包括合并共有数据单元以形成共有数据块。
一个实施例的方法进一步包括使用原始文件的经修改版本和新文件 来产生差别文件。所述方法还进一步包括:传送差别文件到便携式处理系 统;以及用差别文件在便携式处理系统中产生新文件版本。
上述用于预处理文件的原始和新版本作为原始和新版本之间的差别 文件产生的部分的系统包括计算机可读介质。一个实施例的计算机可读介 质包括可执行指令,当所述指令在处理系统中执行时,通过以下减小了包 括电子文件的原始版本和新版本之间的代码差别的差别文件大小:对应于 由代码行删除、代码行添加以及代码行修改中的至少一种所引起的地址偏 移,来识别原始和新版本之间的差别;通过使用原始版本的文本段的地址 与新版本的对应文本段的地址之间的至少一种关系修改原始版本的指令 目标地址,来去除原始和新版本所共有的文本段中的所识别差别;以及产 生包括具有经修改目标地址的指令的原始文件的修改版本。
本发明的各方面可以实现为编程到多种电路中的功能性,所述电路包 括可编程逻辑器件(PLD)如现场可编程阵列(FPGA)、可编程阵列逻 辑(PAL)器件、电可编程逻辑和存储器器件及标准的基于蜂窝的器件, 以及专用集成电路(ASIC)。实现本发明的各方面的一些其他可能性包括: 带存储器的微控制器(如电子可擦除可编程只读存储器(EEPROM))、嵌 入式微处理器、固件、软件等等。此外,本发明的各方面可以在具有基于 软件的电路仿真、离散逻辑(顺序的和组合的)、定制器件、模糊(神经 系统的)逻辑、量子器件以及任意以上器件类型的混合的微处理器中实施。 当然基础的器件技术可以多种组成类型提供,例如象互补金属化物半导 体(CMOS)的金属氧化物半导体场效应晶体管(MOSFET)技术、象发 射极耦合逻辑(ECL)的双极技术、聚合物技术(例如共轭聚合物和金 属共轭聚合物金属结构)、混合模拟和数字等等。
除非上下文清楚地需要,否则在整个说明和权利要求中,词“包括” 应解释为与排除或穷尽的意思相对的内含的意义;即,是“包括但不限于” 的意思。使用单数或复数的词也分别包括复数和单数。另外,当用于本申 请中时,词“在此”、“在下面”、“以上”、“以下”以及类似词应指整个该 申请而非该申请的任何特殊部分。当关于两个或更多条目的列表来使用词 “或”时,该词覆盖所有以下对该词的理解:列表中的任何条目、列表中 的所有条目以及列表中的条目的任意组合。
以上对本发明实施例的说明不是要穷尽或把本分明限制为所公开的 精确形式。尽管为了说明的目的在此描述了本发明的特定实施例和例子, 如本领域的技术人员将认识到的,在本发明的范围内进行各种等效的修改 是可能的。这里提供的本发明的讲授可应用于其他处理系统和通信系统, 而不仅用于上述的文件差分系统。
上述各种实施例的元素和行为可以组合以提供进一步的实施例。可以 根据上述详细说明而对本发明进行这些和其他的改变。
所有以上引用和美国专利及专利申请通过引用结合于此。如果需要, 可以修改本发明的各方面,采用上述各种专利和申请的系统、功能和概念 以提供本发明进一步的实施例。
总之,在以下权利要求中,所使用的术语不应理解为把本发明限制于 说明书和权利要求中所公开的特定实施例,而应理解为包括工作在权利要 求下以提供文件差分的所有处理系统。相应地,本发明不受公开内容所限 制,而本发明的范围应完全由权利要求来确定。
尽管本发明的某些方面在下面以某种权利要求的形式出现,发明人以 多种权利要求形式设想了本发明的各个方面。例如,仅仅本发明的一个方 面描述为在计算机可读介质中实施,但其他方面同样也可以在计算机可读 介质中实施。相应地,发明人保留在提出申请之后添加附加权利要求的权 利,以便为本发明的其他方面追加这样的附加权利要求形式。
相关申请
该申请涉及2002年5月13日提出的美国专利申请号10/146,545。
相关专利内容
标题 发布/更新时间 阅读量
一种双轴向经编机 2020-05-12 228
经编机花梳横移装置 2020-05-12 944
经编机的取纱机构 2020-05-11 481
经编机的梳栉垫纱运动机构 2020-05-14 211
多梳拉舍尔经编机的针床摆动机构 2020-05-14 394
经编机的取纱机构 2020-05-12 877
经编机的铺纬装置 2020-05-13 624
经编机梳栉机构 2020-05-11 793
经编机的梳栉垫纱运动机构 2020-05-15 765
经编机针床 2020-05-14 359
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈