CN117707588A - 差分文件的还原方法及电子设备 - Google Patents
差分文件的还原方法及电子设备 Download PDFInfo
- Publication number
- CN117707588A CN117707588A CN202211101979.2A CN202211101979A CN117707588A CN 117707588 A CN117707588 A CN 117707588A CN 202211101979 A CN202211101979 A CN 202211101979A CN 117707588 A CN117707588 A CN 117707588A
- Authority
- CN
- China
- Prior art keywords
- data
- file
- diff
- ram memory
- block
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 139
- 238000013144 data compression Methods 0.000 claims abstract description 470
- 238000012545 processing Methods 0.000 claims abstract description 162
- 230000009467 reduction Effects 0.000 claims description 91
- 238000005192 partition Methods 0.000 claims description 81
- 230000006837 decompression Effects 0.000 claims description 48
- 239000000872 buffer Substances 0.000 claims description 41
- 238000004590 computer program Methods 0.000 claims description 11
- 238000004458 analytical method Methods 0.000 claims description 6
- 238000007906 compression Methods 0.000 description 91
- 230000006835 compression Effects 0.000 description 91
- 230000008569 process Effects 0.000 description 63
- 238000010586 diagram Methods 0.000 description 37
- 238000011084 recovery Methods 0.000 description 29
- 230000006870 function Effects 0.000 description 18
- 238000004891 communication Methods 0.000 description 14
- 230000003068 static effect Effects 0.000 description 14
- 238000013500 data storage Methods 0.000 description 11
- 238000000638 solvent extraction Methods 0.000 description 10
- 230000000694 effects Effects 0.000 description 8
- 230000008859 change Effects 0.000 description 6
- 230000006855 networking Effects 0.000 description 6
- 238000013186 photoplethysmography Methods 0.000 description 6
- 230000001133 acceleration Effects 0.000 description 5
- 239000008280 blood Substances 0.000 description 5
- 210000004369 blood Anatomy 0.000 description 5
- 239000012634 fragment Substances 0.000 description 5
- 238000007726 management method Methods 0.000 description 5
- 230000000903 blocking effect Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000010295 mobile communication Methods 0.000 description 4
- 210000001519 tissue Anatomy 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000011946 reduction process Methods 0.000 description 3
- 230000005236 sound signal Effects 0.000 description 3
- 238000013528 artificial neural network Methods 0.000 description 2
- QVGXLLKOCUKJST-UHFFFAOYSA-N atomic oxygen Chemical compound [O] QVGXLLKOCUKJST-UHFFFAOYSA-N 0.000 description 2
- 230000003542 behavioural effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 230000036772 blood pressure Effects 0.000 description 2
- 230000036760 body temperature Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 230000004069 differentiation Effects 0.000 description 2
- 230000031700 light absorption Effects 0.000 description 2
- 229910052760 oxygen Inorganic materials 0.000 description 2
- 239000001301 oxygen Substances 0.000 description 2
- 230000029058 respiratory gaseous exchange Effects 0.000 description 2
- 238000003786 synthesis reaction Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008081 blood perfusion Effects 0.000 description 1
- 210000000988 bone and bone Anatomy 0.000 description 1
- 230000005189 cardiac health Effects 0.000 description 1
- 210000000748 cardiovascular system Anatomy 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000002194 synthesizing effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- 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
-
- 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
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)
Abstract
本申请实施例提供了一种差分文件的还原方法及电子设备。在该方法中,差分文件中包括至少一组数据压缩分块,每组中的各数据压缩分块被压缩前是基于预设的分块尺寸进行划分的;在电子设备针对该差分文件进行还原时,首先根据分块尺寸和RAM空间尺寸确定还原线程的并行数量k,然后采用k个还原线程并行地对差分文件进行还原处理,其中,每个还原线程使用与其对应的一组RAM空间对至少一组数据压缩分块进行还原处理。这样,针对上述差分文件进行还原处理时,电子设备能够根据用于差分文件还原的RAM内存空间自适应地确定还原线程的并行数量,并通过多个线程并行处理以提高差分文件的还原效率。
Description
技术领域
本申请涉及智能终端技术领域,尤其涉及一种差分文件的还原方法及电子设备。
背景技术
为了完善终端设备的功能、增强设备稳定性、修补设备缺陷或漏洞(bug)时,往往需要对终端设备的固件进行升级。
目前,通常采用空中下载(Over the Air,OTA)技术对终端设备进行在线固件升级。OTA升级方式主要包括整包升级和差分包升级。为了提升升级包传输效率及固件升级效率,终端设备多采用差分包升级方式,也即只针对固件的差异部分进行升级。
其中,终端设备采用差分包升级方式进行在线固件升级时,首先需要对差分文件进行还原,而对差分文件的还原操作需要占用RAM(Random Access Memory,随机存取存储器)内存,且不同终端设备供差分文件还原的RAM内存空间不尽相同。因此,在采用差分包升级的方式进行固件升级时,如何提升差分文件的还原效率是需要解决就问题。
发明内容
为了解决上述技术问题,本申请实施例提供一种差分文件的还原方法及电子设备。在该方法中,电子设备根据与差分文件对应的分块尺寸以及用于差分文件还原的RAM内存空间尺寸自适应地确定还原线程的并行数量,并通过多个线程并行地进行还原处理,以此提高了差分文件的还原效率。
第一方面,本申请实施例提供一种差分文件的还原方法。该方法包括:
电子设备获取差分文件;其中,在差分文件中包括至少一组数据压缩分块,一组数据压缩分块包括差异Diff数据压缩分块和/或新增Extra数据压缩分块,数据压缩分块被压缩前是基于预设的分块尺寸进行划分的;
电子设备根据分块尺寸和电子设备用于差分文件还原的RAM空间尺寸,确定还原线程的并行数量k,并为每个还原线程划分一组RAM空间;
电子设备采用k个还原线程并行地对差分文件进行还原处理,其中,每个还原线程使用与其对应的一组RAM空间对至少一组数据压缩分块进行还原处理,并将还原处理后得到的数据写入目标文件中。
这样,电子设备根据与差分文件对应的分块尺寸以及用于差分文件还原的RAM内存空间尺寸自适应地确定还原线程的并行数量,并通过多个线程并行地进行还原处理,以此提高了差分文件的还原效率。
根据第一方面,一组RAM空间可以包括:第一RAM内存区域、第二RAM内存区域、第三RAM内存区域和第四RAM内存区域;其中,第一RAM内存区域和第二RAM内存区域的尺寸为分块尺寸;第二RAM内存区域和第四RAM内存区域分别为第一RAM内存区域和第三RAM内存区域的安全缓冲区域;各个还原线程共用第五RAM内存区域,第五RAM内存区域用于运行数据压缩算法。
这样,电子设备可以基于较小的RAM内存空间实现对数据压缩分块还原操作。而且,为第一RAM内存区域和第三RAM内存区域设置安全缓冲区,针对数据压缩后数据反而增大的情况,也不会影响数据处理的准确性。
根据第一方面,或者以上第一方面的任意一种实现方式,电子设备根据分块尺寸和电子设备用于差分文件还原的RAM空间尺寸,确定还原线程的并行数量k,k=[(M-N1)/(zonesize+N2)];其中,M为电子设备用于差分文件还原的RAM空间尺寸,N1为第五RAM内存区域的尺寸,zonesize为分块尺寸,N2为安全缓冲区域的尺寸,[]为取整运算。
根据第一方面,或者以上第一方面的任意一种实现方式,与Diff数据压缩分块对应的Diff数据是基于第一运算得到的;每个还原线程对一组数据压缩分块进行还原处理,可以包括:还原线程按照解析顺序依次对一组数据压缩分块中的Diff数据压缩分块或Extra数据压缩分块进行数据还原处理;每解析得到一个Diff数据压缩分块时,将Diff数据压缩分块对应的Diff数据与已有数据进行第二运算,得到第一目标数据,写入目标文件中;其中,已有数据为在与差分文件对应的已有文件中,读取到的与Diff数据压缩分块匹配的数据,第二运算为第一运算的逆运算;每解析得到一个Extra数据压缩分块时,对Extra数据压缩分块进行数据解压,得到第二目标数据,写入目标文件中。
示例性的,第一运算为减运算,第二运算为加运算。
这样,电子设备对差分文件进行还原处理时,每个还原线程可以将Diff数据压缩分块或Extra数据压缩分块作为一个独立的差分还原处理单元,使得终端侧的RAM内存消耗更小,进而终端侧能够通过较小的RAM内存空间实现差分数据还原功能。
根据第一方面,或者以上第一方面的任意一种实现方式,电子设备将Diff数据压缩分块对应的Diff数据与已有数据进行第二运算,得到第一目标数据,写入目标文件中,可以包括:电子设备将Diff数据压缩分块暂存在第一RAM内存区域中;电子设备对Diff数据压缩分块进行数据解压处理,将得到的Diff数据分块暂存在第三RAM内存区域中;电子设备在已有文件中读取与Diff数据分块对应的已有数据,并暂存在第一RAM内存区域中;电子设备将第一RAM内存区域中的数据和第三RAM内存区域中的数据进行第二操作,所得的第一目标数据暂存在第三RAM内存区域中;电子设备将在第三RAM内存区域中暂存的第一目标数据,写入目标文件中。
根据第一方面,或者以上第一方面的任意一种实现方式,电子设备对Extra数据压缩分块进行数据解压,得到第二目标数据,写入目标文件中,可以包括:电子设备将Extra数据压缩分块暂存在第一RAM内存区域中;电子设备对Extra数据压缩分块进行数据解压处理,将得到的第二目标数据暂存在第三RAM内存区域中;电子设备将在第三RAM内存区域中暂存的第二目标数据,写入目标文件中。
根据第一方面,或者以上第一方面的任意一种实现方式,每个还原线程使用与其对应的一组RAM空间对至少一组数据压缩分块进行还原处理,可以包括:电子设备根据差分文件中包括的数据压缩分块组数,以及各组数据压缩分块的序号为每个还原线程分别创建链表,以使还原线程根据对应的链表完成对至少一组数据压缩分块进行还原处理;其中,在链表中,节点的数据部分填充一组数据压缩分块的序号,以及一组数据压缩分块对应的还原数据在目标文件中写入的首地址。
根据第一方面,或者以上第一方面的任意一种实现方式,差分文件的数据结构包括头部、控制块、以及通过控制块描述的一组数据压缩分块;头部中填充差分文件的魔数与分块尺寸;控制块中填充第一指针偏移量和第二指针偏移量;其中,第一指针偏移量用于在已有文件中确定与一组数据压缩分块对应的数据读取首地址;第二指针偏移量用于在目标文件中确定与一组数据压缩分块对应的数据写入首地址。
根据第一方面,或者以上第一方面的任意一种实现方式,电子设备根据数据压缩分块的序号对并行数量的取余结果,分别确定待每个还原线程处理的各组数据压缩分块。
根据第一方面,或者以上第一方面的任意一种实现方式,每个还原线程使用与其对应的一组RAM空间对至少一组数据压缩分块进行还原处理,可以包括:每个还原线程创建第一子线程和第二子线程;电子设备通过第一子线程和第二子线程使用与还原线程对应的一组RAM空间,依次对一组数据压缩分块中包括的Diff数据压缩分块或Extra数据压缩分块进行还原处理;其中,在第二子线程执行到目标阶段时,第一子线程继续在一组数据压缩分块数据压缩分块进行还原处理;在第一子线程执行到目标阶段时,第二子线程继续在一组数据压缩分块数据压缩分块进行还原处理;其中,目标阶段为将在第三RAM内存区域中暂存的数据,写入目标文件中。
这样,每个还原线程对一组数据压缩分块进行还原处理时,无需待前一个数据压缩分块的还原处理流程完全结束后,后一个数据压缩分块的还原流程才开始,使得第一RAM内存区域不再存在等待时延,减少了一组数据压缩分块的还原时长,提升了还原线程的处理效率。
第二方面,本申请实施例提供一种电子设备。该电子设备包括:一个或多个处理器;存储器;以及一个或多个计算机程序,其中一个或多个计算机程序存储在存储器上,当计算机程序被一个或多个处理器执行时,使得电子设备执行如第一方面以及第一方面的任意一种实现方式中的差分文件的还原方法。
第二方面以及第二方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第二方面以及第二方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
第三方面,本申请实施例提供一种计算机可读存储介质。该计算机可读存储介质包括计算机程序,当计算机程序在电子设备上运行时,使得电子设备执行如第一方面以及第一方面的任意一种实现方式中的差分文件的还原方法。
第三方面以及第三方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第三方面以及第三方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
第四方面,本申请实施例提供一种计算机程序产品,包括计算机程序,当计算机程序被运行时,使得计算机执行如第一方面以及第一方面的任意一种实现方式中的差分文件的还原方法。
第四方面以及第四方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第四方面以及第四方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
第五方面,本申请提供了一种芯片,该芯片包括处理电路、收发管脚。其中,该收发管脚和该处理电路通过内部连接通路互相通信,该处理电路执行如第一方面以及第一方面的任意一种实现方式中的差分文件的还原方法,以控制接收管脚接收信号,以控制发送管脚发送信号。
第五方面以及第五方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第五方面以及第五方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
附图说明
图1为示例性示出的一种应用场景示意图;
图2为示例性示出的一种对固件文件进行差分还原的流程示意图;
图3为示例性示出的差分原理示意图;
图4为示例性示出的一种差分文件的数据结构示意图;
图5为示例性示出的还原原理示意图;
图6为示例性示出的数据还原操作示意图;
图7为本实施例提供的一种差分文件的生成方法示意图;
图8为本实施例提供的一种差分文件的数据结构示例图;
图9为本实施例提供的一种差分文件的生成方法示意图;
图10为本实施例提供的一种差分文件的数据结构示例图;
图11a为本实施例提供的一种差分文件的生成方法示意图;
图11b为本实施例提供的一种数据分块划分方法示意图;
图12为本实施例提供的一种差分文件的还原方法示意图;
图13为本实施例提供的一种差分文件的还原操作示意图;
图14为本实施例提供的在基于Diff数据压缩分块进行数据还原时RAM空间占用的示意图;
图15为本实施例提供的在基于Extra数据压缩分块进行数据还原时RAM空间占用的示意图;
图16为本实施例提供的在基于Diff数据压缩分块进行数据还原时RAM空间占用的示意图;
图17为本实施例提供的在基于Extra数据压缩分块进行数据还原时RAM空间占用的示意图;
图18为本实施例提供的在基于Diff数据压缩分块进行数据还原时RAM空间占用的示意图;
图19为本实施例提供的在基于Extra数据压缩分块进行数据还原时RAM空间占用的示意图;
图20为示例性示出的一种应用场景示意图;
图21a为示例性示出的用于还原线程并行的RAM空间划分示意图;
图21b为示例性示出的用于还原线程并行的RAM空间划分示意图;
图22为示例性示出的差分数据并行还原的示意图;
图23为本实施例提供的一种差分文件的数据结构示例图;
图24a为本实施例提供的在基于Diff数据压缩分块进行数据还原时RAM内存区域占用状态变化示意图;
图24b为本实施例提供的在基于Extra数据压缩分块进行数据还原时RAM内存区域占用状态变化示意图;
图25为本实施例提供的还原线程的处理流程示意图;
图26a为本实施例提供的还原线程中第一子线程的处理流程示意图;
图26b为本实施例提供的还原线程中第二子线程的处理流程示意图;
图27a为本实施例提供的基于单线程连续进行数据压缩分块还原的时长示意图;
图27b为本实施例提供的基于多线程连续进行数据压缩分块还原的时长示意图;
图28为示例性示出的电子设备的硬件结构示意图;
图29为示例性示出的电子设备的软件结构示意图;
图30为示例性示出的一种装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
本申请实施例的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一目标对象和第二目标对象等是用于区别不同的目标对象,而不是用于描述目标对象的特定顺序。
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
在本申请实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。例如,多个处理单元是指两个或两个以上的处理单元;多个系统是指两个或两个以上的系统。
在终端设备进行在线固件升级时,若采用OTA差分包升级方式进行固件升级,则终端设备需要具备对差分文件进行还原的能力,也即根据差分文件和与该差分文件对应的已有固件文件(也即旧版本的固件文件,下述简称为旧固件文件),生成对应的新版本的固件文件(下述简称为新固件文件)。进而,终端设备可以根据新版本的固件文件完成固件升级。
图1示例性的示出一种应用场景,以智能手表100为例进行在线固件升级为例进行解释说明。其中,智能手表100为不具备独立联网功能的低端智能终端设备(也可以成为轻量级嵌入式设备),智能手表100可以通过蓝牙与智能手机200进行通信。参照图1,在智能手机200中安装有与智能手表100对应的应用APP,该应用APP用于连接智能手表100与智能手机200,为智能手表100下载应用或文件等。进而,智能手表100可以通过该应用APP与OTA服务器300进行通信。示例性的,智能手表100可以定期通过该应用APP向OTA服务器300查询是否存在与智能手表100对应的升级差分包。如果查询到存在与智能手表100对应的升级差分包,则可以在满足在线升级条件(例如电量状态、联网状态、蓝牙状态等满足预设条件)时,通过该应用APP向OTA服务器300发送升级差分包下载请求,以通过智能手机200下载相应的升级差分包。其中,智能手机可以通过蓝牙技术将下载得到的升级差分包发送至智能手表100中。进而,智能手表100可以对升级差分包进行还原,并基于还原后得到新版本的固件文件完成固件升级。
继续参照图1,与智能手表100对应的升级差分包可以基于差分数据包制作平台400制作而成,并被上传至OTA服务器300。在一些实现方式中,升级差分包也可以是在OTA服务器300中制作生成的,本实施例对此不做限定。无论升级差分包是基于差分数据包制作平台400制作而成,还是基于OTA服务器300制作而成,升级差分包均是基于新旧固件文件以及相应的差分算法而生成的。
其中,在如图1所示的应用场景中,智能手机200为具备独立联网功能的智能终端设备,作为智能手表100与OTA服务器300的中继设备。
在一些实现方式中,若智能手表100具备独立联网能力,也可以直接与OTA服务器300通信,以向OTA服务器30查询是否到存在与智能手表100对应的升级差分包,或者以向OTA服务器300下载相应的升级差分包。
在图1所示的应用场景中,以智能手表100为例对存在固件在线升级需求的终端设备进行解释。其中,存在固件在线升级需求的终端设备也可以是智能手环,智能耳机等其他穿戴式设备,也可以是万物互联场景中的任意嵌入式节点设备(例如为采集温度、湿度等信息的节点设备),本实施例对比不做限定。如果存在固件在线升级需求的终端设备为不具备独立联网功能的低端设备,则需要通过中继设备与OTA服务器进行通信,以通过中继设备下载升级差分包。如果存在固件在线升级需求的终端设备为具备独立联网功能的低端设备,则可以直接与OTA服务器进行通信以下载升级差分包。
图2示例性的示出了固件文件差分还原的流程示意图。
如图2所示,在服务器侧(或工具侧),服务器根据预设的差分算法(例如BSDiff算法)对成对的新固件文件和旧固件文件进行差分处理,得到一个差分文件(Patch文件)。这样,服务器可以得到与固件升级对应的多个差分文件。差分文件的数量与待升级的固件有关,本实施例对此不做限定。进而,服务器可以对这多个差分文件进行压缩打包,生成升级差分包。其中,升级差分包中可以包括多个压缩后的差分文件,以及与这多个差分文件对应的描述文件等。
当终端需要进行固件升级时,向服务器请求下载升级差分包。终端接收到升级差分包后,对升级差分包进行解压,可以得到各个差分文件。以一个差分文件为例,终端根据与该差分文件匹配的旧固件文件,对该差分文件进行还原操作,即可得到相应的新固件文件。这样,终端侧可以得到多个新固件文件,进而可以基于这多个新固件文件进行固件升级操作。
继续参照图2,在固件文件差分还原的流程中,文件差分操作以及差分包压缩操作是在服务器侧执行的,差分包解压操作以及差分文件还原操作时在终端侧执行的。
当终端为轻量级嵌入式设备(如穿戴式设备)时,其RAM资源受限,会严重影响差分包解压还原处理的效率,甚至可能会由于差分文件过大而导致固件升级失败的问题。因此,如果差分文件还原过程涉及的内存消耗能够更小,则会更好地适用于轻量级嵌入式设备的固件升级场景。
下述以BSDiff算法为例,对差分还原算法的基本原理进行解释说明。
(一)差分原理(Bsdiff原理)
其中,差分原理的核心思想为尽可能多的利用旧文件中的数据,尽可能少的加入新的数据来构建新文件。
图3示例性的示出了基于Bsdiff原理的文件差分流程。
参照图3,对比旧文件数据和新文件数据,在二者中确定各个最长的相似子串(即子字符串)。示例性的,新文件数据中的数据01_new为“1010101010101010101”,旧文件数据中的数据01_old为“1010101110101011101”,新文件数据中的数据01_new和旧文件数据中的数据01_old为一个最长的相似子串。又示例性的,新文件数据中的数据03_new和旧文件数据中的数据02_old为另一个最长的相似子串。示例性的,在新文件数据中,介于数据01_new和数据03_new之间为数据02_new,在旧文件数据中没有与数据02_new相似的子串,则数据02_new为在新文件中新增的数据。类似的,在新文件数据中,数据04_new也为新增的数据。
由此,可以根据新文件数据和旧文件数据中的相似子串,计算差异数据(Diff数据),差异数据与新增数据(Extra数据)共同构成增量更新数据(Patch数据)。如图3所示,将新文件中的数据01_new和旧文件中的数据01_old进行减运算,可以得到Patch数据中的Diff数据01;将新文件中的数据03_new和旧文件中的数据02_old进行减运算,可以得到Patch数据中的Diff数据02。同时,可以将新文件中的数据02_new直接作为Patch数据中的Extra01数据,将新文件中的数据04_new直接作为Patch数据中的Extra02数据。以此类推,即可基于新文件数据和旧文件数据得到所有Diff数据和Extra数据,组成Patch数据。
需要指出是,通常情况下,在依据BSDiff算法得到的Patch数据中,Diff数据和Extra数据是成对出现的,在每一块Diff数据后均为一块Extra数据。可以理解为,该Patch数据中包括至少一组增量更新数据,每组增量更新数据通常都包括Diff数据和Extra数据。在一些特殊情况下,Diff数据和Extra数据也可能不是成对出现的,例如在Patch数据中最后一组增量更新数据中,可能只包括Diff数据,可能只包括Extra数据。
需要注意的是,Patch数据中各Diff数据和Extra数据排序及位置偏移与新文件数据是一致的。由此,按顺序对Patch数据中的Diff数据和Extra数据进行数据还原处理,即可得到与Patch数据对应的新文件数据。
需要注意的是,在依据BSDiff算法得到的Patch数据中,
在基于新文件数据和旧文件数据得到Patch数据之后,即可对Patch数据进行数据编码,得到相应的Patch文件。
在图3中示例性的示出了一种Patch文件的数据结构,该数据结构包括总编码头,与一组Diff数据和Extra数据对应的编码信息,以及Diff数据和Extra数据。其中,与某一组Diff数据和Extra数据对应的编码信息,用于对该组Diff数据和Extra数据进行描述,例如描述Diff数据的字节长度、Extra数据的字节长度,以及在旧文件中读取数据的指针偏移量。
图4示例性的示出了一种Patch文件的数据结构。如图4所示,该Patch文件的数据结构包括头部(Header)、控制块(control block)、Diff块(差异数据块)和Extra块(新增数据块)。
其中,Header包括8个字节,用于填充魔数。在此处,魔数用于判断文件类型。
每个control block包括24个字节,用于描述一组Diff块和Extra块。也即,control block中记录的数据可以作为其描述的一组Diff块和Extra块的编码信息。其中,control block的前8个字节用于填充其描述的Diff块的字节长度;control block的中间8个字节用于填充其描述的Extra块的字节长度;control block的后8个字节用于填充指针偏移量,该指针偏移量用于确定在旧文件中读取数据(用于与Diff数据进行加运算的数据)的位置。
示例性的,每个control block可以使用(x,y,z)来表示,其中,x为Diff块的字节长度,用于指示从旧文件和Diff块中读取x个字节以进行加运算;y为Extra块的字节长度,用于指示从Extra块中读取y个字节以添加至新文件中;z为旧文件指针的偏移量,用于确定从旧文件中下一次读取数据的指针位置,也即用于确定本次在旧文件中读取数据后指针的偏移量。其中,当z表示的偏移量以指针当前位置为基准时,z可以通过正负值来表示偏移的方向,例如正值表示向前偏移,负值表示向后偏移。
Diff块,用于记录Diff数据,也即用于记录旧文件与新文件中一个最长的相似子串的差值。
Extra块,用于记录Extra数据,也即用于记录新文件中的新增数据。
其中,在将多个Patch文件进行打包之前,还可以对Patch文件进行压缩。
在一种可能的实现方式中,针对数据结构如图4所示的Patch文件进行压缩时,可以采用按数据块进行压缩的方式,也即分别对每个control block(即control block1或control block2或control block n)、每个Diff块(即Diff块1或Diff块2或Diff块n)和每个Extra块(即Extra块1或Extra块2或Extra块n)进行压缩。
在一种可能的实现方式中,针对数据结构如图4所示的Patch文件进行压缩时,可以采用对整个文件进行压缩的方式,也即将Header、control block1、Diff块1、Extra块1、control block2、Diff块2、Extra块2、…、control block n、Diff块n、Extra块n一起进行压缩。
在一种可能的实现方式中,针对数据结构如图4所示的Patch文件进行压缩时,可以采用将整个文件按预设大小划分为x个子文件后再进行压缩的方式,假设整个文件大小为N,则每个子文件的大小为N/x。
在一种可能的实现方式中,针对数据结构如图4所示的Patch文件进行压缩时,可以采用数据块类型进行压缩的方式,也即分别对多个control block(即control block1、control block2、…、control block n)、多个Diff块(即Diff块1、Diff块2、…、Diff块n)和多个Extra块(即Extra块1、Extra块2、…、Extra块n)进行压缩。
这样,在服务器分别对各组新固件文件和旧固件文件进行差分处理,得到多个Patch文件之后,将这多个Patch文件分别压缩后进行打包即可得到相应的升级差分包,以待终端查询并下载该升级差分包。
(二)还原原理(bspatch原理)
对应于上述bsdiff原理,在BSDiff算法中基于bspatch原理进行Patch文件还原。其中,bspatch原理可以理解为bsdiff原理的逆过程,也即Patch文件还原可以理解为Patch文件生成逆过程。
图5示例性的示出了基于bspatch原理的文件还原流程。
参照图5,对Patch文件进行数据解码,得到对应的Patch数据。此处对Patch文件数据进行解码的过程可以理解为对Patch数据进行数据编码的逆过程。
其中,关于Patch文件的数据结构可以参照上文关于图4的解释说明,在此不再赘述。由此,在对Patch文件进行数据解码得到的Patch数据中,Diff数据和Extra数据是成对出现的,在每一块Diff数据后均为一块Extra数据。而且,Patch数据中各对Diff数据和Extra数据的排序与新文件数据是一致的。
当终端获取到Patch文件时,对Patch文件的header进行解析,根据header中记录的魔数获知文件类型之后,即可根据与该文件类型对应的数据结构进行数据解码操作。其中,终端每解码到一块Diff数据或Extra数据之后,就根据这块Diff数据或Extra数据进行文件还原。
参照图4,在Patch文件中,每个control block用于描述一对Diff块和Extra块。由此,终端可以根据control block中记录的内容,获取相应的Diff数据以及Extra数据,并基于获取到的Diff数据和Extra数据进行还原处理得到新文件中的数据。
以Patch数据中的Diff01数据和Extra01数据为例,在进行新文件数据还原时:读取Diff01数据,以及在旧文件中读取与Diff01数据匹配的数据01_old数据,并对Diff01数据和数据01_old数据进行加运算,即可得到数据01_new写入新文件中;读取Extra01数据,作为数据02_new直接写入新文件中。类似的,继续读取Diff02数据,以及在旧文件中读取与Diff02数据匹配的数据02_old数据,并对Diff02数据和数据02_old数据进行加运算,即可得到数据03_new写入新文件中;读取Extra02数据,作为数据04_new直接写入新文件中。以此类推,终端即可基于Patch文件中的Patch数据,以及旧文件中的相关数据得到新文件中的所有数据。
下述以每个control block使用(x,y,z)表示为例,结合图6对基于Patch文件进行还原的流程进行解释说明。
如图6所示,在Patch文件中,control block1中填充的内容为(x1,y1,z1),用于描述Diff块1和Extra块1。其中,Diff块1的字节长度为x1,Extra块1的字节长度为x2。
终端在Patch文件中解析到control block1中填充的(x1,y1,z1)。首先,终端在Patch文件中继续读取x1长度的Diff数据,以及在旧文件中读取x1长度的数据,并将这两段x1长度的数据进行加运算,得到x1长度的新文件数据,写入新文件(或者称为目标文件)中。然后,终端在Patch文件中继续读取y1长度的Extra数据,作为y1长度的新文件数据直接写入新文件中。
示例性的,在如图4所示的文件数据结构中,在头部之后以及控制块1之前,还可以包括control block0,在control block0中填充的是(0,0,z0)。其中,control block0中填充z0,用于在旧文件中确定用于读取x1长度数据的指针偏移量。由于旧文件指针当前位置为旧文件起始位置,则将旧文件指针由旧文件起始位置偏移z0后,即可在旧文件中读取到与x1长度的Diff数据匹配的x1长度的旧文件数据。
类似的,终端继续解析Patch文件,读取control block2中填充的(x2,y2,z2)。首先,终端在Patch文件中继续读取x2长度的Diff数据,以及在旧文件中读取x2长度的数据,并将这两段x2长度的数据进行加运算,得到x2长度的新文件数据,写入新文件中。其中,将旧文件的指针在当前位置的基础上再偏移z1后,即可在旧文件中读取到与x2长度的Diff数据对应的x2长度的旧文件数据。然后,终端在Patch文件中继续读取y2长度的Extra数据,作为y2长度的新文件数据直接写入新文件中。
以此类推,终端即可根据Patch文件和旧文件得到一个新文件,完成一个新文件的还原流程。
这样,终端可以基于升级差分包中的各个Patch文件以及相应的旧文件,实现对各个新文件的还原。
然而,在依据BSDiff算法得到的Patch文件,由于Diff块是基于新文件和旧文件的最长相似子串确定的,Extra块是基于新文件中的新增数据确定的,所以Diff块和Extra块的字节长度是不固定的且无限制的,其字节长度与新旧文件的差异情况有关,可以为几十KB,也可以高达几百甚至上千上万KB。
终端对Patch文件进行还原处理时,其所需的RAM内存空间大小与Diff块或Extra块的字节长度直接相关。Diff块或Extra块的字节长度越大,则终端对其处理时所需的RAM内存空间就越大。例如,Diff块的字节长度为200KB,则终端至少要分配200KB以上的RAM内存空间以对其进行处理。当终端的RAM内存空间有限时,终端无法或很难满足处理该Diff块或Extra块的需求。由此,基于BSDiff算法得到的Patch文件的数据结构,对轻量级嵌入式设备的固件差分包升级场景极其不友好。
为了解决上述技术问题,以使差分文件还原过程涉及的终端RAM内存消耗能够更小,本实施例提供了一种差分文件的生成方法,该差分文件的生成方法应用于服务器侧。其中,此处提及的服务器可以理解为用于生成差分文件的任意电子设备。
图7示例性的示出了本实施例提供的基于Bsdiff原理的文件差分流程。
同前所述,对比旧文件数据和新文件数据,在二者中确定各个最长的相似子串(即子字符串)。示例性的,新文件数据中的数据01_new为“1010101010101010101”,旧文件数据中的数据01_old为“1010101110101011101”,新文件数据中的数据01_new和旧文件数据中的数据01_old为一个最长的相似子串。又示例性的,新文件数据中的数据03_new和旧文件数据中的数据02_old为另一个最长的相似子串。示例性的,在新文件数据中,介于数据01_new和数据03_new之间为数据02_new,在旧文件数据中没有与数据02_new相似的子串,则数据02_new为在新文件中新增的数据。类似的,在新文件数据中,数据04_new也为新增的数据。
由此,可以根据新文件数据和旧文件数据中的相似子串,计算差异数据(Diff数据),差异数据与新增数据(Extra数据)共同构成增量更新数据(Patch数据)。如图7所示,将新文件中的数据01_new和旧文件中的数据01_old进行减运算,可以得到Patch数据中的Diff数据01;将新文件中的数据03_new和旧文件中的数据02_old进行减运算,可以得到Patch数据中的Diff数据02。同时,可以将新文件中的数据02_new直接作为Patch数据中的Extra01数据,将新文件中的数据04_new直接作为Patch数据中的Extra02数据。以此类推,即可基于新文件数据和旧文件数据得到所有Diff数据和Extra数据,组成Patch数据。
需要指出是,在依据BSDiff算法得到的Patch数据中,Diff数据和Extra数据是成对出现的,在每一块Diff数据后均为一块Extra数据。而且,Patch数据中各对Diff数据和Extra数据的位置偏移与新文件数据是一致的。
在得到Patch数据之后,服务器侧对Patch数据中的各Diff数据以及Extra数据按照分块尺寸(zonesize)对Diff数据以及Extra数据进行数据分块。每个Diff数据分块和Extra数据分块为终端对差分文件进行还原时的最小独立处理数据单元。
其中,zonesize可以根据终端侧RAM内存空间确定,具体可以根据终端侧可用于进行差分文件还原的连续的RAM内存空间的大小确定。zonesize也可以理解为终端在进行Diff数据还原处理时RAM内存空间所支持的最大处理字节数。
继续参照图7,针对Patch数据中的Diff数据01,按照zonesize将其划分为n1个Diff数据分块。在这n1个Diff数据分块中,前(n1-1)个Diff数据分块的数据尺寸(或称字节长度)为zonesize,最后一个Diff数据分块的数据尺寸小于等于zonesize。其中,这n1个Diff数据分块的数据排序与Diff数据01是相同的。类似的,针对Patch数据中的Extra数据01,也按照zonesize将其划分为n2个Extra数据分块。在这n1个Extra数据分块中,前(n2-1)个Extra数据分块的数据尺寸为zonesize,最后一个Extra数据分块的数据尺寸小于等于zonesize。其中,这n2个Extra数据分块的数据排序与Extra数据01也是相同的。
示例性的,在终端设备用于差分文件还原的RAM内存区域不复用的情况下,针对终端设备用于进行差分文件还原的连续的RAM内存空间,可以将该RAM内存空间划分为第一RAM内存区域、第二RAM内存区域、第三RAM内存区域和第四RAM内存区域,其中,第一RAM内存区域、第二RAM内存区域和第三RAM内存区域共同用于Diff数据分块还原处理涉及的数据存储操作,以及用于Extra数据分块还原处理涉及的数据存储操作,第四RAM内存区域用于数据解压操作。
假设,终端设备用于差分文件还原的RAM内存空间为M,数据压缩算法进行数据解压操作所需的内存空间为N1(也即第四RAM内存区域的内存空间为N1),则第一RAM内存区域、第二RAM内存区域和第三RAM内存区域可以均分剩余RAM内存空间,也即第一RAM内存区域、第二RAM内存区域和第三RAM内存区域的内存空间均为(M-N1)/3。此时,可以将zonesize设置为(M-N1)/3。例如,当M为200KB,N1为20KB时,RAM内存空间的划分情况为:第一RAM内存区域60KB、第二RAM内存区域60KB、第三RAM内存区域60KB、第四RAM内存区域20KB。此时,zonesize=60KB,表示终端设备可以每次对60KB的Diff数据或Extra数据进行数据还原处理。
又示例性的,在终端设备用于差分文件还原的RAM内存区域复用的情况下,可以将RAM内存顺序划分为第一RAM内存区域、第二RAM内存区域、第三RAM内存区域、第四RAM内存区域和第五RAM内存区域,其中,第一RAM内存区域和第三RAM内存区域共同用于Diff数据分块还原处理涉及的数据存储操作,以及用于Extra数据分块还原处理涉及的数据存储操作,第五RAM内存区域用于数据解压操作。第二RAM内存区域位于为第一RAM内存区域和第三RAM内存区域之间,为第一RAM内存区域的安全缓冲区域;第四RAM内存区域位于为第三RAM内存区域和第五RAM内存区域之间,为第三RAM内存区域的安全缓冲区域。
假设,终端设备用于差分文件还原的RAM内存空间为M,数据压缩算法进行数据解压操作所需的内存空间为N1(也即第五RAM内存区域的内存空间为N1),安全缓冲区域所需的内存空间为N2,则第一RAM内存区域和第三RAM内存区域可以均分剩余空间,也即第一RAM内存区域和第三RAM内存区域的内存空间均为(M-N1-N2*2)/2。此时,可以将zonesize设置为(M-N1-N2*2)/2。例如,当M为200KB,N1为16KB,N2为2KB时,RAM内存空间的划分情况为:第一RAM内存区域90KB、第二RAM内存区域2KB、第三RAM内存区域90KB、第四RAM内存区域2KB、第五RAM内存区域16KB。此时,zonesize=90KB,表示终端设备可以每次对90KB的Diff数据或Extra数据进行数据还原处理。
其中,在一些特殊情况下,数据压缩后的数据尺寸要大于数据压缩前的数据尺寸,由于Diff数据分块或Extra数据分块在压缩前的数据尺寸与第一RAM内存区域和第三RAM内存区域的大小相同,一旦Diff数据压缩分块或Extra数据压缩分块的尺寸变大,则会在第一RAM内存区域或第三RAM内存区域中溢出而影响正常的数据还原处理。由此,设置安全缓冲区域可以有效避免由于Diff数据压缩分块或Extra数据压缩分块尺寸增大溢出RAM内存区域而导致的数据还原异常的问题。
再示例性的,在终端设备用于差分文件还原的RAM内存区域复用的情况下,针对终端设备用于进行差分文件还原的连续的RAM内存空间,可以将该RAM内存空间划分为第一RAM内存区域、第三RAM内存区域和第五RAM内存区域,其中,第一RAM内存区域和第三RAM内存区域共同用于Diff数据分块还原处理涉及的数据存储操作,以及用于Extra数据分块还原处理涉及的数据存储操作,第五RAM内存区域用于数据解压操作。
假设,终端设备用于差分文件还原的RAM内存空间为M,数据压缩算法进行数据解压操作所需的内存空间为N1(也即第三RAM内存区域的内存空间为N1),则第一RAM内存区域和第二RAM内存区域可以均分剩余空间,也即第一RAM内存区域和第二RAM内存区域的内存空间均为(M-N1)/2。此时,可以将zonesize设置为(M-N1)/2。例如,当M为20KB,N1为16KB时,RAM内存空间的划分情况为:第一RAM内存区域2KB、第二RAM内存区域2KB、第三RAM内存区域16KB。此时,zonesize=2KB,表示终端设备可以每次对2KB的Diff数据或Extra数据进行数据还原处理。
在一些极端情况下,如果终端设备可用于进行差分文件还原的连续的RAM内存空间特别小,如20KB等,也可以不设置安全缓冲区域。
关于如何基于终端申请到的RAM内存空间的各个区域进行数据还原的操作,将在后续描述的Patch文件的还原流程中进行详细解释说明,在此不再赘述。
在对Patch数据中的各Diff数据以及Extra数据进行数据分块划分并压缩后,即可对分块划分及压缩后的Patch数据进行数据编码,得到相应的Patch文件。
在本实施例中,用于对Diff数据分块或Extra数据分块进行数据压缩的数据压缩算法,采用内存消耗低、解压速度快的数据压缩算法,例如LZMA(Lempel-Ziv-Markovchain-Algorithm)、miniLZO(Lempel-Ziv-Oberhumer)等无损解压缩算法,以此减小终端设备进行差分文件数据还原时所占用的RAM内存空间。
在图7中示例性的示出了一种Patch文件的数据结构,该数据结构包括总编码头,与多个Diff数据压缩分块和多个Extra数据压缩分块对应的编码信息,以及多个Diff数据压缩分块和多个Extra数据压缩分块。其中,与多个Diff数据压缩分块和多个Extra数据压缩分块对应的编码信息,用于描述多个Diff数据分块被压缩前的总字节长度、多个Extra数据分块被压缩前的总字节长度、各个Diff数据分块被压缩后的字节长度、各个Extra数据分块被压缩后的字节长度,以及在旧文件中读取与Diff数据压缩分块对应的数据的指针偏移量。
其中,总编码头除了包括魔数,还可以包括zonesize字段,zonesize字段的值用于表示Diff数据和Extra数据被划分的分块尺寸,可以用于终端在进行数据还原时与编码信息进行结合以进行数据寻址。示例性的,终端可以基于zonesize字段的值确定旧文件指针的偏移量,以在旧文件中读取与各Diff数据压缩分块分别对应的旧文件数据。又示例性的,终端可以基于zonesize字段的值,以及多个Diff数据分块被压缩前的总字节长度或多个Extra数据分块被压缩前的总字节长度,确定Diff数据分块的数量或Extra数据分块的数量。
在另一种示例中,总编码头中不包括zonesize字段,而是在各个编码信息中分别设置zonesize字段,本实施例对此不做限定。
在又一种示例中,在各个编码信息中设置Diff数据压缩分块的数量、Extra数据压缩分块的数量、每个Diff数据压缩分块被压缩前后的字节长度,以及每个Extra数据压缩分块被压缩前后的字节长度。
关于Patch文件的数据结构,本实施例对Diff数据压缩分块和Extra数据压缩分块的描述信息(或称编码信息)不做限定,只要终端侧基于相应的描述信息能够实现在Patch文件以及旧文件中进行数据寻址,并基于各个Diff数据压缩分块与各个Extra数据压缩分块还原得到目标文件即可。
图8示例性的示出了本实施例提供的一种Patch文件的数据结构。如图8所示,该Patch文件的数据结构包括头部(Header)、控制块(zone)、Diff数据和Extra数据。
其中,Header包括16个字节,用于填充魔数和zonesize。
每个zone包括24个字节,用于描述多个Diff数据压缩分块和多个Extra数据压缩分块。其中,多个Diff数据压缩分块和多个Extra数据压缩分块,对应于基于BSDiff算法得到的Patch数据中的一对Diff数据和Extra数据。zone中记录的数据,可以作为其描述的多个Diff数据压缩分块和多个Extra数据压缩分块的编码信息。其中,zone的前8个字节可以记录多个Diff数据压缩分块被压缩前对应的Diff数据的总字节长度,以及各个Diff数据压缩分块描述信息(如压缩后的字节长度);zone的中间8个字节可以记录多个Extra数据压缩分块被压缩前对应的Extra数据的总字节长度,以及各个Extra数据压缩分块描述信息(如压缩后的字节长度);zone的后8个字节用于填充指针偏移量,该指针偏移量用于确定在旧文件中读取数据(即用于与Diff数据分块进行加运算的数据)的位置。
在一种可选的实施方式中,zone的后8个字节填充的指针偏移量可以是基于指针当前位置确定的偏移量,并通过偏移量的正负来标识偏移方向。
在另一种可选的实施方式中,zone的后8个字节填充的指针偏移量可以是基于文件起始位置确定的偏移量。
Diff数据中包括一个或多Diff数据压缩分块,每个Diff数据压缩分块用于记录Diff数据分块被压缩后的数据。
Extra数据中包括一个或多个Extra数据数据压缩分块,每个Extra数据压缩分块用于记录Extra数据分块被压缩后的数据。
这样,在Patch文件中,每个Diff数据压缩分块或Extra数据压缩分块均可以作为终端进行数据还原时一个可独立处理的数据单元,以此降低终端进行数据还原时的RAM内存消耗。
在一种可选的实施方式中,当基于Patch数据生成Patch文件时,还可以将每个Diff数据分块以及Extra数据分块分别进行压缩,并对各个数据压缩块添加分块编码信息。其中,分块编码信息可以作为数据压缩分块的块头部,相应的Diff压缩数据或Extra压缩数据作为数据压缩分块的块数据。
以Patch数据中的Diff数据01和Extra数据01为例,图9示例性的示出了一种Patch文件的数据结构。如图9所示,针对Patch数据中的Diff数据01,按照zonesize将其划分为n1个Diff数据分块,并分别对每个Diff数据分块进行压缩,得到相应的Diff数据压缩分块。在Patch文件中,每个Diff数据压缩分块之前填充用于描述该Diff数据压缩分块的编码信息。示例性的,Diff数据压缩分块的编码信息可以包括但不限于Diff数据分块压缩前的数据尺寸(csize)和压缩后的数据尺寸(usize)。
类似的,继续参照图9,针对Patch数据中的Extra数据01,按照zonesize将其划分为n2个Extra数据分块,并分别对每个Extra数据分块进行压缩,得到相应的Extra数据压缩分块。在Patch文件中,每个Extra数据压缩分块之前填充用于描述该Extra数据压缩分块的编码信息。示例性的,Extra数据压缩分块的编码信息可以包括但不限于Extra数据分块压缩前的数据尺寸(csize)和压缩后的数据尺寸(usize)。
关于Patch数据中的其他Diff数据和Extra数据也是如此,在此不再赘述。由此,针对每个Diff数据压缩分块和每个Extra数据压缩分块,终端解析到相应的分块编码信息后,均可以将其作为一个可独立处理的数据单元,以执行数据还原操作。关于如何以Diff数据压缩分块或Extra数据压缩分块为一个数据处理单元进行目标文件还原的操作,将在后续描述的Patch文件的还原流程中进行详细解释说明,在此不再赘述。
需要指出的是,参照图9,编码信息01用于描述的是Diff数据01和Extra数据01,也即描述的是Diff数据压缩分块1-n1压缩前的总数据尺寸,Extra数据压缩分块1-n2压缩前的总数据尺寸,以及用于在旧文件中读取与Diff数据02对应的旧文件数据的指针偏移量。
图10示例性的示出了本实施例提供的一种Patch文件的数据结构。如图10所示,该Patch文件的数据结构包括头部(Header)、控制块(zone)、Diff数据和Extra数据。
其中,Header包括16个字节,用于填充魔数和zonesize。
每个zone包括24个字节,用于描述多个Diff分块压缩数据和多个Extra分块压缩数据。其中,多个Diff分块压缩数据被分块压缩前的Diff数据,以及多个Extra分块压缩数据被分块压缩前的Extra数据,对应于Patch数据中的一对Diff数据和Extra数据。zone中记录的数据,可以作为其描述的多个Diff分块压缩数据和多个Extra分块压缩数据的编码信息。其中,zone的前8个字节可以记录多个Diff分块压缩数据被分块压缩前的Diff数据的总字节长度;zone的中间8个字节可以记录多个Extra压缩数据被分块压缩前的Extra数据的总字节长度;zone的后8个字节用于填充指针偏移量,该指针偏移量用于确定在旧文件中读取数据(用于与Diff数据分块进行加运算的数据)的位置。
示例性的,每个zone可以使用(x,y,z)来表示,其中,x为其描述的多个Diff分块压缩数据被分块压缩前的Diff数据的总字节长度;y为其描述的多个Extra压缩数据被分块压缩前的Extra数据的总字节长度;z为旧文件指针的偏移量,用于确定从旧文件中读取与其所属的zone描述的首个Diff分块数据对应的旧文件数据的指针位置。其中,该指针偏移量可以是基于指针当前位置确定的偏移量,并通过偏移量的正负来标识偏移方向,也可以是基于文件起始位置确定的偏移量,本实施例对此不做限定。
在一种可选的示例中,每个zone也可以单独被压缩,在此将压缩后的zone称之为控制压缩块。其中,控制压缩块可以包括块头部和块数据,块数据用于记录与zone内容对应的压缩数据,块头部用于记录与该控制压缩块对应的压缩描述信息,压缩描述信息可以包括zone压缩后的数据尺寸(或称控制压缩块的数据尺寸),压缩描述信息可以包括但不限于zone压缩前是数据尺寸(csize)和压缩后的数据尺寸(csize)。
Diff数据中包括一个或多个数据压缩分块,每个数据压缩分块包括块头部和块数据,其中,块数据用于记录Diff数据分块被压缩后的数据,块头部用于记录与该Diff数据分块压缩数据对应的压缩描述信息,压缩描述信息可以包括但不限于Diff数据分块压缩前的数据尺寸(csize)和压缩后的数据尺寸(usize)。其中,压缩描述信息可以只包括Diff数据分块压缩后的数据尺寸(usize),也即只包括Diff数据压缩分块的数据尺寸。
Extra数据中包括一个或多个Extra数据压缩分块,每个Extra数据压缩分块包括块头部和块数据,其中,块数据用于记录Extra数据分块被压缩后的数据,块头部用于记录与该Extra数据分块压缩数据对应的压缩描述信息,压缩描述信息可以包括但不限于Extra数据分块压缩前的数据尺寸(csize)和压缩后的数据尺寸(usize)。其中,压缩描述信息可以只包括Extra数据分块压缩后的数据尺寸(usize),也即只包括Extra数据压缩分块的数据尺寸。
这样,在Patch文件中,每个Diff数据压缩分块或Extra数据压缩分块均可以作为终端进行数据还原时一个可独立处理的数据单元,以此降低终端进行数据还原时的RAM内存消耗。
需要指出的是,本申请实施例提供的Patch文件仅为示例性的表达,对此不做限定。
在一种示例中,在上述Patch文件的数据结构的基础上,Header中除了填充zonesize字段外,还可以填充数据压缩分块最大字节长度(LengthMAX)字段,该字段的值用于指示各个数据压缩分块(包括Diff数据压缩分块和Extra数据压缩分块)的最大数据尺寸。
如果每个zone也单独被压缩,则LengthMAX字段的值用于指示各个数据压缩分块(包括控制压缩块、Diff数据压缩分块和Extra数据压缩分块)的最大数据尺寸。
终端对Patch文件进行解析时,可以基于LengthMAX字段的值判断接收到的Patch文件是否有误。例如,假设Patch文件中某个Diff数据压缩分块或Extra数据压缩分块尺寸超过LengthMAX字段的值,终端则可以确定该Patch文件有误。
在又一种示例中,在上述Patch文件的数据结构的基础上,Header中除了填充zonesize字段外,还可以填充目标文件数据总长度(NewfileLength)字段,该字段的值用于指示基于该Patch文件还原得到的目标文件的数据总长度。
终端在基于Patch文件进行目标文件还原时,可以基于NewfileLength字段的值判断还原得到目标文件是否正确。例如,假设基于Patch文件进行数据还原得到的目标文件的数据长度小于或大于NewfileLength字段的值,终端则可以确定还原得到的目标文件有误。
在另一种示例中,在上述Patch文件的数据结构的基础上,上述Patch文件的数据结构中还可以包括尾部,该尾部中可以填充校验字段,该校验字段的值用于指示基于该Patch文件还原得到的目标文件的哈希值。
终端在基于Patch文件进行目标文件还原时,还可以基于校验字段的值判断还原得到目标文件是否正确。例如,假设基于Patch文件进行数据还原得到的目标文件的哈希值,与校验字段的值不同,终端则可以确定还原得到的目标文件有误。
上述以生成一个Patch文件为进行解释说明,同理也可以基于其他成对的新旧固件文件生成对应的Patch文件,以此得到与差分升级包对应的各个Patch文件。进而,当终端向服务器请求下载升级差分包时,服务器可以将对这些Patch文件进行打包生成相应的差分升级包,并将差分升级包通过无线网络发送至终端。
在本实施例提供的差分文件的生成方法中,对基于BSDiff算法得到的Patch数据重新进行数据编码,将Diff数据和Extra数据基于zonesize进行分块压缩,以使对Patch文件进行还原时最小数据处理单元的大小可控,其中,zonesize可以根据轻量级嵌入式设备的RAM内存空间灵活设置,这样能够更好地适用于轻量级嵌入式设备的固件升级场景。
考虑到终端侧进行差分文件还原时,申请的RAM内存空间中可以包括安全缓冲区域,本实施例还提供了一种基于zonesize对Diff数据与Extra数据进行分块划分的方法。
图11a示例性的示出了本实施例提供的基于Bsdiff原理的文件差分流程。
其中,图11a和图7所示的文件差分流程是一致的,区别在于Diff数据分块与Extra数据分块进行划分方式。在此未尽详细解释之处,可以参见前述,不再赘述。
参照图11a,以Patch数据中的Diff数据01为例,按照zonesize将其划分为n1个Diff数据分块。在这n1个Diff数据分块中,前(n1-1)个Diff数据分块的数据尺寸(或称字节长度)为zonesize,最后一个Diff数据分块的数据尺寸可能会大于zonesize。其中,这n1个Diff数据分块的数据排序与Diff数据01是相同的。类似的,针对Patch数据中的Extra数据01,也按照zonesize将其划分为n2个Extra数据分块。在这n1个Extra数据分块中,前(n2-1)个Extra数据分块的数据尺寸为zonesize,最后一个Extra数据分块的数据尺寸可能会大于zonesize。其中,这n2个Extra数据分块的数据排序与Extra数据01也是相同的。
继续参照图11b中(1),继续以Diff数据01为例,按照zonesize将其划分为(n1+1)个Diff数据分块。在这(n1+1)个Diff数据分块中,前n1个Diff数据分块的数据尺寸为zonesize,第(n1+1)个Diff数据分块的数据尺寸远小于zonesize。示例性的,第(n1+1)个Diff数据分块的数据尺寸小于安全缓冲区域数据尺寸的预设比例。例如,第(n1+1)个Diff数据分块的数据尺寸小于安全缓冲区域数据尺寸的50%。其中,安全缓冲区域指的是终端侧进行差分文件还原时申请的RAM内存空间中划分的安全缓冲区域。
继续参照图11b中(1),在第(n1+1)个Diff数据分块的数据尺寸小于安全缓冲区域数据尺寸的预设比例时,可以对Diff数据分块的划分情况进行调整。也即,可以将第(n1+1)个Diff数据分块用于第n1个Diff数据分块合并后,作为最终划分的第n1个Diff数据分块。此时,在这n1个Diff数据分块中,前(n1-1)个Diff数据分块的数据尺寸为zonesize,最后一个Diff数据分块的数据尺寸大于zonesize。
在第(n1+1)个Diff数据分块的数据尺寸不小于安全缓冲区域数据尺寸的预设比例时,不对Diff数据分块的划分情况进行调整。此时,Diff数据分块的划分情况可以参照图7,不再赘述。
以Extra数据01为例,亦是如此。如图11b中(2)所示,按照zonesize可以将Extra数据01划分为(n2+1)个Extra数据分块。在这(n2+1)个Extra数据分块中,前n2个Extra数据分块的数据尺寸为zonesize,第(n2+1)个Extra数据分块的数据尺寸远小于zonesize。示例性的,第(n2+1)个Extra数据分块的数据尺寸小于安全缓冲区域数据尺寸的预设比例。例如,第(n2+1)个Extra数据分块的数据尺寸小于安全缓冲区域数据尺寸的50%。
继续参照图11b中(2),在第(n2+1)个Extra数据分块的数据尺寸小于安全缓冲区域数据尺寸的预设比例时,可以对Extra数据分块的划分情况进行调整。也即,可以将第(n2+1)个Extra数据分块用于第n2个Extra数据分块合并后,作为最终划分的第n2个Extra数据分块。此时,在这n2个Extra数据分块中,前(n2-1)个Extra数据分块的数据尺寸为zonesize,最后一个Extra数据分块的数据尺寸大于zonesize。
在第(n2+1)个Extra数据分块的数据尺寸不小于安全缓冲区域数据尺寸的预设比例时,不对Extra数据分块的划分情况进行调整。此时,Extra数据分块的划分情况可以参照图7,不再赘述。
可以理解的,关于任意一个Diff数据或Extra数据,将其按照zonesize划分数据分块时,最后一个数据分块的尺寸是否大于zonesize,是与Diff数据或Extra数据的长度有关的。
此处关于差分文件的数据结构,以及生成流程等未尽详细解释之处,可以参见前文,在此不再赘述。
当终端侧基于Patch文件进行数据还原操作时,终端可以基于zone中记录多个Diff数据压缩分块被压缩前对应的Diff数据的总字节长度,zonesize的值,以及申请的安全缓冲区的数据尺寸,计算是否存在字节长度大于zonesize的Diff数据分块,以及各Diff数据分块的字节长度。类似的,终端可以基于zone中记录多个Extra数据压缩分块被压缩前对应的Extra数据的总字节长度,zonesize的值,以及申请的安全缓冲区的数据尺寸,计算是否存在字节长度大于zonesize的Extra数据分块,以及各Extra数据分块的字节长度。
在一种可选的实施方式中,也可以在Patch文件的头部中设置标志字段,该标志字段的值用于指示是否存在字节长度大于zonesize的数据分块(包括Diff数据分块和Extra数据分块)。
当终端侧基于Patch文件进行数据还原操作时,通过解析Patch文件的头部中标志字段的值,即可判断出是否存在字节长度大于zonesize的数据分块(包括Diff数据分块和Extra数据分块)。
与本实施例提供的差分文件的生成方法相对应的,本实施例还提供了一种差分文件的还原方法,该差分文件的还原方法应用于终端侧。其中,此处提及的终端可以理解需要对差分文件进行还原操作的任意电子设备,例如智能手机、智能手表、智能手环等,再例如是任意物联网节点设备。
图12示例性的示出了本实施例提供的基于Patch文件进行目标文件还原的流程。
参照图12,对Patch文件进行数据解码,得到对应的Patch数据。此处对Patch文件数据进行解码的过程可以理解为对Patch数据进行数据编码的逆过程。
参照图12,Patch文件的数据结构包括总编码头,与多个Diff数据压缩分块和多个Extra数据压缩分块对应的编码信息,以及多个Diff数据压缩分块和多个Extra数据压缩分块。其中,与多个Diff数据压缩分块和多个Extra数据压缩分块对应的编码信息,用于多个Diff数据压缩分块和多个Extra数据压缩分块进行描述,以使终端可以根据编码信息进行数据寻址。其中,关于Patch文件的数据结构可以参照上文关于图8的解释说明,在此不再赘述。
当终端获取到Patch文件时,对Patch文件的header进行解析,根据header中记录的魔数和zonesize获知文件类型及数据分块尺寸之后,即可根据该数据分块尺寸申请RAM内存空间以用于差分文件还原处理,并根据与该文件类型对应的数据结构进行数据解码操作。
其中,终端每解压到一个Diff数据分块或Extra数据分块之后,就根据这个Diff数据分块或Extra数据分块进行目标文件还原。
继续参照图12,在对Patch文件进行数据解码得到的Patch数据中,Diff数据和Extra数据是成对出现的,在每一块Diff数据后均为一块Extra数据。而且,Patch数据中各对Diff数据和Extra数据的排序与新文件数据是一致的。其中,每块Diff数据中包括多个解压后的Diff数据分块,每块Extra数据中包括多个解压后的Extra数据分块。其中,终端基于Patch数据进行目标文件还原时,分别基于每个Diff数据分块或Extra数据分块进行数据还原操作。
参照图8,在Patch文件中,每个zone用于描述多个Diff数据压缩分块和多个Extra数据压缩分块。由此,终端可以根据zone中记录的内容,获取到各个Diff数据压缩分块和Extra数据压缩分块,进行解压操作,并基于解压得到的Diff数据分块和Extra数据分块进行还原处理得到新文件中的数据。
继续参照图12,以终端基于编码信息01描述的各个Diff数据压缩分块(与Diff数据01对应)和Extra数据压缩分块(与Extra数据01)进行数据还原操作为例,进行解释说明。终端首先对Diff数据01压缩分块1进行解压,得到Diff数据01分块1,Diff数据01分块1的字节长度等于zonesize。终端在基于Diff数据01分块1进行数据还原操作时,读取Diff数据01分块1的Diff数据,以及在旧文件中读取与Diff数据01分块1匹配的旧文件数据(字节长度等于zonesize),并对Diff数据01分块1中的Diff数据和匹配的旧文件数据进行加运行,即可得到与Diff数据01分块1对应的新文件数据(字节长度等于zonesize),写入到新文件中。类似的,终端继续对Diff数据01压缩分块2进行解压,并基于解压得到的Diff数据01分块2进行数据还原,直至还原处理完成Diff数据01压缩分块n1。其中,对Diff数据01压缩分块n1解压得到的Diff数据01分块的字节长度小于等于zonesize。
接下来,终端继续对Extra数据01压缩分块1进行解压,得到Extra数据01分块1,Extra数据01分块1的字节长度等于zonesize。终端在基于Extra数据01分块1进行数据还原操作时,读取Extra数据01分块1的Extra数据,并将这些数据直接写入新文件中。类似的,终端继续对Extra数据01压缩分块2进行解压,并基于解压得到的Extra数据01分块2进行数据还原,直至还原处理完成Extra数据01压缩分块n2。其中,对Extra数据01压缩分块n2解压得到的Extra数据02分块的字节长度小于等于zonesize。
至此,终端完成基于Diff数据01和Extra数据01的目标文件还原。关于终端基于其他Diff数据和Extra数据进行目标文件还原的操作亦是如此,以此类推,终端即可基于Patch文件中的各个Diff数据压缩分块和各个Extra数据压缩分块,以及旧文件中的相关数据得到新文件中的所有数据。
下述以每个zone使用(x,y,z)表示为例,结合图13对基于Patch文件进行还原的流程进行解释说明。
其中,在本示例中,z表示自文件起始位置的指针偏移量。
如图13所示,在Patch文件中,zone1中填充的内容为(x1,y1,z1),用于描述Diff数据01压缩分块1、Diff数据01压缩分块2、Extra数据01压缩分块1和Extra数据01压缩分块2。其中,Diff数据01压缩分块1和Diff数据01压缩分块2被解压后得到的Diff数据的字节总长度为x1,Diff数据01压缩分块1被解压后得到的Diff数据01分块1的字符长度为m(假设zonesize=m),Diff数据01压缩分块2被解压后得到的Diff数据01分块2的字节长度为x1-m(x1-m≤m);Extra数据01压缩分块1和Extra数据01压缩分块2被解压后得到的Extra数据的字节总长度为y1,Extra数据01压缩分块1被解压后得到的Extra数据01分块1的字符长度为m,Extra数据01压缩分块2被解压后得到的Extra数据01分块2的字符长度为y1-m(y1-m≤m)。
终端在Patch文件中解析到zone1中填充的(x1,y1,z1)。首先,终端在Patch文件中继续Diff数据01压缩分块1,对Diff数据01压缩分块1进行解压得到m长度的Diff数据,以及在旧文件中读取m长度的数据,并将这两段m长度的数据进行加运算,得到m长度的新文件数据,写入新文件(或者称为目标文件)中。其中,旧文件指针自文件起始位置偏移z1后,终端即可在旧文件中读取与m长度的Diff数据(Diff数据01压缩分块1)对应的m长度的旧文件数据。然后,终端在Patch文件中继续读取Diff数据01压缩分块2,对Diff数据01压缩分块2进行解压得到(x1-m)长度的Diff数据,以及在旧文件中继续读取(x1-m)长度的数据,并将这两段(x1-m)长度的数据进行加运算,得到(x1-m)长度的新文件数据,写入新文件中。其中,终端即可在旧文件中读取与m长度的Diff数据对应的m长度的旧文件数据之后,旧文件指针继续向前偏移了m,此时终端即可基于指针当前位置继续在旧文件中读取与(x1-m)长度的Diff数据对应的(x1-m)长度的旧数据。
至此,zone1描述的各个Diff数据01压缩分块已处理完成。
终端在Patch文件中继续读取Extra数据01压缩分块1,对Extra数据01压缩分块1进行解压得到m长度的Extra数据,直接写入新文件中。终端在Patch文件中继续读取Extra数据01压缩分块2,对Extra数据01压缩分块2进行解压得到(y1-m)长度的Extra数据,直接写入新文件中。
至此,zone1描述的各个Extra数据01压缩分块也已处理完成。
接下来,终端继续在Patch文件中读取到zone2中填充的(x2,y2,z2)。在Patch文件中,zone2用于描述Diff数据02压缩分块1和其他Diff数据02压缩分块2,以及各个Extra数据02压缩分块。终端在Patch文件中继续Diff数据02压缩分块1,对Diff数据02压缩分块1进行解压得到m长度的Diff数据,以及在旧文件中读取m长度的数据,并将这两段m长度的数据进行加运算,得到m长度的新文件数据,继续写入新文件(或者称为目标文件)中。其中,为了使终端可以在旧文件中读取到与m长度的Diff数据(Diff数据02压缩分块1)对应的m长度的旧文件数据,需要基于旧文件起始位置和z2重新确定旧文件指针。也即,旧文件指针自文件起始位置偏移z2后,终端即可在旧文件中读取与m长度的Diff数据(Diff数据01压缩分块1)对应的m长度的旧文件数据。
类似的,终端继续对zone2描述的Diff数据02压缩分块以及Extra数据02压缩分块进行数据还原处理。
同理,当终端完成对所有zone描述的Diff数据压缩分块以及Extra数据压缩分块的数据还原处理之后,即可完成新文件的还原流程。
下述分别对终端基于Diff数据压缩分块以及Extra数据压缩分块进行数据还原时的RAM内存占用情况进行解释说明。
需要指出的是,当终端设备进行差分文件还原时,可以申请连续的RAM内存空间,也可以申请不连续的RAM内存空间,本实施例对此不做限定。
其中,当终端设备申请不连续的RAM内存空间时,如果RAM内存区域复用,则可以申请两块尺寸与zonesize相同的RAM内存区域,以及一块用于运行数据压缩算法的RAM内存区域(尺寸与数据压缩算法有关)。当终端设备申请不连续的RAM内存空间时,如果RAM内存区域不复用,则可以申请三块尺寸与zonesize相同的RAM内存区域,以及一块用于运行数据压缩算法的RAM内存区域(尺寸与数据压缩算法有关)。
在一种可选的实施方式中,如果RAM内存区域复用,则可以申请两块尺寸为(zonesize+N2)的RAM内存区域,以及一块用于运行数据压缩算法的RAM内存区域(尺寸与数据压缩算法有关)。其中,N2为安全缓冲区域的数据尺寸。
类似的,如果RAM内存区域不复用,则可以申请三块尺寸为(zonesize+N2)的RAM内存区域,以及一块用于运行数据压缩算法的RAM内存区域(尺寸与数据压缩算法有关)。其中,N2为安全缓冲区域的数据尺寸。
由于申请不连续的RAM内存空间,容易产生RAM内存碎片,造成RAM空间浪费,故在本实施例中以终端设备申请连续的RAM内存空间为例进行解释说明。
其中,当终端获取到Patch文件时,对Patch文件的header进行解析,获取到数据分块尺寸(zonesize)的值之后,即可基于zonesize的值申请一块连续的RAM内存空间,用于进行差分数据还原操作。
在一种可能的实施方式中,RAM内存区域不复用,终端为进行Patch还原操作申请连续的一块RAM内存空间,该RAM内存空间的大小为3*zonesize+N1(字节),其中,N1字节为运行数据压缩算法所需的RAM内存空间的尺寸大小。其中,终端可以将该RAM内存空间划分为四个RAM内存区域,分别为第一RAM内存区域201、第二RAM内存区域202、第三RAM内存区域203和第四RAM内存区域204,参照图14和图15所示。其中,第一RAM内存区域201、第二RAM内存区域202、第三RAM内存区域203的尺寸大小相等,均为zonesize(字节),第四RAM内存区域204的尺寸大小为N1字节。
示例性的,用于对Diff数据压缩分块或Extra数据压缩分块进行数据压缩的数据压缩算法,可以采用LZMA。以支持LZMA运行所需的RAM内存空间最小为16KB为例,则可以设置N1=16。假设zonesize=60KB,则在本实施方式中,终端可以为进行Patch还原操作申请连续的一块M字节的RAM内存空间,M=60*3+16=196KB。
其中,第一RAM内存区域201、第二RAM内存区域202、第三RAM内存区域203共同用于Diff数据分块还原处理涉及的数据存储操作,包括但不限于存储Diff数据压缩分块、存储解压后的Diff数据分块,存储加运算后得到的新文件数据分块(New数据分块),以及用于Extra数据分块还原处理涉及的数据存储操作,包括但不限于存储Extra数据压缩分块、存储解压后的Extra数据分块;第四RAM内存区域204用于数据解压操作。
示例性的,参照图14,在T0时刻,终端申请到第一RAM内存区域201、第二RAM内存区域202、第三RAM内存区域203和第四RAM内存区域204。在T1时刻,终端在Patch文件中读取到Diff数据01压缩分块1,将Diff数据01压缩分块1写入第一RAM内存区域201中。接下来,终端调用数据压缩算法对第一RAM内存区域201中的Diff数据01压缩分块1进行解压,数据压缩算法执行解压过程使用的RAM内存区域为第四RAM内存区域204,并将解压得到的数据写入第二RAM内存区域202中。在T2时刻,对Diff数据01压缩分块1解压完成,第二RAM内存区域202中暂存的是Diff数据01分块1(字节长度为zonesize)。接下来,终端在运行态镜像文件(相当于未升级的旧文件)中读取与Diff数据01分块1对应的Old数据01分块1(字节长度为zonesize),并暂存在第三RAM内存区域203中,如T3时刻所示。在T3时刻,终端在第三RAM内存区域203中读取Old数据01分块1,以及在第二RAM内存区域202中读取Diff数据01分块1,进行加运算。其中,终端可以对Diff数据01分块1和Old数据01分块1进行加等操作,以使加运算得到的New数据01分块1可以写在第二RAM内存区域202中,对第二RAM内存区域202中暂存的Diff数据01分块1进行覆盖。进而,在T4时刻,终端可以在第二RAM内存区域202中读取New数据01分块1写入静止态镜像文件(或者新建的一个文件)中。其中,静止态镜像文件可以理解为运行态镜像文件的备份。
需要指出的是,某个RAM内存区域中暂存的数据可以被覆盖,也可以被清空,本实施例对比不做限定。例如,在第三RAM内存区域203中读取Old数据01分块1,以及在第二RAM内存区域202中读取Diff数据01分块1,进行加运算时,可以将运算结果直接写入第一RAM内存区域201,对其暂存的Diff数据01压缩分块1进行覆盖。再例如,在对第一RAM内存区域201中暂存的Diff数据01压缩分块1进行解压之后,可以清空第一RAM内存区域201中暂存的数据,进而,在第三RAM内存区域203中读取Old数据01分块1,以及在第二RAM内存区域202中读取Diff数据01分块1,进行加运算时,可以将运算结果直接写入第一RAM内存区域201。
至此,终端完成基于Diff数据01压缩分块1的数据还原操作。同理,终端可以继续基于Diff数据01压缩分块2继续进行数据还原操作。其中,若Diff数据01压缩分块2为Diff数据01的最后一个压缩分块,则对其解压得到的Diff数据01分块2字节长度小于等于zonesize。
当终端基于Diff数据01包括的各个Diff数据01压缩分块完成数据还原操作时,即可继续基于Extra数据01包括的各个Extra数据01压缩分块进行数据还原操作。
示例性的,参照图15,在T5时刻,终端在Patch文件中读取到Extra数据01压缩分块1,将Extra数据01压缩分块1写入第一RAM内存区域201中。接下来,终端调用数据压缩算法对第一RAM内存区域201中的Extra数据01压缩分块1进行解压,数据压缩算法执行解压过程使用的RAM内存区域为第四RAM内存区域204,并将解压得到的数据写入第二RAM内存区域202中。在T6时刻,对Extra数据01压缩分块1解压完成,第二RAM内存区域202中暂存的是Extra数据01分块1(字节长度为zonesize)。进而,在T6时刻,终端可以在第二RAM内存区域202中读取Extra数据01分块1继续写入静止态镜像文件中。此时,静止态镜像文件中的数据还原到New数据01分块3。
至此,终端完成基于Extra数据01压缩分块1的数据还原操作。同理,终端可以继续基于Extra数据01压缩分块2继续进行数据还原操作。其中,若Extra数据01压缩分块2为Extra数据01的最后一个压缩分块,则对其解压得到的Extra数据01分块2字节长度小于等于zonesize。以此类推,当静止态镜像文件中的数据被写满时,终端完成基于Patch文件的数据还原操作。
在此种实施方式中,也可以考虑为RAM内存区域设置安全缓冲区,本实施例对此不做限定。示例性的,终端为进行Patch还原操作申请连续的一块RAM内存空间,该RAM内存空间的大小为3*zonesize+3*N2+N1(字节)。其中,N2字节为安全缓冲区所占的RAM内存空间的尺寸大小。关于此种实施方式,在此不再赘述。
在另一种可能的实施方式中,RAM内存区域复用,终端为进行Patch还原操作申请连续的一块RAM内存空间,该RAM内存空间的大小为2*zonesize+2*N2+N1(字节),N1字节为运行数据压缩算法所需的RAM内存空间的尺寸大小,N2字节为安全缓冲区所占的RAM内存空间的大小。其中,终端可以将该RAM内存空间划分为五个RAM内存区域,分别为第一RAM内存区域301、第二RAM内存区域302、第三RAM内存区域303、第四RAM内存区域304和第五RAM内存区域305,参照图16和图17所示。其中,第一RAM内存区域301、第三RAM内存区域303的尺寸大小相等,均为zonesize(字节);第五RAM内存区域305的尺寸大小为N1字节;第二RAM内存区域302位于为第一RAM内存区域301和第三RAM内存区域303之间,为第一RAM内存区域301的安全缓冲区域,第四RAM内存区域304位于为第三RAM内存区域303和第五RAM内存区域305之间,为第三RAM内存区域304的安全缓冲区域,且第二RAM内存区域302和第四RAM内存区域304的尺寸大小相等,均为N2字节。
示例性的,用于对Diff数据压缩分块或Extra数据压缩分块进行数据压缩的数据压缩算法,可以采用LZMA。以支持LZMA运行所需的RAM内存空间最小为16KB为例,则可以设置N1=16。假设zonesize=90KB,N2=2KB,则在本实施方式中,终端可以为进行Patch还原操作申请连续的一块M字节的RAM内存空间,M=90*2+2*2+16=200KB。
其中,第一RAM内存区域301和第三RAM内存区域303共同用于Diff数据分块还原处理涉及的数据存储操作,包括但不限于存储Diff数据压缩分块、存储解压后的Diff数据分块,存储加运算后得到的新文件数据分块(New数据分块),以及用于Extra数据分块还原处理涉及的数据存储操作,包括但不限于存储Extra数据压缩分块、存储解压后的Extra数据分块;第五RAM内存区域304用于数据解压操作。
示例性的,参照图16,在T0时刻,终端申请到第一RAM内存区域301、第二RAM内存区域302、第三RAM内存区域303、第四RAM内存区域304和第五RAM内存区域305。在T1时刻,终端在Patch文件中读取到Diff数据01压缩分块1,将Diff数据01压缩分块1写入第一RAM内存区域301中。接下来,终端调用数据压缩算法对第一RAM内存区域301中的Diff数据01压缩分块1进行解压,数据压缩算法执行解压过程使用的RAM内存区域为第五RAM内存区域304,并将解压得到的数据写入第三RAM内存区域303中。在T2时刻,对Diff数据01压缩分块1解压完成,第三RAM内存区域303中暂存的是Diff数据01分块1(字节长度为zonesize)。接下来,终端在运行态镜像文件(相当于未升级的旧文件)中读取与Diff数据01分块1对应的Old数据01分块1(字节长度为zonesize),并暂存在第一RAM内存区域301中,将Diff数据01压缩分块1进行覆盖,如T3时刻所示。继续参照T3时刻,终端在第一RAM内存区域301中读取Old数据01分块1,以及在第三RAM内存区域303中读取Diff数据01分块1,进行加运算。其中,终端可以对Diff数据01分块1和Old数据01分块1进行加等操作,以使加运算得到的New数据01分块1可以写在第三RAM内存区域303中,对第三RAM内存区域303中暂存的Diff数据01分块1进行覆盖。进而,在T4时刻,终端可以在第三RAM内存区域303中读取New数据01分块1写入静止态镜像文件中。
其中,也可以将加运算得到的New数据01分块1写在第一RAM内存区域301中,对第一RAM内存区域301中暂存的Old数据01分块1进行覆盖。进而,终端可以在第一RAM内存区域301中读取New数据01分块1写入静止态镜像文件中。
至此,终端完成基于Diff数据01压缩分块1的数据还原操作。同理,终端可以继续基于Diff数据01压缩分块2继续进行数据还原操作。其中,若Diff数据01压缩分块2为Diff数据01的最后一个压缩分块,则对其解压得到的Diff数据01分块2字节长度小于等于zonesize。
当终端基于Diff数据01包括的各个Diff数据01压缩分块完成数据还原操作时,即可继续基于Extra数据01包括的各个Extra数据01压缩分块进行数据还原操作。
示例性的,参照图17,在T5时刻,终端在Patch文件中读取到Extra数据01压缩分块1,将Extra数据01压缩分块1写入第一RAM内存区域301中。接下来,终端调用数据压缩算法对第一RAM内存区域301中的Extra数据01压缩分块1进行解压,数据压缩算法执行解压过程使用的RAM内存区域为第五RAM内存区域305,并将解压得到的数据写入第三RAM内存区域303中。在T6时刻,对Extra数据01压缩分块1解压完成,第三RAM内存区域303中暂存的是Extra数据01分块1(字节长度为zonesize)。进而,在T6时刻,终端可以在第三RAM内存区域303中读取Extra数据01分块1继续写入静止态镜像文件中。此时,静止态镜像文件中的数据还原到New数据01分块3。
至此,终端完成基于Extra数据01压缩分块1的数据还原操作。同理,终端可以继续基于Extra数据01压缩分块2继续进行数据还原操作。其中,若Extra数据01压缩分块2为Extra数据01的最后一个压缩分块,则对其解压得到的Extra数据01分块2字节长度小于等于zonesize。以此类推,当静止态镜像文件中的数据被写满时,终端完成基于Patch文件的数据还原操作。
其中,终端申请第二RAM内存区域302,作为第一RAM内存区域301的安全缓冲区,能够第一RAM内存区域301中数据溢出而导致数据处理出错的问题。同理,终端申请第四RAM内存区域304,作为第三RAM内存区域303的安全缓冲区,能够第三RAM内存区域303中数据溢出而导致数据处理出错的问题。
需要指出的是,假设某个Diff数据压缩分块或Extra数据压缩分块的尺寸大于压缩前的Diff数据分块或Extra数据压缩的尺寸时,将该数据压缩分块暂存到第一RAM内存区域或第三RAM内存区域中时,会造成数据相应地溢出到第二RAM内存区域或第四RAM内存区域中的情形。此时,终端设备对该数据压缩分块进行数据解压处理时,需要一并对溢出到第二RAM内存区域或第四RAM内存区域中的数据进行解压处理,以此保证解压得到的Diff数据分块或Extra数据分块的正确性。
当终端设备申请用于差分数据还原的连续的RAM内存空间为某个确定值时,相比RAM内存区域不复用的情况,RAM内存区域复用能够提高数据还原处理效率。
当终端可分配用于差分数据还原处理的RAM内存空间极小时,终端在申请到的RAM内存空间中也可以不划分作为安全缓冲区的第二RAM内存区域302和第四RAM内存区域304。当终端在申请到的RAM内存空间中不划分作为安全缓冲区的第二RAM内存区域302和第四RAM内存区域304时,终端基于Diff数据压缩分块以及Extra数据压缩分块进行数据还原时的RAM内存占用情况也是类似的,在此不再赘述。
示例性的,用于对Diff数据压缩分块或Extra数据压缩分块进行数据压缩的数据压缩算法,可以采用LZMA。以支持LZMA运行所需的RAM内存空间最小为16KB为例,则可以设置N1=16。假设zonesize=2KB,则在本实施方式中,终端可以为进行Patch还原操作申请连续的一块M字节的RAM内存空间,M=2*2+16=20KB。
这样,终端基于Diff数据压缩分块或Extra数据压缩分块进行数据还原操作时,解压操作及数据存储操作均在指定的RAM内存区域中进行,充分有效地利用了RAM内存空间,差分还原操作消耗的RAM内存较小,使得RAM空间较小的轻量级设备也能具备差分还原能力。
对应于图11a-图11b所示的数据分块划分方式,终端对Patch文件进行数据还原时,申请的用于Patch还原操作的RAM内存空间包括安全缓冲区。其中,安全缓冲区的数据尺寸为N2字节。
示例性的,终端申请的RAM内存空间可以是连续的,可以参照图16所示。又示例性的,终端申请的RAM内存空间也可以是非连续的,例如申请三块尺寸为(zonesize+N2)的RAM内存区域,以及一块用于运行数据压缩算法的RAM内存区域(尺寸与数据压缩算法有关)。本实施例对此不做限定。
当终端基于某个zone描述的Diff数据压缩分块或Extra数据压缩分块进行数据还原操作,可以基于zone中记录多个Diff数据压缩分块被压缩前对应的Diff数据的总字节长度,zonesize的值,以及申请的安全缓冲区的数据尺寸,计算是否存在字节长度大于zonesize的Diff数据分块。
如果不存在字节长度大于zonesize的Diff数据分块,则终端基于多个Diff数据压缩分块进行数据还原的处理流程可以参见前文,在此不再赘述。
假设某个zone描述的最后一个Diff数据压缩分块(如Diff数据01压缩分块n1)被压缩前的Diff数据分块的字节长度大于zonesize,下述对终端基于Diff数据01压缩分块n1进行数据还原处理的流程进行解释说明。
参照图18,在T1时刻,终端在Patch文件中读取到Diff数据01压缩分块n1,将Diff数据01压缩分块n1写入第一RAM内存区域301中。接下来,终端调用数据压缩算法对第一RAM内存区域301中的Diff数据01压缩分块n1进行解压,数据压缩算法执行解压过程使用的RAM内存区域为第五RAM内存区域304,并将解压得到的数据写入第三RAM内存区域303中。在T2时刻,对Diff数据01压缩分块n1解压完成,解压得到Diff数据01分块n1暂存到第三RAM内存区域303中。由于Diff数据01分块n1被压缩前的字节长度大于zonesize,则Diff数据01分块n1不仅将第三RAM内存区域303写满,部分数据还会写入第四RAM内存区域304中。接下来,终端在运行态镜像文件(相当于未升级的旧文件)中读取与Diff数据01分块n1对应的Old数据01分块n1(字节长度大于zonesize),并暂存在第一RAM内存区域301中。其中,Old数据01分块n1不仅将将第一RAM内存区域301写满,部分数据还会写入第二RAM内存区域302中,如T3时刻所示。继续参照T3时刻,终端在第一RAM内存区域301和第二RAM内存区域302中读取Old数据01分块n1,以及在第三RAM内存区域303和第四RAM内存区域304中读取Diff数据01分块n1,进行加运算。其中,终端可以对Diff数据01分块n1和Old数据01分块n1进行加等操作,以使加运算得到的New数据01分块n1可以写在第三RAM内存区域303和第四RAM内存区域304中。进而,在T4时刻,终端可以在第三RAM内存区域303和第四RAM内存区域304中读取New数据01分块n1写入静止态镜像文件中。
假设某个zone描述的最后一个Extra数据压缩分块(如Extra数据01压缩分块n2)被压缩前的Extra数据分块的字节长度大于zonesize,下述对终端基于Extra数据01压缩分块n2进行数据还原处理的流程进行解释说明。
示例性的,参照图19,在T5时刻,终端在Patch文件中读取到Extra数据01压缩分块n2,将Extra数据01压缩分块n2写入第一RAM内存区域301中。接下来,终端调用数据压缩算法对第一RAM内存区域301中的Extra数据01压缩分块n2进行解压,数据压缩算法执行解压过程使用的RAM内存区域为第五RAM内存区域305,并将解压得到的数据写入第三RAM内存区域303中。在T6时刻,对Extra数据01压缩分块n2解压完成,解压得到Extra数据01分块n2暂存到第三RAM内存区域303中。由于Extra数据01分块n2被压缩前的字节长度大于zonesize,则Extra数据01分块n2不仅将第三RAM内存区域303写满,部分数据还会写入第四RAM内存区域304中。进而,在T6时刻,终端可以在第三RAM内存区域303和第四RAM内存区域304中读取Extra数据01分块n2继续写入静止态镜像文件中。此时,静止态镜像文件中的数据还原到New数据01分块n2。
在一种示例中,如果终端解析到Patch文件的头部中标志字段的值,确定判断出存在字节长度大于zonesize的数据分块(包括Diff数据分块和Extra数据分块),则可以依据如图17和18所示的处理流程进行数据还原处理。
这样,当某个数据分块的尺寸稍大于zonesize,终端也可以借助于安全缓冲区完成相应的数据还原操作。
在一种示例中,Patch文件的数据结构中,Header中除了填充zonesize字段外,还可以填充数据压缩分块最大字节长度(LengthMAX)字段,该字段的值用于指示各个数据压缩分块(包括Diff数据压缩分块和Extra数据压缩分块)的最大数据尺寸。
在此情形下,终端对Patch文件进行解析时,可以基于LengthMAX字段的值判断接收到的Patch文件是否有误。例如,假设Patch文件中某个Diff数据压缩分块或Extra数据压缩分块尺寸超过LengthMAX字段的值,终端则可以确定该Patch文件有误,进而不再基于该Patch文件进行数据还原操作。
在又一种示例中,Patch文件的数据结构中,Header中除了填充zonesize字段外,还可以填充目标文件数据总长度(NewfileLength)字段,该字段的值用于指示基于该Patch文件还原得到的目标文件的数据总长度。
在此情形下,终端在基于Patch文件进行目标文件还原时,可以基于NewfileLength字段的值判断还原得到目标文件是否正确。例如,假设基于Patch文件进行数据还原得到的目标文件的数据长度小于或大于NewfileLength字段的值,终端则可以确定还原得到的目标文件有误,进而不再基于该目标文件进行固件升级。
在另一种示例中,Patch文件的数据结构还可以包括校验字段,该字段的值用于指示基于该Patch文件还原得到的目标文件的哈希值。
终端在基于Patch文件进行目标文件还原时,还可以基于校验字段的值判断还原得到目标文件是否正确。例如,假设基于Patch文件进行数据还原得到的目标文件的哈希值,与校验字段的值不同,终端则可以确定还原得到的目标文件有误,进而不再基于该目标文件进行固件升级。
这样,在本申请实施例中,将Patch数据拆分为大小可控的差分还原单元数据,其数据尺寸与终端RAM空间大小有关,以使终端设备每次只需对一块差分还原单元数据进行处理,进而使得RAM空间有限的轻量级设备也能具备差分还原能力。
上述以一组镜像文件(包括运行态镜像文件和静止态运行文件)为例进行解释说明,同理也可以基于其他Patch文件对应地将其他静止态镜像文件中数据写满,由此得到与升级包对应的所有镜像文件。此时,终端即可基于这些镜像文件进行固件升级。关于终端基于这些镜像文件进行固件升级的解释可以参照已有技术,在此不再赘述。
需要指出的是,在前述差分文件的生成方法实施例中,以Diff数据服务器是基于减运算生成为例进行解释说明的。相应的,在前述差分文件的还原方法实施例中,终端基于加运算对Diff数据进行还原为例进行解释说明的。其中,Diff数据还可以是服务器基于其他运算生成的,暂且称之为Diff数据是服务器基于第一运算生成的。相应的,终端可以基于第二运算对Diff数据进行还原,第二运算为第一运算的逆运算。本实施例对第一运算和第二运算不做限定。
需要指出的是,在前述差分文件的生成方法实施例以及差分文件的还原方法实施例中,均以固件文件为例进行解释说明。其中,本实施例提供的差分文件的生成方法以及差分文件的还原方法还可以适用于其他文件类型的差分还原处理,例如补丁文件、APK(Android application package,Android应用程序包)等。
另外,本申请实施例提供的差分文件的还原方法,不仅适用于RAM内存空间较小(例如小于第一预设阈值)的轻量级电子设备,还适用于可用于进行差分文件还原的RAM内存空间较小(例如小于第二预设阈值)的其他电子设备。
也就是说,当电子设备的RAM内存空间不小,但其分配用于进行差分文件还原的RAM内存空间较小时,电子设备可以执行本实施例提供的差分文件的还原方法,以使用较小的RAM内存空间来实现对差分文件的还原功能。
图20示例性的示出了一种应用场景。如图20中(1)所示,用户使用手机玩游戏时,界面上弹出对话框700。其中,对话框700中的内容显示“当前检测到xx补丁,是否立即下载并更新”。若用户同意,则可以点击“是”选项701。响应于用户的操作,对话框消失,如图20中(2)所示,用户继续使用手机玩游戏。与此同时,手机后台执行下载xx补丁,基于下载的xx补丁进行差分文件还原的操作,以及基于还原后的补丁文件进行热更新。
在该应用场景中,虽然手机的RAM内存空间不小,但手机分配的用于进行差分文件还原操作的RAM内存空间有限,以不对用户使用手机的体验产生影响。此时,若手机执行本申请实施例提供的差分文件的还原方法,则可以通过较小的RAM内存空间实现差分数据还原功能,同时也不会对用户的使用体验产生影响。
在另外一些应用场景中,假设用户开启了手机的APK自动更新功能,则在用户使用手机的同时,手机后台可能进行APK差分包下载及差分还原操作。虽然手机的RAM内存空间不小,但为了不对用户的使用体验产生影响,手机分配用于进行差分文件还原操作的RAM内存空间通常会较小。此时,若手机执行本申请实施例提供的差分文件的还原方法,则可以通过较小的RAM内存空间实现差分数据还原功能,同时也不会对用户的使用体验产生影响。
然而,在实际应用中,同种终端设备往往存在多个版本,这多个版本的终端设备可能都存在固件升级的诉求,而不同版本的终端设备的硬件配置不一定相同(通常为硬件资源的高低配置)。如果针对每个版本的终端设备,单独开发升级差分包,无疑会增加升级差分包的版本数量,进而增加人工维护成本。因此,为了减少升级差分包的版本数量,可以针对多个版本的终端设备开发相同的升级差分包,满足一包多发的场景诉求,实现不同版本终端设备的升级差分包的统一。
其中,当升级差分包中的差分文件是基于前述方案生成时,如果终端设备分配用于进行差分文件还原的RAM内存空间较大时,如何提升差分文件还原的效率是需要解决的问题。
为了解决上述问题,本申请实施例还提供了一种差分文件的还原方法。其中,终端设备能够根据用于差分文件还原的RAM内存空间自适应地进行差分文件的还原,以提高差分文件的还原效率。
在前文描述中,参照图13,Patch文件中的各个压缩分块(包括Diff数据压缩分块和Extra数据压缩分块)是被串行处理的。当终端设备分配用于进行差分文件还原的RAM内存空间较大时,压缩分块的还原处理可以被并行执行,以此提升差分文件的还原效率。其中,压缩分块还原处理的并行化与终端设备分配用于进行差分文件还原的RAM内存空间尺寸有关。
如前文所述,参照图16和图17,终端设备可以基于第一RAM内存区域301、第二RAM内存区域302、第三RAM内存区域303、第四RAM内存区域304和第五RAM内存区域305,实现对一个压缩分块(Diff数据压缩分块或Extra数据压缩分块)的还原处理。其中,第一RAM内存区域301、第三RAM内存区域303的尺寸大小相等,均为zonesize(字节);第五RAM内存区域305的尺寸大小为N1字节,用于数据解压操作;第二RAM内存区域302为第一RAM内存区域301的安全缓冲区域,第四RAM内存区域304为第三RAM内存区域304的安全缓冲区域,均为N2字节。
这样,除了能够提供用于数据解压操作的第五RAM内存区域,一组RAM空间(即第一RAM内存区域301、第二RAM内存区域302、第三RAM内存区域303以及第四RAM内存区域304)即可实现对一个压缩分块的还原处理。因此,除了第五RAM内存区域之外,只要终端设备还能够提供多组RAM空间,即可实现对多个压缩分块还原处理的并行化,以提升差分文件的还原效率。
例如,参照图21a,第一组RAM空间用于第一还原线程进行压缩分块(Diff数据压缩分块或Extra数据压缩分块)的还原处理,第二组RAM空间用于第二还原线程进行压缩分块(Diff数据压缩分块或Extra数据压缩分块)的还原处理,第一还原线程和第二还原线程是并行的。这样,当终端设备能够提供多组RAM空间时,终端设备就可以通过并行的多个还原线程对Diff数据压缩分块或Extra数据压缩分块进行还原处理。
在一种可选的实施方式中,终端设备用于差分文件还原处理的RAM空间为静态数组,可以在该静态数组中分别划分与每个还原线程对应的一组RAM空间,以使每个还原线程基于对应的一组RAM空间对压缩分块(Diff数据压缩分块或Extra数据压缩分块)进行还原处理。
示例性的,如图21a所示,在静态数组中依次划分各组RAM空间(包括第一RAM内存区域301、第二RAM内存区域302、第三RAM内存区域303和第四RAM内存区域304)以及第五RAM内存区域305,其中,一组RAM空间对应于一个还原线程。
又示例性的,如图21b所示,在静态数组中依次划分第一RAM部分、第二RAM部分以及第五RAM内存区域305。在第一RAM部分中,依次划分多对第一RAM内存区域301和第二RAM内存区域302;在第二RAM部分中,依次划分多对第三RAM内存区域303和第四RAM内存区域304。其中,一对第一RAM内存区域301和第二RAM内存区域302,以及一对第三RAM内存区域303和第四RAM内存区域304,对应于一个还原线程。
需要指出的是,上述RAM空间的划分仅为示例性的举例说明,本实施例对此不做限定,只要每个还原线程单独对应于一组RAM空间(包括第一RAM内存区域301、第二RAM内存区域302、第三RAM内存区域303和第四RAM内存区域304)即可,就可以实现压缩分块还原的并行化。
本申请实施例中,在对Patch数据的还原过程中,可以以每组增量更新数据作为还原线程独立执行还原操作的单位。其中,一组增量更新数据即为一个控制块(zone)描述的增量更新数据。一般情况下,一组增量更新数据包括Diff数据分块和Extra数据分块,Diff数据分块和Extra数据分块的数量为一个或多个。特殊情况下,一组增量更新数据只包括Diff数据分块或Extra数据分块。
示例性的,终端设备创建并行的第一还原线程和第二还原线程用于Patch数据的还原。如图22所示,第一还原线程用于对zone1描述的压缩分块进行还原处理,第二还原线程用于对zone2描述的压缩分块进行还原处理,第一还原线程用于对zone3描述的压缩分块进行还原处理,第二还原线程用于对zone4描述的压缩分块进行还原处理,以此类推。这样,终端设备即可基于两个并行的还原线程实现对Patch数据的还原处理,提升了Patch数据的还原效率。
其中,每个还原线程对某个zone描述的压缩分块进行还原处理时,按顺序依次对该zone描述的各个Diff数据分块和Extra数据分块进行还原处理。关于还原线程依次对各个Diff数据分块和Extra数据分块进行还原处理的操作,可以参照前文,在此不再赘述。
为了实现Patch数据还原的并行化,本实施例对Patch文件的数据结构进行适应性的调整。图23示例性的示出了本实施例提供的一种Patch文件的数据结构。如图23所示,该Patch文件的数据结构包括头部(Header)、控制块(zone)、Diff数据和Extra数据。其中,关于Diff数据和Extra数据的描述可以参照前文,与图8所示的Patch文件的数据结构相同。
与图8所示的Patch文件的数据结构不同的是,在如图23所示的Patch文件的数据结构中,头部(Header)中还包括控制块(zone)总数量。
与图8所示的Patch文件的数据结构不同的是,在如图23所示的Patch文件的数据结构中,每个zone中不仅包括用于在旧文件中读取数据的第一指针偏移量,还包括在新文件中写入数据的第二指针偏移量。其中,第一指针偏移量是基于旧文件起始位置确定的指针偏移量,第二指针偏移量是基于新文件起始位置确定的指针偏移量。而且,每个zone中还需包括该zone描述的多个Diff数据分块和多个Extra数据分块压缩后的字节长度总和,例如可以是多个Diff数据分块压缩后的字节总长度以及多个Extra数据分块压缩后的字节总长度。
在本实施例中,第一指针偏移量用于在旧文件中读取与该zone描述的首个Diff数据分块对应的旧数据,也即在旧文件中读取用于与该zone描述的首个Diff数据分块进行加运算的旧数据。第二指针偏移量用于确定在新文件中写入与该zone对应的还原数据的首地址。这样,多个还原线程并行处理各个zone描述的数据分块时,可以基于各个zone中的第二指针偏移量确定在新文件中写入与该zone对应的还原数据的首地址。
在本实施例中,一个zone描述的多个Diff数据分块压缩后的字节总长度以及多个Extra数据分块压缩后的字节总长度,可以用于还原线程计算下一个zone在Patch文件中的地址偏移量。也即,该字节总长度,可以用于还原线程在Patch文件中读取数据时,跳过该zone描述的各个数据压缩分块,以读取到下个zone中填充的数据。也即,还原线程可以基于各个zone描述的多个Diff数据分块压缩后的字节总长度以及多个Extra数据分块压缩后的字节总长度,读取到需要其处理的zone描述的数据压缩分块。例如,某个还原线程需要处理zone2描述的各个数据压缩分块的还原操作,则可以根据在zone1中读取到的其描述的多个Diff数据分块压缩后的字节总长度以及多个Extra数据分块压缩后的字节总长度,确定zone1描述的Diff数据压缩分块和Extra数据压缩分块的总字节长度,进而在Patch文件中读取数据时,跳过这些Diff数据压缩分块和Extra数据压缩分块,继而可以读取zone2中填充的数据。类似的,若该还原线程需要处理zone4描述的各个数据压缩分块的还原操作,亦是如此,在此不再赘述。
示例性的,参照图23,每个zone包括32个字节,用于描述多个Diff数据压缩分块和多个Extra数据压缩分块。其中,多个Diff数据压缩分块和多个Extra数据压缩分块,对应于基于BSDiff算法得到的Patch数据中的一对Diff数据和Extra数据。zone中记录的数据,可以作为其描述的多个Diff数据压缩分块和多个Extra数据压缩分块的编码信息。其中,zone的首个8字节可以记录多个Diff数据压缩分块被压缩前后对应的Diff数据的总字节长度,以及各个Diff数据压缩分块描述信息(如压缩后的字节长度);zone的第二个8字节可以记录多个Extra数据压缩分块被压缩前后对应的Extra数据的总字节长度,以及各个Extra数据压缩分块描述信息(如压缩后的字节长度);zone的第三个8字节用于填充第一指针偏移量,第一指针偏移量用于确定在旧文件中读取数据(即用于与Diff数据分块进行加运算的数据)的位置;zone的第四个8字节用于填充第二指针偏移量,第二指针偏移量用于确定在新文件中写入数据(即还原操作所得的数据)的位置。
在另一种可选的实施方式中,每个zone包括32个字节,用于描述多个Diff数据压缩分块和多个Extra数据压缩分块。其中,zone的首个8字节可以记录多个Diff数据压缩分块被压缩前后对应的Diff数据的总字节长度;zone的第二个8字节可以记录多个Extra数据压缩分块被压缩前后对应的Extra数据的总字节长度;zone的第三个8字节用于填充第一指针偏移量,第一指针偏移量用于确定在旧文件中读取数据(即用于与Diff数据分块进行加运算的数据)的位置;zone的第四个8字节用于填充第二指针偏移量,第二指针偏移量用于确定在新文件中写入数据(即还原操作所得的数据)的位置。该zone结构也可以应用于如图10所示的Patch文件的数据结构中,或者也可以应用于本申请实施例提供的Patch文件的其它数据结构中,以使多个还原线程并行处理各个zone描述的数据分块时,可以基于各个zone中的第二指针偏移量确定在新文件中写入与该zone对应的还原数据的首地址。
其中,对于第一指针偏移量和第二指针偏移量在zone中填充的先后顺序,本实施例不做限定。
示例性的,还原线程还可以基于在Patch文件中读取到zone的顺序,确定zone的编号,并基于zone的编号判断该zone描述的各个数据压缩分块是否需要其进行还原处理。
又示例性的,每个zone中还可以填充该zone的编号,以使每个还原线程可以基于读取到的zone编号判断该zone描述的各个数据压缩分块是否需要其进行还原处理。
在一种可选的实施方式中,假设k个还原线程并行处理Patch文件的还原处理,则可以根据zone编号对还原线程数量的取余结果,来判断一个zone描述的各个数据压缩分块是否需要其进行还原处理。
假设zone编号由1开始计数。针对编号为x的zone:如果x%k=1,则该zone描述的各个数据压缩分块由还原线程1进行处理;如果x%k=2,则该zone描述的各个数据压缩分块由还原线程2进行处理;如果x%k=n,0<n≤k-1,则该zone描述的各个数据压缩分块由还原线程n进行处理;如果x%k=0,则该zone描述的各个数据压缩分块由还原线程k进行处理。其中,%表示取余操作。
假设zone编号由0开始计数。针对编号为x的zone:如果x%k=0,则该zone描述的各个数据压缩分块由还原线程1进行处理;如果x%k=1,则该zone描述的各个数据压缩分块由还原线程2进行处理;如果x%k=n,0<n<k-1,则该zone描述的各个数据压缩分块由还原线程n+1进行处理;如果x%k=k-1,则该zone描述的各个数据压缩分块由还原线程k进行处理。
在另一种可选的实施方式中,假设zone数量为x,可以将这x个平均划分为k份,第一份对应的各个zone描述的数据压缩分块由还原线程1进行处理,第二份对应的各个zone描述的数据压缩分块由还原线程2进行处理,以此类推。
这样,就可以确定出与每个还原线程对应的zone编号。其中,与某个还原线程对应的zone编号,意味着该zone描述的各个数据压缩分块需要该还原线程进行处理。
在本实施例中,可以根据zone编号对还原线程数量的取余结果,为并行的k个还原线程分别创建还原操作执行链表。其中,在每个还原操作执行链表中,各个节点中填充的数据为zone编号以及在该zone在Patch文件中的地址偏移量。其中,zone在Patch文件中的地址偏移量,可以指的是相对于文件起始位置的地址偏移量。需要指出的是,各个zone在Patch文件中的地址偏移量,可以根据zone编号以及各个zone描述的数据压缩分块的字节总长度进行计算。例如,zone2相对于文件起始位置的地址偏移量为zone1相对于文件起始位置的地址偏移量与zone1描述的数据压缩分块的字节总长度的累加和,zone3相对于文件起始位置的地址偏移量为zone2相对于文件起始位置的地址偏移量与zone2描述的数据压缩分块的字节总长度的累加和,以此类推。
进而,各个还原线程可以基于对应还原操作执行链表中各节点的数据,在Patch文件中读取相应的zone,并对该zone描述的数据压缩分块进行数据还原处理。
图24示出了本申请实施例提供的一种差分文件的还原方法。如图24所示,该差分文件的还原方法的流程具体包括:
S501,电子设备解析Patch文件,获取分块尺寸zonesize以及控制块总数量x。
示例性的,分块尺寸zonesize以及控制块(zone)总数量x可以在Patch文件的header中携带。
电子设备获取到Patch文件之后,对Patch文件的header进行解析,根据header中记录的魔数获知文件类型之后,即可在header读取zonesize以及控制块总数量x。
S502,电子设备根据用于差分还原的RAM空间尺寸M以及zonesize,判断电子设备是否支持差分文件的还原处理,若是,则执行S503,若是,则进行报错处理。
电子设备根据zonesize可以计算得到对Patch文件进行还原操作所需的最小RAM空间,如果电子设备用于差分还原的RAM空间尺寸M小于还原操作所需的最小RAM空间,则电子设备可以判断出其无法支持差分文件的还原处理,进行报错处理。
如果电子设备用于差分还原的RAM空间尺寸M大于等于还原操作所需的最小RAM空间,则电子设备可以判断出其能够支持差分文件的还原处理。
如前文所述,对Patch文件进行还原操作所需的最小RAM空间为(zonesize+N2)*2+N1。其中,N1为运行数据压缩算法所需的RAM内存空间的尺寸大小,N2为安全缓冲区所占的RAM内存空间的大小。示例性的,N2=2KB,N1=16KB。
如果电子设备用于差分还原的RAM空间尺寸M大于等于((zonesize+N2)*2+N1,则电子设备可以判断出其能够支持差分文件的还原处理。
需要指出的是,此处提及的电子设备用于差分还原的RAM空间是连续的,例如通过静态数组实现。如果电子设备用于差分还原的RAM空间是动态分配的非连续的,则需要电子设备申请到两块尺寸为(zonesize+N2)的RAM内存区域,以及一块尺寸为N1的RAM内存区域,以使电子设备能够差分文件的还原处理。
S503,电子设备根据M以及zonesize,确定还原线程的并行数量k。
当电子设备用于差分还原的RAM空间尺寸M较大时,电子设备可以通过几个并行的还原线程完成对Patch文件的还原操作,以提升Patch文件的还原效率。
当电子设备用于差分还原的RAM空间M为连续RAM空间(如静态数组)时,则还原线程的并行数量k=[(M-N1)/(zonesize+N2)]。其中,[]表示取整操作。如果并行数量k≥2,则电子设备可以通过k个还原线程并行地对Patch文件中的数据压缩分块进行还原处理。
当电子设备用于差分还原的RAM空间为非连续RAM空间时,则电子设备可以动态申请RAM空间,如果能够申请到2k(k≥2)块尺寸为(zonesize+N2)的RAM内存区域,以及一块尺寸为N1的RAM内存区域,则电子设备可以通过k个还原线程并行地对Patch文件中的数据压缩分块进行还原处理。
S504,电子设备判断k是否大于等于2,若否,则执行S505,若是,则执行S506。
其中,k不大于等于2时,由于在此之前已判断出电子设备支持差分文件的还原处理,则k=1,电子设备通过单线程执行差分文件的还原处理。
S505,电子设备通过单线程执行差分文件的还原处理。
当电子设备通过单线程执行差分文件的还原处理时,Patch文件中各个zone描述的数据压缩分块依次被串行处理,可以参照前文的相关描述,在此不再赘述。
S506,电子设备创建k个还原线程。
电子设备根据确定的并行数量k,创建相应数量的还原线程,以实现Patch文件中不同zone描述的数据压缩分块的并行还原处理。
S507,电子设备划分与每个还原线程对应的一组RAM空间,并根据控制块总数量x创建与每个还原线程对应的还原操作链表。
示例性的,假设并行数量k=2,电子设备创建第一还原线程和第二还原线程,以用于对Patch文件中不同zone描述的数据压缩分块进行并行还原处理。
针对每个还原线程,电子设备需要为其划分与其对应的一组RAM空间,包括第一RAM空间区域301、第二RAM空间区域302、第三RAM空间区域303、第四RAM空间区域304,可以参照图21a或图21b。
针对每个还原线程,电子设备还需要为其创建与其对应的还原操作链表。如前文所述,可以根据zone编号与还原线程数量k的取余结果,确定与每个还原线程对应的zone编号。进而,在电子设备确定各个zone在Patch文件中的地址偏移量之后,即可创建与每个还原线程对应的还原操作链表。其中,在还原操作链表中,各个节点的数据(data)部分中填充的是zone编号以及该编号对应的zone在Patch文件中的地址偏移量。
示例性的,以第一还原线程为例,与其对应的zone编号为zone1、zone3、zone5等,则在与其对应的还原操作列表中,第一节点的数据(data)部分中填充的是zone1以及zone1在Patch文件中的地址偏移量1,链接(next)部分填充的是第二节点的指针;第二节点的数据(data)部分中填充的是zone3以及zone3在Patch文件中的地址偏移量3,链接(next)部分填充的是第三节点的指针;第三节点的数据(data)部分中填充的是zone5以及zone5在Patch文件中的地址偏移量5,链接(next)部分填充的是第四节点的指针,以此类推。
S508,电子设备的每个还原线程根据对应的还原操作链表中各节点中的数据,在Patch文件中读取相应的数据压缩分块,并利用对应的一组RAM空间对这些数据压缩分块进行还原操作。
针对还原操作链表中一个节点,还原线程依次对与该节点对应的zone描述的各个数据压缩分块(包括Diff数据压缩分块和/或Extra数据压缩分块)进行还原处理。其中,还原线程利用对应的一组RAM空间,对每个Diff数据压缩分块或Extra数据压缩分块进行还原处理的过程,可以参照前文,在此不再赘述。
示例性的,第一还原线程利用第一组RAM空间依次处理zone1、zone3、zone5等描述的各个数据压缩分块,第二还原线程利用第二组RAM空间依次处理zone2、zone4、zone6等描述的各个数据压缩分块。
例如,zone1描述3个Diff数据压缩分块和4个Extra数据压缩分块,则第一还原线程利用第一组RAM空间依次处理完这3个Diff数据压缩分块和4个Extra数据压缩分块之后,再继续处理zone3描述的各个数据压缩分块,以此类推。
需要指出的是,第一还原线程在对zone1描述的数据压缩分块进行还原处理时,将还原后的新数据写入新文件中的首地址为zone1中第二指针偏移量对应的位置。
再例如,zone2描述5个Diff数据压缩分块和2个Extra数据压缩分块,则第二还原线程利用第二组RAM空间依次处理完这5个Diff数据压缩分块和2个Extra数据压缩分块之后,再继续处理zone4描述的各个数据压缩分块,以此类推。
需要指出的是,第二还原线程在对zone2描述的数据压缩分块进行还原处理时,将还原后的新数据写入新文件中的首地址为zone2中第二指针偏移量对应的位置。
也就是说,每个还原线程在对一个zone描述的数据压缩分块进行还原处理时,将还原后的新数据写入新文件中的首地址为该zone中第二指针偏移量对应的位置。
S509,当各个还原线程均根据还原操作链表完成相应的数据压缩分块还原操作之后,电子设备对得到的目标文件进行校验。
由于各个zone描述的数据压缩分块的数量不尽相同,则各个还原线程执行数据还原操作的时长也不仅相同。待各个还原线程均根据还原操作链表完成相应的数据压缩分块还原操作之后,Patch文件中所有的数据压缩分块均被还原完成。
此时,电子设备可以基于Patch文件中校验字段的值判断还原得到目标文件是否正确。例如,假设基于Patch文件进行数据还原得到的目标文件的哈希值,与校验字段的值相同,终端则可以确定还原得到的目标文件无误,否则可以确定还原得到的目标文件有误。
如前文所述,任意一个还原线程在对Diff数据分块进行还原处理时大致可以划分为如下几个阶段:在Patch文件中读取Diff数据压缩分块的阶段(简称第一阶段)、对Diff数据压缩分块进行解压的阶段(简称第二阶段)、在旧文件中读取与Diff数据压缩分块对应数据的阶段(简称第四阶段)、根据旧数据和Diff数据分块合成新数据的阶段(简称第四阶段),以及在新文件中写入数据的阶段(简称第五阶段)。
其中,任意一个还原线程均是利用与其对应的一组RAM空间(即第一RAM内存区域、第二RAM内存区域、第三RAM内存区域以及第四RAM内存区域),来完成针对各个Diff数据压缩分块的还原操作。
下面结合图16和图24a,对上述几个阶段中,第一RAM内存区域和第三RAM内存区域的可用状态进行分析。其中,在第一RAM内存区域和第三RAM内存区域的可用状态的初始值为可用。假设,state=0时,表明RAM内存区域可用,state=1时,表明RAM内存区域不可用。
在第一阶段,还原线程将在Patch文件中读取的Diff数据压缩分块写入第一RAM内存区域,第一RAM内存区域的state由0变成1。
在第二阶段,还原线程对第一RAM内存区域中的Diff数据压缩分块进行解压缩操作,并将解压后得到的Diff数据分块写入第三RAM内存区域,第三RAM内存区域的state由0变成1,同时将第一RAM内存区域的state由1变成0。
在第三阶段,还原线程在静态分区(即旧文件)中读取与第三RAM内存区域中Diff数据压缩分块对应的旧数据(或称源数据),写入第一RAM内存区域(覆盖Diff数据压缩分块),第一RAM内存区域的state由0变成1。
在第四阶段,还原线程读取第一RAM内存区域中的旧数据与第三RAM内存区域中的Diff数据合成新目标数据,并将合成的目标数据写入第三RAM内存区域中。此阶段中,还原线程会将第三RAM内存区域的state由1变成0,并申请持有与第三RAM内存区域对应的对象锁,以实现对第三RAM内存区域中的数据保护。待还原线程执行完数据合成操作之后,释放与第三RAM内存区域对应的对象锁,并将第一RAM内存区域的state由1变成0,将第三RAM内存区域的state由0变成1。
在第五阶段,还原线程将第三RAM内存区域中合成的新数据写入新文件中,即落盘到目标静态分区,并在执行完成后将第三RAM内存区域的state由1变成0。
通过分析上述流程可知,还原线程在第五阶段将第三RAM内存区域中合成的新数据写入新文件中。待第五阶段结束后,还原线程继续处理下一个Diff数据压缩分块或Extra数据压缩分块,处理流程均涉及上述第一阶段。然而,在第五阶段中,第一RAM内存区域的可用状态为可用(state=0),待第五阶段结束后才会继续被还原线程使用。这样,在第五阶段中,第一RAM内存区域存在等待时延,在一定程序上影响了还原线程的处理效率。
类似的,如前文所述,任意一个还原线程在对Extra数据分块进行还原处理时大致可以划分为如下几个阶段:在Patch文件中读取Extra数据压缩分块的阶段(简称第一阶段)、对Extra数据压缩分块进行解压的阶段(简称第二阶段)、以及在新文件中写入数据的阶段(简称第五阶段)。
其中,任意一个还原线程均是利用与其对应的一组RAM空间(即第一RAM内存区域、第二RAM内存区域、第三RAM内存区域以及第四RAM内存区域),来完成针对各个Extra数据压缩分块的还原操作。
下面结合图17和图24b,对上述几个阶段中,第一RAM内存区域和第三RAM内存区域的可用状态进行分析。其中,在第一RAM内存区域和第三RAM内存区域的可用状态的初始值为可用。假设,state=0时,表明RAM内存区域可用,state=1时,表明RAM内存区域不可用。
在第一阶段,还原线程将在Patch文件中读取的Extra数据压缩分块写入第一RAM内存区域,第一RAM内存区域的state由0变成1。
在第二阶段,还原线程对第一RAM内存区域中的Extra数据压缩分块进行解压缩操作,并将解压后得到的Extra数据分块写入第三RAM内存区域,第三RAM内存区域的state由0变成1,同时将第一RAM内存区域的state由1变成0。
在第五阶段,还原线程将第三RAM内存区域中合成的新数据写入新文件中,即落盘到目标静态分区,并在执行完成后将第三RAM内存区域的state由1变成0。
通过分析上述流程可知,还原线程在第五阶段将第三RAM内存区域中合成的新数据写入新文件中。待第五阶段结束后,还原线程继续处理下一个Extra数据压缩分块,处理流程也涉及上述第一阶段。然而,在第五阶段中,第一RAM内存区域的可用状态为可用(state=0),待第五阶段结束后才会继续被还原线程使用。这样,在第五阶段中,第一RAM内存区域存在等待时延,在一定程序上影响了还原线程的处理效率。
由此,还原线程连续处理两个数据压缩分块(无论是Diff数据压缩分块还是Extra数据压缩分块)时,前后两个数据压缩分块的还原处理流程均涉及第一阶段和第五阶段,且待前一个数据压缩分块的还原处理流程第五阶段结束后,后一个数据压缩分块的还原流程第一阶段才开始,使得第一RAM内存区域存在等待时延,在一定程序上影响了还原线程的处理效率。
为了解决上述问题,针对每个还原线程,在其对一个zone描述的各个数据压缩分块进行还原处理时,可以基于两个子线程来完成。
图25示出了本申请实施例提供的一种差分文件的还原方法。如图25所示,一个还原线程针对一个zone描述各个数据压缩分块进行还原处理操作的流程,具体可以包括如下步骤:
S601,还原线程解析zone数据。
S602,还原线程确定zone描述的Diff数据压缩分块的数量Diffnum,Extra数据压缩分块的数量Extranum,并将Diff-zone-offset和Extra-zone-offset设置为0。
其中,Diff-zone-offset和Extra-zone-offset为全局变量。Diff-zone-offset用于表示在当前zone描述的各个Diff数据压缩分块中,当前处理的Diff数据压缩分块的序号;Extra-zone-offset用于表示在当前zone描述的各个Extra数据压缩分块中,当前处理的Extra数据压缩分块的序号。
在本实施例中,Diff-zone-offset和Extra-zone-offset的初始值被设置为0,zone描述的Diff数据压缩分块和Extra数据压缩分块的序号由1开始计数。示例性的,Diff-zone-offset为1时,表明当前处理的Diff数据压缩分块是序号为1的Diff数据压缩分块;Extra-zone-offset为2时,表明当前处理的Extra数据压缩分块是序号为2的Extra数据压缩分块。
一般情况下,一个zone描述的Diff数据压缩分块的数量Diffnum,以及Extra数据压缩分块的数量Extranum均大于0。特殊情况下,Diffnum或Extranum为0。
S603,还原线程创建并启动第一子线程和第二子线程,通过并行的第一子线程和第二子线程对zone描述的各个数据压缩分块进行还原处理。
其中,第一子线程用于对Diff数据压缩分块或Extra数据压缩分块进行还原处理,第二子线程也用于对Diff数据压缩分块或Extra数据压缩分块进行还原处理,第一子线程和第二子线程是并行的。
需要指出的是,第一子线程和第二子线程的启动顺序可以是指定的,也可以是随机的,本实施例不做限定。
如前文所示,当第一子线程或第二子线程对Diff数据压缩分块进行还原处理时,处理流程可以划分为第一阶段、第二阶段、第三阶段、第四阶段以及第五阶段。当第一子线程或第二子线程对Extra数据压缩分块进行还原处理时,处理流程可以划分为第一阶段、第二阶段以及第五阶段。
其中,当子线程还原处理操作的所处的阶段不同,子线程的处理状态不同。示例性的,当子线程还原处理操作处于第一阶段时,子线程的处理状态为读取差分数据;当子线程还原处理操作处于第二阶段时,子线程的处理状态为解压差分数据;当子线程还原处理操作处于第三阶段时,子线程的处理状态为读取源数据;当子线程还原处理操作处于第四阶段时,子线程的处理状态为合成目标数据;当子线程还原处理操作处于第五阶段时,子线程的处理状态为写入目标数据,即向目标文件(或新文件)中写入目标数据(或新数据)。
图26a示出了第一子线程的处理流程。如图26a所述,第一子线程对数据压缩分块进行还原处理的步骤包括:
S701,第一子线程启动。
S702,第一子线程判断Diff-zone-offset是否为0,或者Extra-zone-offset是否为0,或者第二子线程的处理状态是否为写入目标数据,若是,则执行S703,若否,则执行S702。
其中,当Diff-zone-offset为0时,表明该zone描述的各个Diff数据压缩分块还未开始被进行还原处理;当Extra-zone-offset为0时,表明该zone描述的各个Extra数据压缩分块还未开始被进行还原处理。
其中,当第二子线程的处理状态为写入目标数据时,表明第二子线程对数据压缩分块的处理流程处于第五阶段。此时,为了避免第一RAM空间区域的等待延时,此时第一子线程即可对下一个数据压缩分块进行还原处理,实现与第二子线程的并行处理。
如果针对上述判断条件的判断结果均为否,则第一子线程等待,继续执行S702所示的判断流程。
S703,第一子线程判断Diff-zone-offset是否小于Diffnum,若是,则执行S704,若否,则执行S706。
由于Diff-zone-offset用于表示在当前zone描述的各个Diff数据压缩分块中,当前处理的Diff数据压缩分块的序号,则当Diff-zone-offset小于Diffnum时,表明当前zone描述的各个Diff数据压缩分块中,还存在未被处理的Diff数据压缩分块。
S704,第一子线程将Diff-zone-offset递增。
在Diff-zone-offset是否小于Diffnum时,将Diff-zone-offset进行加1处理,以确定第一子线程要处理的Diff数据压缩分块。
S705,第一子线程对与Diff-zone-offset对应的Diff数据压缩分块进行还原处理,执行S702。
此时,第一子线程基于与还原线程所对应的一组RAM空间对与Diff-zone-offset对应的Diff数据压缩分块进行还原处理,详细步骤可以参照前文,在此不再赘述。
待第一子线程对与Diff-zone-offset对应的Diff数据压缩分块进行还原处理完成之后,返回执行S702,以判断是否符合第一子线程对下个数据压缩分块进行还原处理的条件。
S706,第一子线程判断Extra-zone-offset是否小于Extranum,若是,则执行S707,若否,则执行S709。
由于Extra-zone-offset用于表示在当前zone描述的各个Extra数据压缩分块中,当前处理的Extra数据压缩分块的序号,则当Extra-zone-offset小于Extranum时,表明当前zone描述的各个Extra数据压缩分块中,还存在未被处理的Extra数据压缩分块。
S707,第一子线程将Extra-zone-offset递增。
在Extra-zone-offset是否小于Extranum时,将Extra-zone-offset进行加1处理,以确定第一子线程要处理的Extra数据压缩分块。
S708,第一子线程对与Extra-zone-offset对应的Extra数据压缩分块进行还原处理,执行S702。
此时,第一子线程基于与还原线程所对应的一组RAM空间对与Extra-zone-offset对应的Extra数据压缩分块进行还原处理,详细步骤可以参照前文,在此不再赘述。
待第一子线程对与Extra-zone-offset对应的Extra数据压缩分块进行还原处理完成之后,返回执行S702,以判断是否符合第一子线程对下个数据压缩分块进行还原处理的条件。
S709,第一子线程结束。
当Diff-zone-offset不小于Diffnum时,表明当前zone描述的各个Diff数据压缩分块中,不存在未被处理的Diff数据压缩分块。当Extra-zone-offset不小于Extranum时,表明当前zone描述的各个Extra数据压缩分块中,不存在未被处理的Extra数据压缩分块。此时,第一子线程可以结束。
图26b示出了第二子线程的处理流程。与第一子线程类似,如图26b所述,第二子线程对数据压缩分块进行还原处理的步骤包括:
S801,第二子线程启动。
S802,第二子线程判断Diff-zone-offset是否为0,或者Extra-zone-offset是否为0,或者第一子线程的处理状态是否为写入目标数据,若是,则执行S803,若否,则执行S802。
其中,当Diff-zone-offset为0时,表明该zone描述的各个Diff数据压缩分块还未开始被进行还原处理;当Extra-zone-offset为0时,表明该zone描述的各个Extra数据压缩分块还未开始被进行还原处理。
其中,当第一子线程的处理状态为写入目标数据时,表明第一子线程对数据压缩分块的处理流程处于第五阶段。此时,为了避免第一RAM空间区域的等待延时,此时第二子线程即可对下一个数据压缩分块进行还原处理,实现与第一子线程的并行处理。
如果针对上述判断条件的判断结果均为否,则第二子线程等待,继续执行S802所示的判断流程。
S803,第二子线程判断Diff-zone-offset是否小于Diffnum,若是,则执行S804,若否,则执行S806。
由于Diff-zone-offset用于表示在当前zone描述的各个Diff数据压缩分块中,当前处理的Diff数据压缩分块的序号,则当Diff-zone-offset小于Diffnum时,表明当前zone描述的各个Diff数据压缩分块中,还存在未被处理的Diff数据压缩分块。
S804,第二子线程将Diff-zone-offset递增。
在Diff-zone-offset是否小于Diffnum时,将Diff-zone-offset进行加1处理,以确定第二子线程要处理的Diff数据压缩分块。
S805,第二子线程对与Diff-zone-offset对应的Diff数据压缩分块进行还原处理,执行S802。
此时,第二子线程基于与还原线程所对应的一组RAM空间对与Diff-zone-offset对应的Diff数据压缩分块进行还原处理,详细步骤可以参照前文,在此不再赘述。
待第二子线程对与Diff-zone-offset对应的Diff数据压缩分块进行还原处理完成之后,返回执行S802,以判断是否符合第二子线程对下个数据压缩分块进行还原处理的条件。
S806,第二子线程判断Extra-zone-offset是否小于Extranum,若是,则执行S807,若否,则执行S809。
由于Extra-zone-offset用于表示在当前zone描述的各个Extra数据压缩分块中,当前处理的Extra数据压缩分块的序号,则当Extra-zone-offset小于Extranum时,表明当前zone描述的各个Extra数据压缩分块中,还存在未被处理的Extra数据压缩分块。
S807,第二子线程将Extra-zone-offset递增。
在Extra-zone-offset是否小于Extranum时,将Extra-zone-offset进行加1处理,以确定第一子线程要处理的Extra数据压缩分块。
S808,第二子线程对与Extra-zone-offset对应的Extra数据压缩分块进行还原处理,执行S802。
此时,第二子线程基于与还原线程所对应的一组RAM空间对与Extra-zone-offset对应的Extra数据压缩分块进行还原处理,详细步骤可以参照前文,在此不再赘述。
待第二子线程对与Extra-zone-offset对应的Extra数据压缩分块进行还原处理完成之后,返回执行S802,以判断是否符合第二子线程对下个数据压缩分块进行还原处理的条件。
S809,第二子线程结束。
当Diff-zone-offset不小于Diffnum时,表明当前zone描述的各个Diff数据压缩分块中,不存在未被处理的Diff数据压缩分块。当Extra-zone-offset不小于Extranum时,表明当前zone描述的各个Extra数据压缩分块中,不存在未被处理的Extra数据压缩分块。此时,第二子线程可以结束。
S604,还原线程判断zone描述的各个数据压缩分块是否均处理完成,以及第一子线程和第二子线程是否均结束,若是,则执行S605,若否,则执行S604。
还原线程判断zone描述的各个数据压缩分块是否均处理完成,以及第一子线程和第二子线程是否均结束,若否,则等待,并继续进行判断,若是,则还原线程对zone描述的数据压缩分块的还原处理操作结束。
S605,还原线程对zone描述的数据压缩分块的还原处理操作结束。
在还原线程对一个zone描述的数据压缩分块的还原处理操作结束之后,可以依据与其对应的还原操作执行链表,继续对下一个zone描述的数据压缩分块进行还原处理,处理流程依旧可以参照S601-S605,在此不再赘述,直至完成还原操作执行链表中记录的各个zone描述的数据压缩分块,结束本还原线程。
这样,在一个还原线程通过两个子线程实现对一个zone描述的各个数据压缩分块进行还原处理时,也能够提升对数据压缩分块的还原效率。
如图27a所示,当通过还原线程这个单线程实现对一个zone描述的各个数据压缩分块进行还原处理时,待前一个数据压缩分块的还原处理流程第五阶段结束后,后一个数据压缩分块的还原流程第一阶段才开始,使得第一RAM内存区域存在等待时延,在一定程度上降低了还原线程的处理效率。
然而,如图27b所示,当通过两个子线程实现对一个zone描述的各个数据压缩分块进行还原处理时,在第一子线程还原处理Diff数据压缩分块1的第五阶段,第二子线程即可开始还原处理Diff数据压缩分块2的第一阶段。类似的,在第二子线程还原处理Diff数据压缩分块2的第五阶段,第一子线程即可开始还原处理Extra数据压缩分块1的第二阶段;在第一子线程还原处理Extra数据压缩分块1的第五阶段,第二子线程即可开始还原处理Extra数据压缩分块2的第一阶段。这样,无需待前一个数据压缩分块的还原处理流程第五阶段结束后,后一个数据压缩分块的还原流程第一阶段才开始,使得第一RAM内存区域不再存在等待时延,减少了多个数据压缩分块的还原时长(对比图27a和图27b清晰可见),提升了还原线程的处理效率。
如图28所示为电子设备100的结构示意图。可选地,电子设备100可以称为终端,也可以称为终端设备,例如可以为智能手机等,终端可以为可穿戴式电子设备,例如可以是智能手表,本申请不做限定。需要说明的是,电子设备100的结构示意图可以适用于图1中的智能手表100或手机200。应该理解的是,图28所示电子设备100仅是电子设备的一个范例,并且电子设备100可以具有比图中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图28中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
电子设备100可以包括:处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中传感器模块180可以包括压力传感器,陀螺仪传感器,加速度传感器,温度传感器,PPG(Photo Plethysmo Graphy,光电容积脉搏波)传感器,运动传感器,气压传感器,磁传感器,距离传感器,接近光传感器,指纹传感器,触摸传感器,环境光传感器,骨传导传感器等。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。处理器110中还可以设置存储器,用于存储指令和数据。
充电管理模块140用于从充电器接收充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。
电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。移动通信模块150可以提供应用在电子设备100上的包括2G/3G/4G/5G等无线通信的解决方案。无线通信模块160可以提供应用在电子设备100上的包括无线局域网(wireless local area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(globalnavigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。
在一些实施例中,电子设备100的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得电子设备100可以通过无线通信技术与网络以及其他设备通信。
电子设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏194用于显示图像,视频等。显示屏194包括显示面板。在一些实施例中,电子设备100可以包括1个或N个显示屏194,N为大于1的正整数。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,从而执行电子设备100的各种功能应用以及数据处理,使得电子设备100实现本申请实施例中的固件文件还原方法。
在本申请实施例中,内部存储器121可以用于存储实现本申请实施例中差分文件生成方法的程序、差分文件还原方法的程序、BSDiff算法的程序等。
电子设备100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块170还可以用于对音频信号编码和解码。在一些实施例中,音频模块170可以设置于处理器110中,或将音频模块170的部分功能模块设置于处理器110中。
陀螺仪传感器可以用于检测电子设备100的运动姿态。在一些实施例中,可以通过陀螺仪传感器确定电子设备100围绕三个轴(即,x,y和z轴)的角速度。在一些实施例中,陀螺仪传感器还可以用于识别电子设备的姿态,以实现对佩戴或者手持电子设备100的用户进行行为状态的识别。
加速度传感器可以用于检测电子设备100在各个方向上(一般为三轴)加速度的大小。在一些实施例中,当电子设备100静止时,可以通过加速度传感器检测出重力的大小及方向。在一些实施例中,加速度传感器还可以用于识别电子设备的姿态,以实现对佩戴或者手持电子设备100的用户进行行为状态的识别。
温度传感器可以用于检测电子设备100的温度。在一些实施例中,可以通过温度传感器检测电子设备100佩戴用户的体温。
PPG(Photo Plethysmo Graphy,光电容积脉搏波)传感器可以用于检测电子设备100佩戴者的生理参数信息。PPG传感器的原理是通过光学检测出组织微血管床中血容量在心脏收缩舒张作用下的波动性变化。例如,心脏收缩时,组织的血容量增多、光吸收量增加,则光检测器检测到的光强度较小;心脏舒张时,组织的血容量减少、光吸收量减少,则光检测器检测到的光强度较大。由于PPG传感器光强度的变化与组织的血液灌注的微小变化相关,所以可以用来提供电子设备100佩戴者心血管系统的信息,例如血压、血氧、脉搏率(心率)和呼吸率等生理参数信息。
压力传感器用于感受压力信号,可以将压力信号转换成电信号。在一些实施例中,压力传感器可以设置于显示屏194。电子设备100也可以根据压力传感器的检测信号计算触摸的位置。
触摸传感器,也称“触控面板”。触摸传感器可以设置于显示屏194,由触摸传感器与显示屏194组成触摸屏,也称“触控屏”。触摸传感器用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。
按键190包括开机键(或称电源键),音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备100可以接收按键输入,产生与电子设备100的用户设置以及功能控制有关的键信号输入。
马达191可以产生振动提示。马达191可以用于来电振动提示,也可以用于触摸振动反馈。
指示器192可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息。
电子设备100的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本申请实施例以分层架构的操作系统为例,示例性说明电子设备100的软件结构。
图29是本申请实施例的电子设备100的软件结构框图。
电子设备100的分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,以电子设备100为智能手表为例,如图29所示,可以将操作系统分为六层,从上至下分别为UI(User Interface,用户界面)应用层,系统服务层,算法层,硬件抽象层,内核层,以及驱动层。
UI应用层可以包括一系列应用程序包,例如可以是表盘、运动记录、通话、锻炼等。
系统服务层可以包括一系列系统服务。系统服务层可以包括心率服务,心率服务可以提供智能手表佩戴者的生理参数信息,例如血压、血氧、脉搏率、呼吸率和体温等,还可以检测智能手表佩戴者的生理参数变化信息。系统服务层还可以包括计步服务、卡路里服务、心脏健康服务。
算法层可以包括一系列算法模型。如图29所示,算法层可以包括差分还原算法模型。其中,差分还原算法模型可以用于本实施例提供的差分文件还原方法。
硬件抽象层(hardware abstraction layer,HAL)为位于操作系统内核与硬件电路之间的接口层。HAL层包括但不限于音频HAL。其中,音频HAL用于对音频流进行处理,例如,对音频流进行降噪、定向增强等处理。
内核层和驱动层是硬件和软件之间的层。如图29所示,内核层至少包括操作系统内核,驱动层至少包括蓝牙驱动,WiFi驱动等。
可以理解的是,图29示出的软件结构中的层以及各层中包含的部件,并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的层,以及每个层中可以包括更多或更少的部件,本申请不做限定。
可以理解的是,电子设备100为了实现本申请实施例中的差分文件的还原方法,其包含了执行各个功能相应的硬件和/或软件模块。结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以结合实施例对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
一个示例中,图30示出了本申请实施例的一种装置800的示意性框图,装置800可包括:处理器801和收发器/收发管脚802,可选地,还包括存储器803。
装置800的各个组件通过总线804耦合在一起,其中总线804除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图中将各种总线都称为总线804。
可选地,存储器803可以用于存储上述差分文件生成方法实施例中服务器的指令。该处理器801可用于执行存储器803中的指令,并控制接收管脚接收信号,以及控制发送管脚发送信号。
可选地,存储器803可以用于存储上述差分文件还原方法实施例中智能终端的指令。该处理器801可用于执行存储器803中的指令,并控制接收管脚接收信号,以及控制发送管脚发送信号。
装置800可以是上述差分文件生成方法实施例中服务器,例如OTA服务器,或者是上述差分文件还原方法实施例中智能终端,例如智能手机、智能手表等。
本实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行上述相关方法步骤实现上述实施例中的差分文件的生成方法,或者使得电子设备执行上述相关方法步骤实现上述实施例中的差分文件的还原方法。
本实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的差分文件的生成方法,或者实现上述实施例中的差分文件的还原方法。
另外,本申请的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述方法实施例中的差分文件的生成方法或者差分文件的还原方法。
其中,本实施例提供的电子设备(如服务器或终端等)、计算机存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
通过以上实施方式的描述,所属领域的技术人员可以了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (12)
1.一种差分文件的还原方法,其特征在于,应用于电子设备中,包括:
获取差分文件;其中,在所述差分文件中包括至少一组数据压缩分块,所述一组数据压缩分块包括差异Diff数据压缩分块和/或新增Extra数据压缩分块,所述数据压缩分块被压缩前是基于预设的分块尺寸进行划分的;
根据所述分块尺寸和所述电子设备用于差分文件还原的RAM空间尺寸,确定还原线程的并行数量k,并为每个所述还原线程划分一组RAM空间;
采用所述k个所述还原线程并行地对所述差分文件进行还原处理,其中,每个所述还原线程使用与其对应的一组RAM空间对至少一组数据压缩分块进行还原处理,并将还原处理后得到的数据写入目标文件中。
2.根据权利要求1所述的方法,其特征在于,所述一组RAM空间,包括:第一RAM内存区域、第二RAM内存区域、第三RAM内存区域和第四RAM内存区域;其中,
所述第一RAM内存区域和所述第二RAM内存区域的尺寸为所述分块尺寸;
所述第二RAM内存区域和所述第四RAM内存区域分别为所述第一RAM内存区域和所述第三RAM内存区域的安全缓冲区域;
各个所述还原线程共用第五RAM内存区域,所述第五RAM内存区域用于运行数据压缩算法。
3.根据权利要求2所述的方法,其特征在于,根据所述分块尺寸和所述电子设备用于差分文件还原的RAM空间尺寸,确定还原线程的并行数量k,包括:
k=[(M-N1)/(zonesize+N2)];其中,M为所述电子设备用于差分文件还原的RAM空间尺寸,N1为所述第五RAM内存区域的尺寸,zonesize为所述分块尺寸,N2为安全缓冲区域的尺寸,[]为取整运算。
4.根据权利要求2所述的方法,其特征在于,与所述Diff数据压缩分块对应的Diff数据是基于第一运算得到的;
每个所述还原线程对一组数据压缩分块进行还原处理,包括:
所述还原线程按照解析顺序依次对一组数据压缩分块中的Diff数据压缩分块或Extra数据压缩分块进行数据还原处理;
每解析得到一个Diff数据压缩分块时,将所述Diff数据压缩分块对应的Diff数据与已有数据进行第二运算,得到第一目标数据,写入目标文件中;其中,所述已有数据为在与所述差分文件对应的已有文件中,读取到的与所述Diff数据压缩分块匹配的数据,所述第二运算为所述第一运算的逆运算;
每解析得到一个Extra数据压缩分块时,对所述Extra数据压缩分块进行数据解压,得到第二目标数据,写入所述目标文件中。
5.根据权利要求4所述的方法,其特征在于,将所述Diff数据压缩分块对应的Diff数据与已有数据进行第二运算,得到第一目标数据,写入目标文件中,包括:
将所述Diff数据压缩分块暂存在第一RAM内存区域中;
对所述Diff数据压缩分块进行数据解压处理,将得到的Diff数据分块暂存在第三RAM内存区域中;
在所述已有文件中读取与所述Diff数据分块对应的已有数据,并暂存在所述第一RAM内存区域中;
将所述第一RAM内存区域中的数据和所述第三RAM内存区域中的数据进行第二操作,所得的第一目标数据暂存在所述第三RAM内存区域中;
将在所述第三RAM内存区域中暂存的第一目标数据,写入所述目标文件中。
6.根据权利要求4所述的方法,其特征在于,对所述Extra数据压缩分块进行数据解压,得到第二目标数据,写入所述目标文件中,包括:
将所述Extra数据压缩分块暂存在第一RAM内存区域中;
对所述Extra数据压缩分块进行数据解压处理,将得到的第二目标数据暂存在第三RAM内存区域中;
将在所述第三RAM内存区域中暂存的第二目标数据,写入所述目标文件中。
7.根据权利要求1所述的方法,其特征在于,每个所述还原线程使用与其对应的一组RAM空间对至少一组数据压缩分块进行还原处理,包括:
根据所述差分文件中包括的数据压缩分块组数,以及各组数据压缩分块的序号为每个所述还原线程分别创建链表,以使所述还原线程根据对应的链表完成对至少一组数据压缩分块进行还原处理;
其中,在所述链表中,节点的数据部分填充一组数据压缩分块的序号,以及所述一组数据压缩分块对应的还原数据在目标文件中写入的首地址。
8.根据权利要求6所述的方法,其特征在于,所述差分文件的数据结构包括头部、控制块、以及通过所述控制块描述的一组数据压缩分块;
所述头部中填充所述差分文件的魔数与所述分块尺寸;
所述控制块中填充第一指针偏移量和第二指针偏移量;其中,所述第一指针偏移量用于在已有文件中确定与所述一组数据压缩分块对应的数据读取首地址;所述第二指针偏移量用于在目标文件中确定与所述一组数据压缩分块对应的数据写入首地址。
9.根据权利要求6所述的方法,其特征在于,根据数据压缩分块的序号对并行数量的取余结果,分别确定待每个还原线程处理的各组数据压缩分块。
10.根据权利要求5或6所述的方法,其特征在于,每个所述还原线程使用与其对应的一组RAM空间对至少一组数据压缩分块进行还原处理,包括:
每个所述还原线程创建第一子线程和第二子线程;
通过所述第一子线程和所述第二子线程使用与所述还原线程对应的一组RAM空间,依次对一组数据压缩分块中包括的Diff数据压缩分块或Extra数据压缩分块进行还原处理;
其中,在所述第二子线程执行到目标阶段时,所述第一子线程继续在所述一组数据压缩分块数据压缩分块进行还原处理;
在第一子线程执行到所述目标阶段时,所述第二子线程继续在所述一组数据压缩分块数据压缩分块进行还原处理;
所述目标阶段为将在所述第三RAM内存区域中暂存的数据,写入所述目标文件中。
11.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器;
以及一个或多个计算机程序,其中所述一个或多个计算机程序存储在所述存储器上,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行如权利要求1-10中任一项所述的差分文件的还原方法。
12.一种计算机可读存储介质,包括计算机程序,其特征在于,当所述计算机程序在电子设备上运行时,使得所述电子设备执行如权利要求1-10中任一项所述的差分文件的还原方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211101979.2A CN117707588A (zh) | 2022-09-09 | 2022-09-09 | 差分文件的还原方法及电子设备 |
PCT/CN2023/113549 WO2024051465A1 (zh) | 2022-09-09 | 2023-08-17 | 差分文件的还原方法及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211101979.2A CN117707588A (zh) | 2022-09-09 | 2022-09-09 | 差分文件的还原方法及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117707588A true CN117707588A (zh) | 2024-03-15 |
Family
ID=90159364
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211101979.2A Pending CN117707588A (zh) | 2022-09-09 | 2022-09-09 | 差分文件的还原方法及电子设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN117707588A (zh) |
WO (1) | WO2024051465A1 (zh) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8078653B1 (en) * | 2008-10-07 | 2011-12-13 | Netapp, Inc. | Process for fast file system crawling to support incremental file system differencing |
WO2017057111A1 (ja) * | 2015-09-29 | 2017-04-06 | 日立オートモティブシステムズ株式会社 | 車載制御装置、プログラム更新システム、及び、プログラム更新ソフトウェア |
US11334605B2 (en) * | 2015-06-04 | 2022-05-17 | Here Global B.V. | Incremental update of compressed navigational databases |
CN107016053B (zh) * | 2017-03-02 | 2020-05-22 | 中国科学院信息工程研究所 | 一种并行的数据差分方法 |
CN113835870A (zh) * | 2020-06-23 | 2021-12-24 | 华为技术有限公司 | 数据处理方法及系统 |
CN114327574A (zh) * | 2020-09-28 | 2022-04-12 | 深圳Tcl新技术有限公司 | 一种差分升级方法、电子设备及存储介质 |
-
2022
- 2022-09-09 CN CN202211101979.2A patent/CN117707588A/zh active Pending
-
2023
- 2023-08-17 WO PCT/CN2023/113549 patent/WO2024051465A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2024051465A9 (zh) | 2024-05-02 |
WO2024051465A1 (zh) | 2024-03-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2020211712A1 (zh) | 补丁方法、相关装置及系统 | |
KR20170097414A (ko) | 전자 장치 및 그의 동작 방법 | |
JP2008065834A (ja) | フュージョンメモリ装置及び方法 | |
CN110515646B (zh) | 一种差分升级方法及相关设备 | |
CN110633090A (zh) | 补丁方法、相关装置及系统 | |
CN116028095B (zh) | 差分文件的生成方法、还原方法及电子设备 | |
TWI667914B (zh) | 一種影像資料的編碼、解碼方法及裝置 | |
CN112068903A (zh) | 应用程序的加载方法、应用程序的加载装置、介质与设备 | |
WO2021104117A1 (zh) | 一种构建应用程序资源包的方法、构建装置及终端设备 | |
CN111443957A (zh) | 针对应用卡顿的处理方法、装置和电子设备 | |
CN111125602B (zh) | 页面构建方法、装置、设备和存储介质 | |
CN113538208A (zh) | 图片加载方法及相关装置 | |
CN113641634B (zh) | 一种日志流量控制的方法以及电子设备 | |
CN117707588A (zh) | 差分文件的还原方法及电子设备 | |
CN114780120B (zh) | 升级方法、设备及存储介质 | |
EP2930616B1 (en) | Device and method for generating application package | |
WO2023273766A1 (zh) | 一种编译优化方法和装置 | |
CN103533672B (zh) | 一种无线卡拉ok系统及其内部数据交互方法 | |
CN114253737A (zh) | 电子设备及其内存回收方法、介质 | |
CN113721836A (zh) | 一种数据去重方法及装置 | |
KR20180127085A (ko) | 데이터를 압축하는 전자 장치 및 그 동작 방법 | |
CN111866047B (zh) | 数据解码方法、装置、计算机设备及存储介质 | |
WO2024109484A1 (zh) | 应用迁移方法及电子设备 | |
CN111327816A (zh) | 图像处理方法及其装置、电子设备以及计算机存储介质 | |
CN113508536A (zh) | 就地安全解压缩 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |