CN1446404A - 操作码的双模数据压缩 - Google Patents
操作码的双模数据压缩 Download PDFInfo
- Publication number
- CN1446404A CN1446404A CN01814126A CN01814126A CN1446404A CN 1446404 A CN1446404 A CN 1446404A CN 01814126 A CN01814126 A CN 01814126A CN 01814126 A CN01814126 A CN 01814126A CN 1446404 A CN1446404 A CN 1446404A
- Authority
- CN
- China
- Prior art keywords
- file
- compression
- length
- data
- huffman
- 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
Images
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11B—INFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
- G11B20/00—Signal processing not specific to the method of recording or reproducing; Circuits therefor
- G11B20/10—Digital recording or reproducing
-
- 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
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3086—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
-
- 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
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Signal Processing (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Image Processing (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
一种滑动窗型压缩方案与一种统计型压缩方案相结合,以提供一种双模压缩方案,该方案是对用于数据存储设备中的操作码进行压缩进行优化的。在该压缩方案的滑动窗部分,建立根和复制项,其中所述复制项包括一长度值和一偏移量值。在所述压缩方案的所述统计部分,分别对所述长度值和所述偏移量值的最高有效部分进行压缩,形成一个压缩输出,当该压缩输出与所述根项相结合时,形成一个双重压缩的压缩输出。然后,使用一互补的解压方案对所述双重压缩输出进行解压。
Description
相关申请
本申请要求2000年8月15日提交的美国临时申请序列号60/225,256的优先权。
发明领域
本申请一般涉及数据压缩和解压,尤其涉及用于磁盘驱动器中的固件的数据压缩和解压。
发明背景
磁盘驱动器工业不断地努力以减少磁盘驱动器系统(包括高端和低端系统)的体积以及降低它们的成本。可采取显著的成本降低和体积缩减的一个领域是非易失性存储器部件的领域,这些部件通常是磁盘驱动系统中最贵的部件。在磁盘驱动器中一般装有非易失性存储器元件,例如ROM或快闪RAM等,用于储存磁盘驱动器的操作码。磁盘驱动器一启动,必须快速存取访问的部分磁盘驱动器操作码一般从ROM或快闪RAM传送到磁盘驱动器中的易失性存储器(例如标准RAM)中。然后,由磁盘驱动器微处理器快速存取访问这部分操作码用于执行。其余部分的磁盘驱动器操作码仍保留在非易失性存储器中,从非易失性存储器中可以存取访问和执行这些操作码。
已经提出和实施了多种方法,这些方法针对减少磁盘驱动器中非易失性存储器的使用,从而降低磁盘驱动器的成本。一种这样的方法包括对磁盘驱动器的操作码进行压缩,并将压缩的操作码储存在磁盘驱动器的非易失性存储器内。一旦启动磁盘驱动器,使用一个小的自举程序对该压缩的操作码进行解压,并将解压的操作码储存在磁盘驱动器的易失性存储器内。然后由磁盘驱动器微处理器从易失性存储器中存取访问和执行磁盘驱动器的操作码。通过压缩磁盘驱动器的固件,可以实现用于储存固件的非易失性存储器容量的显著减少,相应地降低了非易失性存储器和整个硬盘的成本。这样一种方法在双处理器解压方法中采用了单模、霍夫曼型压缩技术,其中一个处理器进行操作码的解压并将其载入RAM中供另一个处理器使用。
一般,数据压缩是将某一给定格式定义的数据转换成另一种格式,使得所得的经压缩的格式包含的数据比特数(即定义数字数据的1和0)比原格式的要少。因此,这些数据被压缩成一种更小规模的表示。当需要原始数据时,用一种与压缩算法互补的算法对压缩的数据进行解压。
有两种主要的数据压缩/解压方案(以下简称为压缩方案),无损压缩方案和有损压缩方案。有损压缩指的是解压的数据与原来的数据不完全相同的方案。在有损压缩方案中,在数据压缩和解压过程中,有意地省略了或丢失了数据的某些成分。有损压缩方案一般用于图像或声音的压缩,其中解压的数据中的有限的或冗余的数据的损失一般是不显著的,并因此是可以接受的。然而,有损失压缩方案不适用于对诸如操作码文件之类的可执行文件进行压缩,在这种文件中,即使丢失一比特的信息,也会导致该文件无用。在数据丢失是不可接受的应用中,如没有要求,最好使用无损压缩方案。
在无损数据压缩领域,有两种一般类型的压缩技术:(1)基于字典的(或滑动窗)压缩;以及(2)统计压缩。基于字典的压缩方案检查输入数据流和,以及寻找在字典中出现的符号或字符组,该字典由已被压缩的数据构成。如果发现匹配,则将该字典内的单个指针或索引输出到压缩的数据流中,以代替该符号组。如此,能由较小的索引值替代一经常出现的符号组。许多种基于字典的方案间的主要区别是怎样建立和维护字典,以及怎样找到匹配。
一种众所周知的基于字典的方案是LZ77算法。在Ziv,J.和Lempel,A.的“A Universal Algorithm for Sequential Data Compression”,IEEE信息理论学报第23卷(1977年5月)337-343页中描述了基本的LZ77方案。该LZ77方案使用一种单向文字/复制算法来压缩或编码,以及解压或解码一数据序列。简述之,该LZ77方案通过用压缩的输出数据流中的短代码替代输入数据流中重新出现的数据模式来对数据流进行压缩。典型地,LZ77方案搜索三个符号或字节长的重新出现的数据串。未压缩的输入数据流中的符号或者作为未压缩的串(称为“根项”或“直接量”)直接并入压缩的数据输出流,或者另一方面也可由指向已经并入压缩的数据输出流中的根项的匹配组的指针(即称为“复制项”)来代替。复制项含有偏移量和长度信息,所含信息需要的字节数比被替代的直接量数据的字节数更少些或者相等。该偏移量,或偏移值规定了正被编码的串相对于它前一次的出现的偏移量。例如,如果一条特定的5个符号的直接量串出现于在正被编码的同一出现处前的10个字节,则偏移量为10。该长度规定了正由复制项替代的串的长度。在该例子中,长度域为5,并按符号或字节数来规定匹配数据序列的长度。通过尽可能地用复制项来表示未压缩的数据序列来实现压缩。只有当不能找到三个或多个符号的匹配时,一般将根项并入压缩的数据序列。
统计压缩方案,例如霍夫曼方案,在对流进行压缩之前,通过读入和估计整个数据流来建立数据流的统计模型。例如,在数据流的初始估计期间,霍夫曼编码根据各个符号出现的次数创建统计“树”(霍夫曼树)或排列(ranking)。该霍夫曼树按出现的频率来标识数据流中的各个符号。在创立了霍夫曼树后,用对应于某一符号的霍夫曼树中的值的变长度代码替代流中重复出现的该符号,以建立压缩的数据流。例如,最频繁出现的符号在霍夫曼树中可以赋予最短小的代码,从而,就可用最小可能的代码来替代最频繁出现的符号。
除了单独使用上述的LZ77和霍夫曼编码方案的任一种之外,已经发现,组合这些方案比单独使用一种压缩方案可以达到更高的数据流压缩率。这种“双模”压缩方案的一个典型例子涉及使用霍夫曼编码进一步压缩先前由LZ77方案输出的数据流,以创建霍夫曼/LZ77压缩数据流。由于它们的高压缩、简单性以及快压缩速度,在典型数据压缩应用中,双模压缩方案的应用已变得普遍。
虽然典型的双模压缩方案或算法在某些应用中比单模压缩方案可能更有效,但是这些典型的双模压缩方案有若干缺点,严重地限制了在典型磁盘驱动器中使用的有效性。在磁盘驱动器中使用一种典型的双模压缩方案时可能发生的一个缺点涉及到解压速度。典型的双模压缩算法设计在处理器上运行,例如个人计算机和工作站上的那些处理器,这些处理器具有用于执行程序的有效的堆栈空间。换句话说,双模压缩算法一般被优化成在具有有效堆栈空间并考虑到低中断和较短的上下文切换等待时间的处理器上运行。特别在包括使用递归算法来处理或定位一典型霍夫曼树的霍夫曼模式的双模压缩方案中存在这种情况。
与用于个人计算机或工作站中的处理器相反,典型的磁盘驱动器使用一带有非常有限的堆栈空间的小的处理器。例如,磁盘驱动器通常利用数字信号处理器(DSP)作为主处理器。虽然DSP一般具有高计算速度,但是它们通常只有非常有限的堆栈支持和非常高的中断和上下文切换等待时间。由于这种原因,一般用于磁盘驱动器中的处理器通常不适合于依赖有效堆栈空间以及低中断和上下文切换等待时间的典型双模压缩算法。特别地,一般用于磁盘驱动器的处理器不适合于包括采用递归算法的典型霍夫曼方案的双模压缩算法。
磁盘驱动器中采用典型双模压缩方案的又一个潜在问题涉及磁盘驱动器中所使用的操作码数量较少。双模压缩方案一般对压缩诸如图像、数据库、和音频文件之类的大型数据文件得到优化。同样地,由于“系统开销(overhead)”,这些压缩方案对于将小数据块压缩成诸如双模压缩方案所需的字典或霍夫曼树之类的更小的数据块来说一般不是很有效的。例如,构造典型的霍夫曼树,以优化大型数据文件的压缩和压缩步骤的速度。这一般通过使霍夫曼树相当大来实现。对于诸如图像文件这样较大的数据文件,这种级别的系统开销比通过所达到的最佳压缩速度和整体压缩所得的补偿大。但是对于小型的数据文件,例如磁盘驱动器中的操作码,由于典型霍夫曼树的大小而造成的系统开销是不能接受的。事实上,对于小数据块,加入到霍夫曼树的压缩数据的大小可能比原来的数据文件更大,从而否定了压缩小型数据文件的益处。
已经研发的本发明是有关于这些考虑和其它方面的考虑。
发明概述
已经研发出一种双模压缩/解压方案,用于对数据存储设备压缩操作码。通过双模压缩方案,按一有助于快速解压的形式建立压缩数据,该形式特别适合于处理资源有限的应用,例如数据存储设备。在一个实施例中,修改的LZ77型压缩/解压方案与唯一的霍夫曼型压缩/解压方案相结合,以提供一种双模方案,该双模方案对于压缩和解压磁盘驱动器的操作码而得到优化。
另一个实施例涉及一种对一数据输入文件进行压缩,以建立压缩的数据输出文件的方法。该方法包括用滑动窗压缩方案顺序检查该数据输入文件,以建立根项和复制项。每个复制项具有一长度值和一偏移量值。偏移量值再细分成一最高有效部分和一最低有效部分,由该方法进行不同地处理。该方法创建一包括根项和复制项偏移量值的最低有效部分的简化的根/复制文件。该方法对复制项的偏移量值的最高有效部分进行压缩,建立压缩的偏移量文件。该方法还对复制项的长度值进行压缩,建立压缩的长度文件。作为该方法的一部分,简化的根/复制文件、压缩的偏移量文件、以及压缩的长度文件相结合,以建立压缩的数据输出文件。
与上述的方法互补,另一个实施例涉及一种用于对压缩数据输入文件进行解压的方法,该压缩数据输入文件包括一压缩的长度文件、一压缩的偏移量文件、以及一简化的根/复制文件。在这种方法中,该简化的根/复制文件具有根项和压缩的复制项。各个压缩的复制项包括未压缩的复制项的偏移量值的最低有效部分。各个未压缩的复制项包括一长度值和一偏移量值。
在该解压方法的最初步骤中,接收压缩的数据输入文件,并对压缩的长度文件进行解压,以获得长度值。类似地,对压缩的偏移量文件进行解压,以获得偏移量值的最高有效部分。然后,从偏移量值的最低有效部分、偏移量值的最高有效部分、以及长度值形成未压缩的复制项,所述偏移量值的最低有效部分是从简化的根/复制文件中获得的。该方法确定由未压缩的复制项标识的匹配数据串,并输出一包含根项和匹配数据串的解压的数据输出文件。
另一实施例涉及一种数据存储设备和一种解压器模块,所述数据存储装置带有储存于该装置中的非易失性存储器内的压缩的操作码文件,所述解压器模块可操作以对压缩的操作码文件进行解压。在这个实施例中,压缩的操作码文件包括第一压缩文件、第二压缩文件以及一简化的根/复制文件。
将从阅读下列的详细说明和浏览相关附图中,可以明白象征本发明的这些和各种其它功能以及优点。
附图简述
图1是按照本发明一实施例的压缩器模块的框图。
图2是按照本发明一实施例的解压器模块的框图。
图3是图1所示的压缩器模块和图2所示的解压器模块的示例性操作环境。
图4是结合图2所示解压器模块的实施例的磁盘驱动器的平面图。
图5是图4所示磁盘驱动器的简化功能框图。
图6是说明由图1压缩器模块使用的对输入数据进行编码以产生压缩数据的高级示范处理的一般操作流程图。
图7是图1所示的压缩器模块的LZ77模式是怎样将输入数据流压缩成一初级压缩文件的示例性说明。
图8说明了图1的压缩器模块的霍夫曼编码模式的操作流程的一个例子。
图9说明了图2的解压器模块所采用的解码过程的操作流程的一个例子。
图10说明了由图2的解压器模块所使用的,用于恢复复制项的偏移量值和长度值的一种可能过程的操作流程。
图11说明了诸如图7所示的霍夫曼编码操作的打包的输出,以及图2所示的解压器模块怎样对该打包的输出进行解码。
图12说明了由图2所示的解压器模块可从图11所示的打包输出中创建的未打包的字典,以及图2的解压器模块怎样使用该未打包的字典。
详细描述
一般而言,本发明的揭示描述了用于压缩和展开数字数据的方法和系统。本发明的揭示尤其描述了一种利用独特的双模压缩和解压方案的数据压缩器模块和数据解压器模块。更特别地,本发明的揭示描述了一种数据压缩器模块和一种在数据存储设备内可工作的数据解压器模块,所述数据压缩器模块用于对数据存储设备中的存储装置的操作/固件码(操作码)进行压缩,所述解压器模块用于对来自数据存储设备的存储器中的压缩码进行解压。
图1说明了按照本发明一实施例的压缩器模块100的简化表示。如图1所示,压缩器模块100接收未压缩的数据的输入流102,并输出压缩数据流104。如下面更详细描述的,压缩器模块100采用独特的双模压缩方案,以将未压缩的数据流102紧压成压缩数据流104。
图2说明了按照本发明一实施例的解压器模块200的简化表示。如图2所示,在本发明的一个实施例中,解压器模块200接收压缩数据流202,并利用一种与上述独特双模压缩方案互补的独特双模解压方案,将压缩数据流202展开成未压缩数据输出流204。
在一个实施例中,在通用计算机300内实行压缩器模块100,以对数据存储设备(例如,如图3所示的磁盘驱动器320)的操作码进行压缩。然后,在磁盘驱动器320中采用解压器模块200(图2),以在例如磁盘驱动器320的启动时,展开磁盘驱动器的操作码。
在该实施例以及这里描述的其它实施例中,可以将压缩器模块100的逻辑操作实现为诸如(不受限制)个人计算机或计算机工作站中的处理器之类微处理器上运行的计算机执行的步骤序列或程序模块。在该实施例中,可以将解压器模块200的逻辑操作实现为诸如(不受限制)磁盘驱动器320中的专用处理器或数字信号处理器(DSP)之类的处理器上运行的计算机执行的步骤序列或程序模块。本领域的那些技术人员将明白本发明的压缩器模块和解压器模块还可以实现为计算系统之内的互连的机器逻辑电路或电路模块。该实现是取决于实行压缩器模块100和/或解压器模块200的计算系统的性能要求的选择问题。这里所述的操作、结构设备、动作、和/或模块可以用软件、固件、专用数字逻辑、和/或它们的任何组合来实现,而不背离这里所附的权利要求内所述的本发明的要旨和范围。此外,这里所述的各种软件例行程序或软件模块可通过本领域中已知的任何手段来实现。例如,可以使用诸如“C”,“C++”,Pascal,FORTRAN,汇编语言,Java等之类的计算机编程语言。此外,可以采用诸如面向过程、面向对象或人工智能技术之类的各种编程方法。
计算机可读媒体可以是能由计算机或处理器存取访问的任何可用的媒体。作为例子但并不是限制,计算机可读媒体可包括计算机储存媒体和/或通信媒体。
计算机存储媒体包括按任何方法或技术实现的用于储存诸如计算机可读指令、数据结构、程序模块或其它数据之类的信息的易失性和非易失性,可拆卸的和不可拆卸的媒体。计算机存储媒体包括但不限于RAM、ROM、EPROM、快闪存储器或其它存储技术、CD-ROM、数字通用盘(DVD)或其它光存储装置、磁带盒、磁带、磁盘存储装置或其它磁存储设备、或可用于储存所需信息并可由执行操作码的计算机或处理器存取访问的任何其它媒体。
通信媒体一般包括有计算机可读指令、数据结构、程序模块或在诸如载波或其它传送机构之类的已调数据信号中的其它数据,并包括任何信息传递媒体。术语“已调数据信号”是指具有一个或多个特征集或按某一方式改变以将信号中的信息编码的一种信号。作为例子而不是限制,通信媒体包括诸如有线网络或直接线连接之类的有线媒体,以及诸如声音、RF、红外线之类的无线媒体和其它无线媒体。上述的任何组合也应当包括在计算机可读媒体的范畴之内。计算机可读媒体也可以称作为计算机程序产品。
如图3所示,可以将压缩器模块100实现为由通用计算机300执行的软件模块。如下面详细描述的,可以采用压缩器模块100对诸如例如磁盘驱动器操作码数据之类的未压缩的或原始的数据流102进行压缩,用于传递到以及储存在磁盘驱动器320中的存储器内。在图3所示的系统中,磁盘驱动器320的操作码输入到计算机300,该计算机随后采用压缩器模块100对操作码进行压缩,用于传送给磁盘驱动器。图3所示的通用计算机300的某些元件包括监视器302、键盘304、处理器306,所述处理器306具有输入/输出(I/O)部分308、中央处理单元(CPU)310、存储器部分312、以及诸如磁盘驱动器、CD-ROM等之类的非易失存储装置314。虽然没有显示出通用计算机300的许多其它内部部件,但是本领域的技术人员理解这些部件和他们的互连都是众所周知的。
在这个实施例中,解压器模块200是在磁盘驱动器320中的处理器或DSP中实现的,以对压缩的操作码进行解压,如下将详细描述。图4显出一示例性磁盘驱动器320,在该驱动器中可以采用或实现解压器模块200。磁盘驱动器320包括底座402,在底座上安装有磁盘驱动器320的各个部件。顶盖404(部分切掉所示)与底座404一起合作,按常规方式为磁盘驱动器320形成一内部密封环境。所述部件包括主轴马达406,它以恒定高速旋转一片或多片盘片408。通过使用动臂组件410将信息写到盘片408的磁道上,以及从盘片408的磁道上读出信息,该动臂组件410在搜索操作期间,围绕定位于盘片408附近的支承轴组件412旋转。动臂组件410包括多个延伸向盘片408的移动臂414,带有一个或多个从各个移动臂414延伸出来的弯曲部分416。安装在各个弯曲部分416末端的是一磁头418,磁头418包括一空气支承浮动块,能使磁头418在紧邻近相应盘片408的相应的表面上飞行。
在工作期间,在允许动臂组件410的枢轴移动的同时,弯曲组件430为动臂组件410提供必需的电气连接通路。弯曲组件包括印刷电路板432,磁头接线(未示出)连接到该印刷板;磁头接线沿着传动臂414和弯曲部分416连接到磁头418。印刷电路板432一般包括用于控制一次写操作期间施加于磁头418的写电流的电路,以及用于在一次读操作期间放大由磁头418产生的读信号的前置放大器。弯曲组件在用于穿过底座402连接到安装在磁盘驱动器320底面上的磁盘驱动器印刷电路板(未示出)的弯曲支架434处终止。
现在参考图5,这里所示的是图4的磁盘驱动器320的功能框图,一般地示出了主要功能部件或模块,这些主要功能部件或模块一般驻留在磁盘驱动器印刷电路板上并用于控制磁盘驱动器320的工作。如图5所示,经过接口应用专用集成电路(接口)502提供与磁盘驱动器320的通信。接口502一般包括一相关的缓冲器510,该缓冲器促进磁盘驱动器320和采用磁盘驱动器320储存数据的诸如主计算机500之类的系统之间的高速数据传送。在正常工作中,要写到磁盘驱动器320的数据先从主计算机500传送到接口502,然后传送到读/写通道512,读/写通道对数据进行编码和串行化,并把必需的写电流信号提供给磁头418。为了检索先前由磁盘驱动器320储存的数据,由磁头418产生读信号,并提供给读/写通道512,读/写通道进行解码、检错和纠错操作,并将检索出的数据输出到接口502,随后传送给主计算机500。磁盘驱动器320的这类操作在本领域是众所周知的,并且被讨论过,例如,在1994年1月4日发布给Shaver等人的美国专利号5,276,662中。
还如图5所示,微处理器516(诸如DSP)操作上连接到接口502。微处理器516向磁盘驱动器320提供高级别通信和控制。另外,处理器516还为主轴控制526和伺服控制528提供控制信号。操作上连接到处理器516的是两种类型的存储器,非易失性存储器(NVM)524和易失性存储器(VM)530。NVM524可包括但不限于只读存储器(ROM)或快闪只读存储器(flash-ROM)。VM530可包括但不限于随机存取存储器(RAM),例如动态RAM或静态RAM。
在一个实施例中,由操作码,称为“引导码”,控制磁盘驱动器320的工作,该操作码最初以压缩形式储存在NVM 524内。在一实施例中,读入并作为磁盘驱动器320的启动的一部分而执行的引导码包括控制解压器模块200工作的指令。磁盘驱动器320的启动称作为自举(bootstrap)过程。
自举过程一般可描述为三个截然不同的步骤。首先,处理器516从存储器内一已知位置开始执行,该位置储存有初始化处理器、存储器和所需的诸如扩展存储器控制器、芯片控制器、总线控制器、定时器等之类的任何其它硬件外围设备的指令。其次,引导码随后执行运行期初始化,该初始化由用于编写操作码的特定编程语言定义。这包括程序堆栈、堆(heap)的初始化,静态初始变量的初始化,并且在能执行操作码之前需要执行任何其它链接或语言或操作内核相关的操作。最后一步的特征是:由正常的操作码初始化与媒体存取和外部存取结构的通信方法,使磁盘驱动器能执行外部系统所要求的动作(例如,该驱动器是一台计算机的一部分)。
这里讨论的诸实施例可以在自举过程的第二步后对压缩的操作码进行解压。因为必需由正常的操作码以某种方式回收解压器模块200使用的静态存储器,从正常操作码看,该附加步骤是前一步骤的延伸。换句话说,由操作码通过该操作码简单地盖写这些数据的方法“回收”由解压器模块200使用的工作缓冲器和变量。实际上,一旦开始执行正常操作码,解压器模块200的所有痕迹记录(trace)(除了在非易失性存储器内的原始解压引导码和压缩的操作码之外外)都消失了。
在本发明一实施例中,使用压缩器模块100对操作码进行压缩。如上所述,压缩器模块100使用一种包括第一模式和第二模式的独特的双模压缩方案。在一个实施例中,第一模式包括修改的LZ77型压缩方案(LZ77模式),该方案对未处理的输入数据102进行处理,产生含有根项和复制项的初级压缩文件。如下所述,再按双模压缩方案的第二模式(霍夫曼模式)对该初级压缩文件进行进一步压缩。虽然这里相对于LZ77模式描述了第一模式,但是要理解,可以使用能输出含有根项和复制项的初级压缩文件的任何压缩方案。
图6是示出按照本发明的一个实施例的对输入数据进行编码以产生压缩数据的高级示例性处理的一般操作流程图。如图6所示,压缩器模块100接收待编码的输入数据流612。输入数据流612是未压缩的计算机可读数据流。压缩器模块100用这里描述的独特的双模压缩方案对该输入数据流612进行编码,并输出一压缩文件620。该压缩文件620表示输入数据流612的一种压缩的形式,并且重要的是该文件大小实质上比输入数据流612更小。随后,解压器模块200将使用该压缩文件620,以恢复输入数据流612中的计算机可读数据。
压缩文件620包括三个数据段:经霍夫曼编码的偏移量文件614,简化的根/复制文件616,和经霍夫曼编码的长度文件618。简化的根/复制文件616含有根项和部分复制项,在下面参考图7和图8描述。经霍夫曼编码的长度文件618在编码的长度数据617中含有编码的长度值,该编码长度值与简化的根/复制文件616中的根项和复制项相关联。经霍夫曼编码的长度文件618还包括一霍夫曼长度字典619,该字典619含有用于对经编码的长度数据617中的经编码的长度值进行解码的霍夫曼解码数据。第三段数据是与简化的根/复制文件616相关联的经霍夫曼编码的偏移量文件614。霍夫曼编码的偏移量文件614含有经编码的偏移量数据613和霍夫曼偏移量字典615,该字典用于对编码的偏移量数据613进行解码。虽然把这三个文件614、616和618描述成在压缩文件620中是顺序的和截然不同的文件,但是要明白该压缩文件620可以储存在任何地方的存储器内。
如所注意到的,压缩器模块100的诸实施例利用了一种双模方案来创建压缩文件620。第一模式为LZ77模式,该模式建立如参考图7描述的一初级压缩文件。该初级压缩文件是第二压缩模式,霍夫曼编码模式的输入。参考图8描述霍夫曼编码模式的一实施例。
图7提供了LZ77模式700怎样把输入数据流压缩成初级压缩文件的一个示范性说明。因为初级压缩文件含有根项和复制项,这里将该初级压缩文件称作为初级根/复制文件,它是输入数据流的一个压缩版本。输入数据流是计算机可读的未压缩数据流。计算机可读数据包括但不限于微处理器可执行的代码或固件,如可储存在图3磁盘驱动器320中的存储器内的代码或固件。图7打算帮助读者理解在LZ77模式700中怎样对输入数据进行压缩,但打算以任何方式限制本发明的范畴。本领域中已知许多不同版本的LZ77。LZ77算法的变型包括但不限于LZ78、LZH、LZB、LZSS和LZFG,然而,最流行的压缩方案是LZ77型的各种变型。流行的LZ77型压缩方案的例子是ARJ、LHA、ZIP、ZOO。要理解,LZ77模式700可以采用能够按照这里所描述的实施例的产生根项和复制项的任何压缩算法。
图7说明了含有多个符号的输入数据流704,在诸如时钟周期CLK0 712和CLK3 714之类的许多时刻场合处得到处理。一个符号一般是指用于表达任何计算机可读信息的任何简化表式。符号的例子包括字符和数字。一个符号一般是在计算机存储器内以一个或多个计算机可读比特的形式二进制编码的。时钟周期一般指触发计算机操作事件的周期时间基准。例如,在每个时钟周期,从存储器读入输入数据流704的一个或多个符号以待编码,同时将压缩的数据写入存储器内。
为了帮助读者理解怎样对输入数据流704进行编码,在输入数据流704上叠加了一个滑动窗705。滑动窗705可被看作具有一前沿716和一后沿717,在前沿和后沿之内含有符号。前沿716和后沿717可以逻辑地表示任何存储器(包括微处理器内的寄存器)中的单元,在这些单元中储存有所含的符号。可以想像,通过使用存储器定位方案,用软件定义滑动窗705,以将前沿716和后沿717与输入数据流704中的符号逻辑地联系在一起。在滑动窗705内可以含有任何数量的符号。
仅出于说明性目的,图7的滑动窗705含有9个符号。在一实际实施例中,该滑动窗705可以为任意长(例如,1024)。滑动窗705的大小一般取决于实施例中所用的微处理器或数字信号处理器中的寄存器大小。滑动窗705还可以包括把滑动窗705分割成两个部分或两个缓冲器的分割线720。像前沿716一样,可以把分割线720看作对储存输入数据流704的符号的存储器内一个存储单元的定位。滑动窗705的两个缓冲器称作为先行(look-ahead)缓冲器718和搜索缓冲器721。搜索缓冲器721含有当前已经编码的符号。先行缓冲器718含有仍待编码的符号。
例如,在一个实施例中,先行缓冲器可以限制为128个字节。该缓冲器大小是长度域或宽度域中的比特数的函数。当不需用所有的比特位表达宽度值时,表示位于滑动窗内的串长度所需的比特位数越多,浪费的比特位就越多。先行缓冲器的大小可以任意选择,或者根据经验得出,以适合应用、环境、要压缩的特定数据等等。
随着每个时钟周期,滑动窗715按前沿716的方向前进或滑过输入数据流704的另一个符号。例如,在CLK0 712,滑动窗705叠加在输入数据流704的符号“A”上。在CLK1 713,滑动窗705叠加在符号“A”和邻近符号“A”的一个符号上,该符号在该例子中为符号“B”。随着滑动窗705在输入数据流704的符号上前进,这些符号就进入先行缓冲器718。对先行缓冲器718内的符号进行编码。在一实际实施例中,滑动窗705内的符号在存储器内,并对先行缓冲器718所含的符号序列进行编码。符号序列是一个或多个逻辑上相邻的符号。最大的符号数可以设成任意数值,并取决于滑动窗705的大小。
压缩器模块100读取先行缓冲器718中的符号序列,并在搜索缓冲器721内搜索这些符号序列。如果无先行缓冲器718的符号序列位于搜索缓冲器721内,则压缩器模块100输出该符号序列作为根项,例如根项708。根项708一般是来自先行缓冲器718的符号序列,对于该符号序列没有两个或多个符号的匹配位于搜索缓冲器721内。如果在搜索缓冲器721内找到一条先行缓冲器718的符号序列,则压缩器模块产生一复制项,例如复制项710。例如复制项710的复制项包括偏移量值730和长度值732。在该说明中,为了帮助读者区别复制项710和根项708,复制项710显示为括号内所含的部分。
在一个实际实施例中,根项708和复制项710是二进制编码的,并与区别标识符一起储存在存储器中的初级根/复制文件中。每个根项708与相关的计算机可读标识符一起储存在初级根/复制文件中,该标识符将该项唯一地标识为根项708。同样地,每个复制项710与相关的计算机可读标识符一起储存在初级根/复制文件中,该标识符将该项唯一地标识为复制项710。从而,相关的标识符将根项708和复制项710区分开。相关的标识符可以是任何唯一的二进制编码的标识符。例如,相关标识符可以是单个比特,其中比特值1表示该项是根项708,而比特值0表示该项是复制项710。
在CLK0 712,搜索缓冲器721中没有含有任何符号。从而,压缩器模块未在搜索缓冲器721内定位到先行缓冲器718的符号“A”。从而,在CLK0 712,将根项A 734输出到一存储器单元,较佳地应在保持压缩数据的文件中。在CLK1713,在搜索缓冲 721中没有找到先行缓冲器718的符号序列“B”。因此输出符号“B”,并与先前的根项A 734一起储存,以形成根项AB 736。继续按该方式处理到CLK3 714,在这时,根项ABCD 708储存在压缩数据文件中。在CLK4 738,一符号“A”在先行缓冲器718中。在搜索缓冲器中也找到该符号“A”,但在CLK4 738不输出项。相反,继续处理,以在滑动窗705内识别该复制的符号序列。
无输出项的处理一直进行到CLK8 740。在CLK8 740,先行缓冲器718的符号序列“ABCD”与搜索缓冲器721内的符号序列相匹配。将该符号序列“ABCD”压缩进复制项710,并与先前储存的根项708一起储存。如先前所讨论的,复制项710包括偏移量值730和长度值732。长度值732表示由复制项710表示的符号序列中的符号数。偏移量值730表示由复制项710复制的根项708的相对邻近值。在图7实施例中,偏移量以0开始(即,最接近的根项是在0偏移量值处)。本领域的那些技术人员将认识到,在其它实施例中,可以用任何方式表示偏移量值。例如,该偏移量值可以表示含有输入数据流的文件中的一个偏移量。该偏移量值也可以表示从该复制项到根符号序列的开始处或到根符号序列的结束处的相对距离。在较佳实施例中,选择能使数据压缩最大化的偏移量值。
在CLK8 740,根项ABCD 708是与先行缓冲器718的符号序列“ABCD”相关联的根项。在CLK8 740,搜索缓冲器721的符号序列“ABCD”紧邻于先行缓冲器718中的符号序列“ABCD”。因此,复制项710的偏移量值730为0,指出该相关的根项是紧邻复制项710的根项708。
在一个实施例中,偏移量值730是指在已定位并耗尽一全匹配时,在滑动窗705内的索引位置。换句话说,当输入数据流将新的候选符号引入先行串时,该滑动窗705不再前进。当下列两种情况中的任意一种发生时,滑动窗索引前进,并将先行串复制进该滑动窗705:1.在滑动窗内的任何串和先行串不匹配,并且先行串比最短的候选串更短;或者2.已发现并耗尽一次匹配。在这两种情况中,将先行串复制进滑动窗705,以及已经计算并发出复制项710之后滑动窗索引前进,即,最后进行滑动窗705的更新。如果不是这种情况,考虑中的一匹配可能部分地滑出窗口705之外,使该匹配不可能完成。
在CLK8 740,与根项708和复制项710一同储存的还有根项E 744,它是先行缓冲器718的单个符号,并不在搜索缓冲器721内。复制项710,根项708,和第二根项744组合在一起形成根/复制项742。如所讨论的,根/复制项742较佳地储存在一文件中。换句话说,在CLK8 740期间,确定根项E744的时刻,注意到先行串不再匹配滑动窗内的任何字符串。在该时钟周期期间,更新压缩文件,并用先行缓冲器的内容更新滑动窗缓冲器。
为了进上步说明该过程,图7包含附加的时钟周期,CLK9、CLK10、CLK11和CLK12 750。在CLK8 740后,按上述的方式继续处理,以在输入数据流704中定位最长的复制的符号序列,并用根/复制项对它们进行编码。在CLK12 750,压缩器模块100定位了下一条最长的复制符号序列,它是先行缓冲器718的符号序列“ABCD”。在CLK12 750,在搜索缓冲器721搜索并找到先行缓冲器718的符号序列“ABCD”。
在CLK12 750,产生含有另一偏移量值754和另一长度值756的另一复制项752。因为在CLK12 750处先行缓冲器718的复制符号序列“ABCD”为4个符号长,以及相关的根项ABCD 708为4个符号长,所以长度值756为4。因为一个根项,即根项E 744,位于复制项752和与根项ABCD 708相关的复制项752之间,该偏移量值754为1。复制项752与先前储存的根/复制项742一起储存,以形成根/复制项760。按上述的方式继续处理,一直到所有的输入数据编码成根/复制项为止,该根/复制项较佳地储存在初级根/复制文件中。应当注意到,有许多其它技术用于产生和表示根项和复制项,这些技术是在本领域中已知的并也可被使用。如将讨论的那样,该初级根/复制文件用作霍夫曼压缩模式的输入,以进一步压缩输入数据。
图8说明压缩器模块100的霍夫曼编码模式的操作流程800的一个例子。通常,霍夫曼编码模式包括从初级根/数据文件(关于图7描述)读入根/复制项,并产生一个或多个相关的经霍夫曼编码的数据文件。结果,将初级根/复制文件压缩成一个最终的压缩数据文件,例如压缩文件620(图6)。开始操作801初始化霍夫曼编码模式。输入操作808从由LZ77模式建立的初级根/复制文件中读入预定的比特数。在一个实施例中,在输入操作808中读入9比特,其中8个比特表示一个符号,以及1个比特指明该符号是根项还是复制项。其它实施例可以为根/复制项和他们各自的指示符使用较多的或较少的比特数。
在输入操作808后,判断操作802判断从输入操作808来的输入符号是否是根项。判断该符号是否根项较佳地包括测试在输入操作808中取得的一个或多个指示符比特。可以使用测试指示符比特的许多方法,包括但不限于屏蔽符号比特以仅仅获得指示符比特,或任何其它已知的比特处理。如果该符号确定为根项,则写操作804将该根项写入简化的根/复制文件,例如图6中描述的简化的根/复制文件616。将指示符比特也写入简化的根/复制文件616,使得解压器模块200后来在解压过程中能确定哪些符号是根项及哪些符号是复制项。
在根项已经写入简化的根/复制文件616后,完成判断操作806判断初级根/复制文件中是否还有任何符号有待进行霍夫曼编码或写入简化的根/复制文件616中。如果判断操作806判定初级根/复制文件中还有符号有待处理,则操作流800返回到输入操作808。然而,如果完成判断操作806判定初级根/复制文件中已没有待处理的符号,则执行霍夫曼长度编码操作850,这将在下面详细讨论。
现在返回到判断操作802,如果判断操作802判定一符号不是根项,则该符号必定是复制项,在该情况下,长度移去操作810从复制项移去长度值(例如图7的长度值756),使得随后可对该长度值进行霍夫曼编码。接着,由长度储存操作812将该长度值储存到长度缓冲器,该长度缓冲器截然不同于简化的根/复制文件616。在长度储存操作812中,还可计数该长度值,以发展随后的霍夫曼编码所需的统计量。长度储存操作812中的计数较佳地包括维持对应于每个唯一长度值的计数器,并使对应于所储存的长度值的计数器递增1。
在长度储存操作812后,偏移量移去操作814从复制项移去偏移量值(例如图7的偏移量值754)的最高有效部分(MSP)。偏移量值的最高有效部分包括该偏移量值的若干最高有效比特。在偏移量移去操作814中,从偏移量值移去的最高有效比特数取决于特定实施例和压缩文件620的所希望的压缩率。测试结果已经示出,通过移去偏移量值的最高有效的5比特,并对其进行霍夫曼编码,由于最高有效部分的良好的统计特征(很少改变),能够达到实质上的压缩率。本领域的那些技术人员将认识到,偏移量值的最高有效部分的大小可以根据特定应用所希望的规格(例如但不限于希望的压缩/解压时间和希望的压缩率)而变化。
在偏移量移去操作814后,MSP偏移量储存操作816将MSP储存在偏移量缓冲器内。MSP偏移量储存操作816可包括计数操作,其中为随后的霍夫曼编码对MSP进行计数。计数操作较佳地包括维持对应于每个唯一的MSP的计数器,并且使对应于MSP偏移量储存操作816中所储存的每个MSP的计数器递增1。偏移量缓冲器与长度缓冲器及简化的根/复制文件616是截然不同的。然后,最低有效部分(LSP)偏移量储存操作818将该复制项剩余的部分(是该偏移量值的最低有效部分)储存在简化的根/复制文件616内,作为一压缩复制项。一当完成LSB偏移量储存操作818,完成判断操作806就判断初级根/复制文件内是否还保留有待编码的根项或复制项。
如果完成判断操作806判定不再有待处理的根项或复制项,则霍夫曼长度编码操作850对长度储存操作812中先前建立的长度缓冲器的内容进行霍夫曼编码。霍夫曼长度编码操作850建立编码的长度数据,诸如图6的编码长度数据617。对长度缓冲器的霍夫曼编码一般包括读取长度缓冲器,以及对长度缓冲器中的每个长度值的出现次数进行计数。然后,对每个长度值计算一个统计似然值,该似然值表示每个长度值将出现的可能性。然后,根据其概率的从大到小的次序储存这些长度值,并与一霍夫曼代码一起储存在霍夫曼字典里。表1说明了在霍夫曼编码期间可能产生的数据的例子:
表1 | ||||
索引 | MSP的长度值(十六进制) | 概率 | 代码长度 | 霍夫曼代码(二进制) |
0000 | 0003 | 21.062559 | 0002 | 00 |
0001 | 0006 | 16.315624 | 0003 | 111 |
0002 | 0007 | 12.826155 | 0003 | 100 |
0003 | 0028 | 10.657026 | 0003 | 011 |
0004 | 001c | 6.790318 | 0004 | 1011 |
0005 | 0004 | 5.438541 | 0004 | 0101 |
0006 | 000c | 4.401132 | 0005 | 11010 |
0007 | 0005 | 3.363722 | 0005 | 11000 |
0008 | 0019 | 2.986482 | 0005 | 10100 |
0009 | 000d | 2.326312 | 0006 | 110111 |
0010 | 0008 | 1.823326 | 0006 | 110011 |
0011 | 001b | 1.697579 | 0006 | 110010 |
0012 | 000b | 1.446086 | 0006 | 101010 |
0013 | 001e | 1.351776 | 0006 | 010010 |
0014 | 0009 | 1.288903 | 0006 | 010010 |
0015 | 000a | 1.131720 | 0007 | 1101101 |
0016 | 0027 | 0.943100 | 0007 | 1010111 |
0017 | 001d | 0.723043 | 0007 | 1010110 |
0018 | 0018 | 0.628733 | 0007 | 0100011 |
0019 | 001a | 0.597296 | 0007 | 0100010 |
0020 | 0017 | 0.565860 | 0007 | 0100000 |
0021 | 000e | 0.565860 | 0008 | 11011001 |
0022 | 0010 | 0.157183 | 0009 | 010000101 |
0023 | 0016 | 0.157183 | 0009 | 010000110 |
0024 | 0026 | 0.157183 | 0009 | 010000111 |
0025 | 0011 | 0.125747 | 0009 | 010000100 |
0026 | 000f | 0.125747 | 0010 | 1101100011 |
0027 | 0012 | 0.094310 | 0010 | 1101100000 |
0028 | 0014 | 0.062873 | 0011 | 11011000011 |
0029 | 001f | 0.062873 | 0011 | 11011000100 |
0030 | 0020 | 0.062873 | 0011 | 11011000101 |
0031 | 0013 | 0.031437 | 0012 | 110110000101 |
0032 | 0015 | 0.031437 | 0012 | 110110000100 |
第一列是任选的,并提供索引值,可利用索引值索引到一含有表1中的数据的表格。第二列列出未编码的数据(为十六进制格式的长度值或MSP偏移量值)。第三列列出第二列中每个值出现的相关概率。第三列中给出的每各个概率指示出经编码的偏移量数据613或经编码的长度数据617中的任一经霍夫曼编码的值表示相关的未编码数据的概率。第三列中的数据按从最高到最低的概率顺序储存。第五列中的值是第二列中的每一相关的未编码值的经霍夫曼编码的版本(按二进制格式)。在压缩期间,将第五列中的代码储存在经编码的长度数据617和经编码的偏移量数据613内。第四列列出与第五列中的每个代码相关的长度值。第四列中的每个长度值指示出第五列中相关的霍夫曼代码的比特数。
如在表1中所见的,出现概率最高的长度值或MSP值(0003)对应于具有最小比特数的霍夫曼代码(00)。随着每个长度值或MSP值出现的概率越少(如第三列中逐渐减少的概率所示),相应的霍夫曼编码的比特数就越大(如第四列中逐渐增大的比特长度所示)。霍夫曼编码的优点包括储存编码数据所需的全部平均存储器比储存原来的数据要少,并且每个霍夫曼代码是唯一的。较佳地应在霍夫曼长度编码操作850过程中建立霍夫曼长度字典,例如图6的霍夫曼长度字典619。霍夫曼长度字典619的建立包括将每个霍夫曼代码(例如表1的第五列)和它相应的代码长度(例如表1的第四列)以及长度值(例如表1的第2列)打包成一个长度字典缓冲器或文件。随后,由解压器模块200将利用该霍夫曼长度字典619,将霍夫曼长度代码与相应的长度值联系在一起。
在霍夫曼长度编码操作850中对在长度储存操作812中建立的长度缓冲器进行霍夫曼编码,建立编码长度数据617。对长度缓冲器进行霍夫曼编码的一种方法涉及建立霍夫曼树,这在本领域中是已知的。一般,为了对长度缓冲器建立霍夫曼树,在每片叶子用一唯一的长度值来构建霍夫曼树。最低可能的一对长度值是配对的,并把他们的概率加在一起。然后,下一最低概率长度值与先前的配对的长度值配对,并将该三个长度值的概率加在一起。继续配对和概率的累加,一直到配对好所有的长度值以及累加好他们各自的概率为止。注意,最终的概率累加和为1.0。然后,将二进制代码指定给霍夫曼树的每条分支。为了获得每个长度值的霍夫曼代码,诸分支应从该长度值被遍历到霍夫曼树的底部,将各二进制代码集中成霍夫曼代码。将在霍夫曼长度编码操作850中建立的霍夫曼长度字典619与编码的长度数据617相结合。霍夫曼长度字典619和编码的长度数据617的组合是经霍夫曼编码的长度文件618,在图6的描述中已讨论过。
在霍夫曼长度编码操作850后,霍夫曼偏移量编码操作852对在MSP偏移量储存操作816中建立的偏移量缓冲器的内容,即偏移量值的MSP,进行霍夫曼编码。霍夫曼偏移量编码操作852建立霍夫曼偏移量字典615,该字典提供对应于先前在储存操作816中储存的偏移量值的每个唯一的MSP的霍夫曼代码。以上述的在霍夫曼长度编码操作850中建立长度字典619的相同方式,创建霍夫曼偏移量字典615。对MSP偏移量储存操作816中建立的偏移量缓冲器进行编码,以建立编码的偏移量数据613。以类似于关于编码的长度数据617描述的方式,可以完成对该偏移量缓冲器的编码。将在霍夫曼偏移量编码操作852中建立的霍夫曼偏移量字典615与编码的偏移量数据613相结合。偏移量字典615与编码的偏移量数据613的组合包括经霍夫曼编码的偏移量文件614,如图6所示。
在建立了经霍夫曼编码的偏移量文件614和经霍夫曼编码的长度文件618后,输出操作854将霍夫曼编码偏移量文件614和霍夫曼编码长度文件618与简化的根/复制文件616相结合,以形成压缩的数据文件620。把该压缩数据文件620储存在存储器内,以待随后由解压器模块200使用该数据文件620,来重新恢复原来未处理的输入数据。
图9说明了由解压器模块200采用的解码过程的操作流程900的一个例子。在一个实施例中,这里称作为未打包字典实施例,所有的霍夫曼字典记录条目在继续解压前都是未打包的。在另一个实施例,这里称作为打包字典实施例,所有的霍夫曼编码数据是最初解码的。这样,解码和解压的次序一般是不严格的,而是可随实施例而改变。本领域的那些技术人员将认识到,这里描述的执行许多详细步骤的次序是可以改动的,而仍能获得上述解压的输出文件。
图9所示的实施例说明了一打包字典实施例。在图9所示的实施例中,当进行霍夫曼解码时,访问该打包的霍夫曼字典。在操作流程900的开始901处,读操作910读入含有根项和部分复制项的简化的根/复制文件616的第一个符号。然后,根项判断操作912判断在读操作910读入的符号是不是根项。如图8描述中所讨论的,符号应较佳地与指示符一起储存,该指示符表明该符号是根项还是复制项。在一个实施例中,单个指示符比特附加到简化的根/复制文件620中的每个根项和复制项,使得判断操作912能够读入该指示符比特,以判断该符号是根项还是复制项。例如,如果指示符比特是1,则该符号是复制项,而如果该指示符比特是0,则该符号是根项。
如果判断操作912判定在读操作910读入的符号是根项,则写操作914将该根项写入滑动窗缓冲器。写操作914中的滑动窗缓冲器是类似于图7描述中讨论的滑动窗的一滑动窗。为了使压缩数据中编码的长度值相配,压缩滑动窗缓冲器和解压滑动窗缓冲器的大小必须相同。写操作914较佳地将符号附加到滑动窗缓冲器的逻辑末端。当该缓冲器装满时,每当在写操作914中添加一个新符号时,就从该缓冲器移去缓冲器中的最早的符号。这样,该滑动窗缓冲器可以看作是一“先入先出”缓冲器。
在写操作914之后,输出操作916将该符号输出到一微处理器可读的数据文件,这里称作为解压的输出文件。如果在输出操作916前还未建立该解压的输出文件,则输出操作916将在写根项之前,建立或打开该解压的输出文件。如将讨论的,该输出操作将把从简化的根/复制文件616中的复制项解压的其它符号输出到该解压的输出文件。结果,在操作流900结束时,该解压的文件将含有原来输入到压缩器模块100的所有符号,如在图6、7和8描述中所讨论的。
在输出操作916后,完成判断操作918判断是否还有从简化的根/复制文件616待读入的任何符号。如果还有待读入的符号,则读操作910从该简化的根/复制文件616输入或读入下一个符号。然后,根项判断操作912判断读操作910中读入的该下一个符号是不是根符号。从而,包含操作910、912、914、916和918的循环一起对简化的根/复制文件616中含有的根项进行解压,并建立一滑动窗缓冲器,该滑动窗缓冲器用于对该简化根/复制文件616中的复制项进行解压。
又参阅判断操作912,如果判定在读操作910中先前读入的一个符号不是根项,那么它就是压缩的复制项。具体来说,如果读操作910中读入的符号不是根项,则假定是一复制项的偏移量值的最低有效部分(LSP),然后重建操作922用该LSP来重建该复制项,该复制项包括一偏移量值和一长度值。重建操作922中重建复制项一般涉及建立该复制项的偏移量值和长度值。建立偏移量值涉及将读操作910中读入的LSP与该偏移量值的最高有效部分(MSP)相结合。如已讨论的,该MSP是在压缩过程期间先前编码的,并储存在经霍夫曼编码的偏移量文件614中。在重建操作922中,通过对霍夫曼编码的偏移量文件614中的编码的偏移量数据613内的一条记录进行解码,获得该MSP。该重建操作922通过对先前储存在经霍夫曼编码的长度文件614中的编码的长度数据617的一条记录进行解码,获得该复制项的长度值。从而,为了重建该复制项,重建操作922解码两个值:一个是该偏移量值的编码的MSP,以及一个是编码的长度值。将在图10的描述中详细讨论这些值的解码过程,图10描述了能用于对MSP值和长度值进行解码的操作流程1000的实施例。通过使用一解码子程序,例如在操作流程1000中所示的程序,重建操作922产生一复制项。
一旦通过重建操作922重建了复制项,由恢复操作924使用该复制项,恢复由该复制项表示的原来的输入符号。在恢复操作924中,通过识别写操作914中建立的滑动窗缓冲器内的一匹配符号序列来建立一条符号序列。该匹配符号序列位于滑动窗缓冲器内的一偏移量处,该偏移量由重建操作922产生的该复制项的偏移量值给出。该符号序列的符号数由重建操作922产生的该复制项的长度值给出。在写操作914中,将恢复操作924中恢复的符号序列写到滑动窗缓冲器,并在输出操作916中输出到解压的输出文件。在输出操作916后,操作流程900继续进行到判断操作918。如果判断操作918判定已经处理了简化根/复制文件616中的所有符号,则解码过程已经完成,并且输出操作916将已建立一解压的输出文件,该文件是微处理器可读和可执行的。
图10说明了有关图9描述和显示的重建操作922的一个可能的操作流程1000。如所讨论的,经霍夫曼编码的偏移量文件614较佳地包括:一编码偏移量数据613,该偏移量数据613保持有复制项偏移量值的最高有效部分(MSP)的编码的版本;和一打包的霍夫曼偏移量字典615,用于对该编码的MSP进行解码。类似地,霍夫曼编码的长度文件618包括:编码的长度数据617,该长度数据617储存有复制项长度值的编码版本;和一打包的霍夫曼长度字典619,用于对编码长度值进行解码。偏移量和长度字典615和619含有所有可能的霍夫曼代码,以及由代码替代各个代码的相关长度(以比特为单位)和值(例如表1中的第二列),如图8的描述中所讨论的。对字典内的数据进行打包,使得各数据项的起点不需要落在字节(8比特)的边界处。相反,并排地打包诸比特,它们之间不会浪费存储器。结果,打包的字典仅需要最佳的小容量存储器。
在图8的实施例中,按将有关的复制项储存在简化根/复制文件616中的相同的次序,将编码的MSP和编码的长度值储存在各自的经霍夫曼编码的数据(613和617)中。结果,将简化根/复制文件616中的复制项按霍夫曼编码数据中的它们相关的编码值的次序排列。从而,一般每当从简化根/复制文件616恢复部分复制项时(诸如操作910),从各自的霍夫曼编码的数据(613和617)中恢复下一编码的MSP和下一编码的长度值,以重建该复制项。
在图10中,开始操作1002执行初始化处理。偏移量解码操作1004对从霍夫曼编码的偏移量文件614的编码偏移量数据613来的下一个编码的MSP进行解码。在一个实施例中,编码的MSP的长度不是储存在霍夫曼编码的偏移量文件614中。相反,每个可能代码与它的相关长度值一起储存在打包的霍夫曼偏移量字典615中。解码操作1004反复地从编码的偏移量数据613中读入并暂时储存诸比特。每当解码操作1004读入另一比特时,解码操作1004就搜索具有与读入的比特数相等的相关长度的霍夫曼偏移量字典615中的代码。如果霍夫曼偏移量字典615的代码之一与从编码偏移量数据613读入的比特相匹配,则从霍夫曼编码偏移量字典615读入由与代码相关的该复制项(例如在表1的第二列)替代的值。该替代的值表示该复制项的偏移量值的MSP。然后,预挂(prepend)操作1006将MSP预挂到读操作910中获得的LSP上。这样,预挂操作1006重建了该复制项的整个偏移量值。
在预挂操作1006之后,长度解码操作1008对与一复制项相关的编码长度值进行解码。从霍夫曼编码长度文件618的编码长度数据617读入该有关的编码长度值。在长度解码操作1008中,通过对编码长度值进行解码,获得解码的长度值。在这样的操作中,可以用与偏移量解码操作1004中描述的技术相类似的技术对编码长度值进行解码。长度解码操作1008反复地从编码长度数据617中每次读入一个比特,并计数读入的比特数。判断与储存在霍夫曼长度字典619中的代码相关的长度是否等读入的比特数。对于带有与读入比特数相等的相关长度值的任何代码,将该代码与从编码长度数据617中读入的比特数进行比较。如果代码之一匹配,则从霍夫曼长度字典619中恢复与匹配代码相关联的复制项的长度值(例如在表1的第二列)。恢复的复制项是该复制项的长度值,并且操作流程1000结束。
重要的是,通过使用霍夫曼偏移量字典615和霍夫曼长度字典619,霍夫曼解码过程所需的堆栈空间显著少于其它传统方法。霍夫曼字典可以看作是展平的霍夫曼树。由于在这里描述的实施中霍夫曼树是展平的,因此解码的计算机处理不要求“遍历”霍夫曼树。结果,在本发明的实施例中不需要多次堆栈弹出和堆栈压进,而多次堆栈弹出和堆栈压进对于树遍历方案来说是典型的。此外,由于较大可能的符号储存在霍夫曼字典615和619的开始部分,因此可使搜索字典中匹配代码的时间减到最少。
作为例子而不是限制,图11说明了诸如霍夫曼长度编码操作850之类的一种编码操作的打包输出1100以及由解压器模块200使用的一个例子。如上所述,编码操作的输出包括了一霍夫曼字典和一组霍夫曼编码数据,例如图6所示的霍夫曼长度字典619和编码长度数据617。图11说明了一实施例,通过将编码操作的输出进行打包,以达到进一步的压缩。
长度值的一示例性霍夫曼字典1102,类似于表1所示的,包括在图11的一张表中,以帮助读者理解打包字典1104。该霍夫曼字典1102包括一连串的长度值或MSP值(按十六进制符号表示)1106,代码长度(按二进制符号)1108,和对应的唯一的霍夫曼代码(按二进制符号)1110。每组长度或MSP值1106、代码长度1108和霍夫曼代码1110可以看作为该霍夫曼字典1102中的一条记录1112。
在图11中的表下示出霍夫曼树1102的打包霍夫曼字典1104形式。打包字典1104包括对应于每一条单独的字典记录1112的打包记录1114。如图11所示,打包的霍夫曼字典1104是连续的二进制数据流,然而,为了帮助读者,所显示的打包字典1104在每条打包记录1114之间带有一个空格。在该例子中,每一条打包记录1114的最初的8比特包括打包值1116(在图11中用黑体显示以帮助读者识别),并对应于长度或MSP值1106的二进制形式。本领域的技术人员将理解,虽然该例中用8个比特表示打包值1116,但是可以使用少些或多些比特,只要比特数足够表示具有霍夫曼代码1110的所有的值1106。
每条打包记录1114的后续的5个比特(图11中用下划线示出以帮助读者识别)是打包代码长度1118,并对应于那条记录1112的代码长度1108。同样,虽然该例子使用5个比特,但是可以使用任意比特数,只要能足够表示霍夫曼字典1102中最长的长度。
每一条打包记录1114的其余的比特(图11中用斜体字显示以帮助读者识别)是每条记录1112的相关的霍夫曼代码1110。如上面讨论的,打包记录1114间的各个霍夫曼代码1110的比特长度是不同的,并等于由每一先前的代码长度1116指出的值。因此,每一条打包记录1114的长短随每条记录1114中的霍夫曼代码1110的长短而变化。
图11中说明的例子中,在打包字典1104之后,霍夫曼编码操作输出打包的霍夫曼编码数据1120,该数据1120是编码数据的打包格式,编码数据例如图6的霍夫曼编码长度数据617。打包的霍夫曼编码数据1120独自包括唯一的霍夫曼代码流1110。为了帮助读者识别打包霍夫曼编码数据1120中的每个单独的霍夫曼代码1110,在每个霍夫曼代码1110之间插入一个空格。
图11还说明了怎样使用打包霍夫曼字典1104,从打包霍夫曼编码数据1120中获得原来的长度或MSP值1106。如上所讨论的,霍夫曼代码1110的特征是每个霍夫曼代码1110是唯一的。例如,由于‘100’是3比特长的二进制霍夫曼代码1110,没有其它的霍夫曼代码1110含有‘100’作为它前3比特。这种特征允许把打包的霍夫曼编码数据1120逐比特地读入到搜索缓冲器。在读入每个比特后,解压器模块200顺序地搜索和搜索缓冲器中当前含有的比特数具有相同代码长度1118的霍夫曼字典记录1114。如果找不到匹配的霍夫曼代码1110,则把霍夫曼代码数据1120中下一个比特读入到搜索缓冲器。然后,解压器模块200为一匹配的霍夫曼代码1110,用搜索缓冲器内当前的比特数搜索打包记录1114。重复该过程,直到搜索缓冲器的内容匹配于一霍夫曼代码1110为止。当搜索缓冲器的内容匹配于一霍夫曼代码1110时,解压器模块200为打包记录1114中的霍夫曼代码1110获得相应的长度或MSP值1116,从而将那个霍夫曼代码1110解码成它相应的值1116。在得到值1116后,清除搜索缓冲器,将打包霍夫曼编码数据1120的下一个比特读入搜索缓冲器,并重复搜索过程。
例如,现在看图11中打包的霍夫曼编码数据1120。解码器模块220将打包编码数据1120的第一个比特读入搜索缓冲器。解压器模块200将接着搜索打包字典1104,首先寻找长度值为1的长度代码。因为没有单个比特的霍夫曼代码1110,将停止搜索,并且解压器模块200将随后把打包霍夫曼编码数据1120的下一个比特读入搜索缓冲器。现在搜索缓冲器含有两比特代码‘11’。接着从打包字典1104内上次搜索停止的地方开始搜索打包字典1104。在打包字典1104的最初两比特长度霍夫曼代码1110是‘00’,该代码与搜索缓冲器内容不匹配。下一条打包记录1114含有3比特代码长度1118,因此解压器模块200应停止字典搜索,并将打包编码数据1120的下一个比特读入搜索缓冲器。搜索缓冲器现在含有3比特的代码‘111’。解压器模块200将从上次停止搜索的地方继续搜索打包字典1104。打包字典1104的下条打包记录1114具有长度3的代码长度1118,并且搜索缓冲器的内容与霍夫曼代码1110相匹配。此时,解压器模块200已经使霍夫曼编码数据1120中的霍夫曼代码1110匹配于打包字典1104中的霍夫曼代码1110。然后,解压器模块200从匹配的打包记录1114读入相应值1116,并且将它输出或储存以便以后使用。然后清除搜索缓冲器,并重复该处理过程,以寻找打包霍夫曼编码数据1120中的下一个霍夫曼代码1110,一直到对整个打包霍夫曼编码数据11120完成解码为止。
现在转到图12,说明了利用打包霍夫曼字典1204从打包霍夫曼编数据1220中获得长度或MSP值1216的一替代实施例1200。图12示出一打包霍夫曼字典1204和打包霍夫曼编码数据1220,为了举例,该字典1204和数据1220与图11中说明的相同。该打包字典1204同样能被看作含有对应于图11所示的每条单独的字典记录1112的打包记录1214。该打包霍夫曼字典1204是连续的二进制数据流,然而为了帮助读者,所示的打包字典1204在各条打包记录1214之间带有一个空格。与图11所示的例子相一致,每条打包记录1214的最初8个比特是打包的长度或MSP值1216(用黑体字显示以帮助读者识别),接着的5个比特是打包代码长度1218(用下划线示出),而每条打包记录1214余下的比特是相关的霍夫曼代码1210(用斜体字示出)。
在图12说明的实施例中,解压器模块200首先打开该打包的霍夫曼字典1204,建立未打包的字典1222。在读入打包霍夫曼字典1204的过程中建立该未打包字典1222。通过把该打包霍夫曼字典1204的每条打包记录1214打开成未打包记录1224,建立该未打包字典1222。通过将打包记录1214的打包值1216储存到存储器内,从代码长度1218中为那条打包记录1214确定霍夫曼代码1210的长度,并然后将未打包的霍夫曼代码1230储存进存储器,来打开一条打包记录1214,该霍夫曼代码1230是霍夫曼代码1210的一个8比特版本,其中霍夫曼代码1210是8比特未打包的霍曼代码1230的最高有效比特。例如,一个霍夫曼代码1210‘11010’将变成8比特的未打包霍夫曼代码1230‘11010000’。重复将打包记录1214打开成未打包记录1224的处理过程,一直到打开整个打包字典1204,并储存在存储器内为止。这样,未打包字典1222含有两项:打包值1216,和未打包霍夫曼代码1230。未打包字典1222与打包霍夫曼字典1204不同处在于:未打包字典1222的每一项储存为一个定长字。该例子将未打包字典1222的每项显示成8比特长,然而,应当注意,可以使用任意的固定长度,只要该长度等于或大于打包字典1204中最长项。因为未打包字典1222使用固定长度,就不再需要代码长度1218来识别每一条未打包记录1224的霍夫曼代码。
如下所述,可用该未打包字典1222从打包霍夫曼编码数据1220获得长度或MSP值。如上所讨论的,该霍夫曼代码1210的特征是每个代码是唯一的。因此,每个未打包的霍夫曼代码1230也将是唯一的。然后,使用未打包的字典1222的解压器模块200仅需要搜索未打包霍夫曼代码,一直到寻找到一个匹配为止。首先载入一8比特的搜索缓冲器,带有6比特‘0’,并然后读入霍夫曼编码数据1220的两个比特,作为该缓冲器的最高有效比特位。例如,把‘11’读入8比特的缓冲器,以获得‘11000000’。读入两个比特是因为在这个例子中,最短的霍夫曼代码1210为两比特长。接着,解压器模块200在未打包字典记录1224顺序地搜索一条匹配的8比特未打包的霍夫曼代码1230。如果没有找到匹配的未打包霍夫曼代码1230,则将霍夫曼编码数据1220下一比特读入8比特搜索缓冲器。然后,解压器模块200在未打包记录1224中搜索一条匹配的未打包的霍夫曼代码1230。如未找到匹配,则将另一比特读入该搜索缓冲器,并重复该处理过程,一直到搜索缓冲器的内容与一个未打包霍夫曼代码1230相匹配为止。当该搜索缓冲器的内容与一个未打包霍夫曼代码1230匹配时,解压器模块200对未打包记录1224中的匹配未打包霍夫曼代码1230获得对应的长度或MSP值1216,从而将打包霍夫曼编码数据1220的霍夫曼代码1210解码成它的相应值1216。在获得该值1216后,清除该搜索缓冲器并将打包霍夫曼编码数据1220的下两个比特读入该搜索缓冲器,重复执行该搜索处理。应当明白,上面讨论的8比特搜索缓冲器仅是示例性的。可以使用任意大小的搜索缓冲器,也可使用多个搜索缓冲器。
总之,本发明的一个实施例可以看作对一个数据输入文件(例如612)进行压缩,以建立一个压缩数据输出文件(例如620)的一种方法。该方法包括用滑动窗压缩方案顺序地检查数据输入文件(例如612),以创建根项(例如708)和复制项(例如710)。所建立的复制项的每一个均含有一长度值(例如732)和一偏移量值(例如730)。偏移量值(例如730)可再细分成最高有效部分和最低有效部分,由该方法不同地处理这两部分。该方法建立一个简化根/复制文件(例如616),该文件含有根项(例如708)和复制项(例如710)的偏移量值(例如730)的最低有效部分。该方法对复制项(例如710)的偏移量值(例如730)的最高有效部分进行压缩,建立一个压缩偏移量文件(例如614)。该方法还对复制项(例如710)的长度值(例如732)进行压缩,建立一个压缩长度文件(例如618)。作为该方法的一部分,该简化根/复制文件(例如616)、压缩偏移量文件(例如614)和压缩长度文件(例如618)相结合,产生压缩数据输出文件(例如620)。
另一个实施例可以看作一种数据解压方法,用于对包括一压缩长度文件(例如618)、一压缩偏移量文件(例如614)和一简化根/复制文件(例如616)的压缩数据输入文件(例如620)进行解压。该简化根/复制文件(例如616)具有根项(例如708)和压缩的复制项。每个压缩复制项是未压缩复制项(例如710)的一偏移量值(例如730)的最低有效部分。每个未压缩复制项(例如710)包括一长度值(例如732)和一偏移量值(例如730)。
该数据解压方法的一个步骤是接收压缩的数据输入文件(例如620)。该方法对压缩的长度文件(例如618)进行解压,获得长度值(例如732)。类似地,该方法对压缩偏移量文件(例如614)进行解压,获得偏移量值(例如730)的最高有效部分。该方法从该偏移量值(例如730)的最低有效部分、该偏移量值(例如730)的最高有效部分、和长度值(例如732)中形成未压缩的复制项(例如710)。该方法确定由未压缩复制项(例如710)标识的匹配数据串,并输出含有根项(例如708)和匹配数据串的一解压的数据输出文件。
另一个实施例可以看作一个数据存储设备(例如320),该设备含有微处理器(例如516),非易失性存储器(例如524),易失性存储器(例如530),储存在非易失性存储器(例如524)中的压缩的操作码文件(例如620),和用于对压缩操作码文件(例如620)进行解压的解压器模块(例如200),其中压缩的操作码文件(例如620)包括第一压缩文件(例如618)、第二压缩文件(例如614),和一简化的根/复制文件(例如616)。
当这样看时,第一压缩文件(例如618)可包括第一霍夫曼字典(例如619)和由第一霍夫曼字典(例如619)编码的霍夫曼编码长度数据(例如617)。类似地,第二压缩文件(例如614)可以包括第二霍夫曼字典(例如615)和由第二霍夫曼字典(例如615)编码的霍夫曼编码偏移量数据(例如613)。
又一个实施例可看作为一种系统,用于将数据存储设备(例如320)中的压缩的操作码文件(例如620)解压成可执行的操作码文件(例如612)。该数据存储设备(例如320)将压缩的操作码文件(例如620)储存在该数据存储设备(例如320)中的非易失性存储器(例如524)内。该压缩的操作码文件(例如620)包括一简化的根/复制文件(例如616)、第一霍夫曼字典(例如619)、由第一霍夫曼字典(例如619)编码的第一霍夫曼编码数据(例如617)、第二霍夫曼字典(例如615),和由第二霍夫曼字典(例如615)编码的第二霍夫曼编码数据(例如613)。该数据存储设备(例如320)还包括解压器装置(例如200),用于将压缩的操作码文件(例如620)解压成一个可执行的操作码(例如612)。此外,该解压器装置可包括一储存在非易失性存储器(例如524)内的可执行指令文件和用于执行指令的装置(如100),该可执行指令文件包括将压缩的操作码文件解压成可执行的操作码(例如612)的指令。
将清楚,可很好地采用本发明以达到这里提到的目标和优点,以及那些固有的优点。虽然出于本揭示的目的,已经描述了一目前较佳的实施例,但是各种改变和修改,例如在发出的文件内的特定数据块(例如第一霍夫曼树)的精确位置的变化,都在本发明的范畴内。例如,可将本发明的实施例用于在正常工作时重复启动和关机的任何小型的计算机外围设备中,例如光盘驱动器、磁带驱动器、磁盘驱动器、打印机和扫描仪等的外围设备。在处理能力有限的较小型的计算设备中,例如在个人数据助理、移动电话、和全球定位单元等设备中,这些实施例也是有用的。可以做许多其它的改变,对本领域的那些技术人员来说,这些改变是显而易见的,并且都落在所揭示的本发明的要旨内,并如同附加的权利要求中所定义的那样。
Claims (10)
1、一种对数据输入文件进行压缩,以建立压缩的数据输出文件的方法,其特征在于,该方法包括以下步骤:
a)用滑动窗压缩方案顺序地检查所述数据输入文件,以建立根项和复制项,所述复制项每项具有一长度值和一偏移量值,所述偏移量值的每一个具有最高有效部分和最低有效部分;
b)建立简化的根/复制文件,所述简化的根/复制文件包括所述根项和所述复制项的偏移量值的最低有效部分;
c)对所述复制项的偏移量值的最高有效部分进行压缩,以建立压缩的偏移量文件;
d)对所述复制项的长度值进行压缩,以建立压缩的长度文件;以及
e)将所述简化的根/复制文件、所述压缩的偏移量文件和所述压缩的长度文件相结合,以建立压缩的数据输出文件。
2、如权利要求1所述的方法,其特征在于:
所述压缩步骤c)是用霍夫曼编码算法执行的,并且所述压缩的偏移量文件包含第一霍夫曼字典和由所述第一霍夫曼字典编码的霍夫曼编码偏移量文件;以及
所述压缩步骤d)是用霍夫曼编码算法执行的,并且所述压缩的长度文件包含第二霍夫曼字典和由所述第二霍夫曼字典编码的霍夫曼编码长度文件。
3、如权利要求1所述的方法,其特征在于,所述数据输入文件包括磁盘驱动器的可执行的操作码。
4、一种用于对压缩的数据输入文件进行解压的数据解压方法,其特征在于,所述压缩数据输入文件包括一压缩长度文件、一压缩偏移量文件和一简化根/复制文件,所述简化根/复制文件具有根项和压缩复制项,每一个压缩复制项包括一未压缩复制项的偏移量值的最低有效部分,其中每个未压缩复制项包括一长度值和一偏移量值,所述方法包括以下步骤:
a)接收所述压缩的数据输入文件;
b)对所述压缩的长度文件进行解压,获得长度值;
c)对所述压缩的偏移量文件进行解压,获得所述偏移量值的最高有效部分;
f)从所述偏移量值的最低有效部分、所述偏移量值的最高有效部分和所述长度值中形成未压缩复制项;
g)确定由所述未压缩复制项标识的匹配数据串;
h)输出含有所述根项和匹配数据串的解压数据输出文件。
5、如权利要求4所述的方法,其特征在于,进一步包括以下步骤:
i)将所述长度值储存在一长度缓冲器内;及
j)将所述偏移量值的第二部分储存在一偏移量缓冲器内。
6、如权利要求4所述的方法,其特征在于,所述确定步骤g)进一步包括:
g)(1)将所述根项写入一滑动窗;及
g)(2)将所述匹配数据串写入该滑动窗。
7、如权利要求4所述的方法,其特征在于,所述压缩的偏移量文件包括第一霍夫曼字典和由所述第一霍夫曼字典编码的霍夫曼编码偏移量缓冲器文件,并且所述压缩的长度文件包括第二霍夫曼字典和由所述第二霍夫曼字典编码的霍夫曼编码长度缓冲器文件。
8、如权利要求4所述的方法,其特征在于,所述压缩的数据输入包括磁盘驱动器的压缩的操作码。
9、一种数据存储设备,其特征在于,所述数据存储装置包括:微处理器、非易失性存储器、易失性存储器、储存在非易失性存储器内的压缩的操作码文件、以及用于对压缩的操作码文件进行解压的解压器模块,其中所述压缩的操作码文件包括第一压缩文件、第二压缩文件和简化的根/复制文件。
10、如权利要求9所述的数据存储设备,其特征在于,所述第一压缩文件包括第一霍夫曼字典和由所述第一霍夫曼字典编码的霍夫曼编码长度数据,以及所述第二压缩文件包括第二霍夫曼字典和由所述第二霍夫曼字典编码的霍夫曼编码偏移量数据。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US22525600P | 2000-08-15 | 2000-08-15 | |
US60/225,256 | 2000-08-15 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1446404A true CN1446404A (zh) | 2003-10-01 |
Family
ID=22844176
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN01814126A Pending CN1446404A (zh) | 2000-08-15 | 2001-08-13 | 操作码的双模数据压缩 |
Country Status (7)
Country | Link |
---|---|
US (1) | US6411227B1 (zh) |
JP (1) | JP2004507145A (zh) |
KR (1) | KR100602394B1 (zh) |
CN (1) | CN1446404A (zh) |
DE (1) | DE10196513T1 (zh) |
GB (1) | GB2381358A (zh) |
WO (1) | WO2002015408A2 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112947266A (zh) * | 2021-04-30 | 2021-06-11 | 江苏航运职业技术学院 | 船舶动力装置远程监控通讯方法及系统 |
Families Citing this family (48)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030051005A1 (en) * | 2001-09-13 | 2003-03-13 | Burch Charles Carroll | Apparatus for encapsulating data within a self-defining file and method thereof |
US20030135851A1 (en) * | 2002-01-17 | 2003-07-17 | Laura Dickey | Method and system for concentration of applications during installation in target devices |
US6925467B2 (en) * | 2002-05-13 | 2005-08-02 | Innopath Software, Inc. | Byte-level file differencing and updating algorithms |
US7317799B2 (en) * | 2002-07-19 | 2008-01-08 | Vadium Technology, Inc. | Cryptographic key distribution using key folding |
US6836657B2 (en) * | 2002-11-12 | 2004-12-28 | Innopath Software, Inc. | Upgrading of electronic files including automatic recovery from failures and errors occurring during the upgrade |
US7028174B1 (en) * | 2002-09-30 | 2006-04-11 | Western Digital Technologies, Inc. | Disk drive employing a non-volatile serial semiconductor memory for storing a control program for a microprocessor |
US7096311B2 (en) | 2002-09-30 | 2006-08-22 | Innopath Software, Inc. | Updating electronic files using byte-level file differencing and updating algorithms |
US7003534B2 (en) * | 2002-11-18 | 2006-02-21 | Innopath Software, Inc. | Generating difference files using module information of embedded software components |
US7320010B2 (en) | 2002-11-18 | 2008-01-15 | Innopath Software, Inc. | Controlling updates of electronic files |
US7007049B2 (en) | 2002-11-18 | 2006-02-28 | Innopath Software, Inc. | Device memory management during electronic file updating |
US7844734B2 (en) * | 2002-11-18 | 2010-11-30 | Innopath Software, Inc. | Dynamic addressing (DA) using a centralized DA manager |
US20040098421A1 (en) * | 2002-11-18 | 2004-05-20 | Luosheng Peng | Scheduling updates of electronic files |
US7099884B2 (en) * | 2002-12-06 | 2006-08-29 | Innopath Software | System and method for data compression and decompression |
US20040125951A1 (en) * | 2002-12-26 | 2004-07-01 | Sun Microsystems, Inc., A Delaware Corporation | Bitstreaming for unreadable redundancy |
US7174052B2 (en) * | 2003-01-15 | 2007-02-06 | Conocophillips Company | Method and apparatus for fault-tolerant parallel computation |
US6750791B1 (en) * | 2003-02-07 | 2004-06-15 | Nokia Corporation | Method and device for text data compression |
US7031972B2 (en) | 2003-07-21 | 2006-04-18 | Innopath Software, Inc. | Algorithms for block-level code alignment of software binary files |
KR100871778B1 (ko) * | 2003-10-23 | 2008-12-05 | 이노패스 소프트웨어, 아이엔시. | 중앙집중형 동적 어드레싱 매니저를 이용한 동적 어드레싱방법 및 장치 |
US20050151836A1 (en) * | 2004-01-09 | 2005-07-14 | Ni Hong T. | Video conferencing system |
US7516451B2 (en) * | 2004-08-31 | 2009-04-07 | Innopath Software, Inc. | Maintaining mobile device electronic files including using difference files when upgrading |
JP4479530B2 (ja) * | 2004-12-28 | 2010-06-09 | カシオ電子工業株式会社 | データ圧縮装置、及びデータ復元装置 |
TWI318058B (en) * | 2005-01-26 | 2009-12-01 | Qisda Corp | Message compression method, system and machine-readable storage medium |
US20060236319A1 (en) * | 2005-04-15 | 2006-10-19 | Microsoft Corporation | Version control system |
US20060250352A1 (en) * | 2005-05-05 | 2006-11-09 | Mice Technoligies, Inc. | System and method for improved cursor functionality |
US8538969B2 (en) * | 2005-06-03 | 2013-09-17 | Adobe Systems Incorporated | Data format for website traffic statistics |
US20080001790A1 (en) * | 2006-06-30 | 2008-01-03 | Kyle Kirby | Method and system for enhancing data compression |
WO2008142800A1 (ja) * | 2007-05-24 | 2008-11-27 | Fujitsu Limited | 情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法 |
WO2008142799A1 (ja) * | 2007-05-24 | 2008-11-27 | Fujitsu Limited | 情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置 |
US9362948B2 (en) * | 2008-02-14 | 2016-06-07 | Broadcom Corporation | System, method, and computer program product for saving and restoring a compression/decompression state |
WO2009005758A2 (en) * | 2007-06-29 | 2009-01-08 | Rmi Corporation | System and method for compression processing within a compression engine |
US7836099B2 (en) * | 2007-07-31 | 2010-11-16 | Yahoo! Inc. | Mail compression scheme with individual message decompressability |
US8031959B2 (en) * | 2008-02-22 | 2011-10-04 | Himax Technologies Limited | Compression system for a bit-plane |
US8526290B2 (en) * | 2009-08-17 | 2013-09-03 | Mediatek Inc. | Data compression/decompression method, data decompression method, and optical disc drive utilizing the method |
CN101667843B (zh) * | 2009-09-22 | 2013-12-11 | 中兴通讯股份有限公司 | 嵌入式系统的数据压缩、及解压缩方法与装置 |
US8013762B2 (en) * | 2009-11-03 | 2011-09-06 | Seagate Technology Llc | Evaluating alternative encoding solutions during data compression |
JP5895545B2 (ja) * | 2012-01-17 | 2016-03-30 | 富士通株式会社 | プログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体 |
JP5846581B2 (ja) * | 2012-04-25 | 2016-01-20 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | コードを投機的に最適化するための方法、並びにそのコンピュータ及びコンピュータ・プログラム |
US8653992B1 (en) * | 2012-06-17 | 2014-02-18 | Google Inc. | Data compression optimization |
US9035809B2 (en) * | 2012-10-15 | 2015-05-19 | Seagate Technology Llc | Optimizing compression engine throughput via run pre-processing |
US8791843B2 (en) * | 2012-10-15 | 2014-07-29 | Lsi Corporation | Optimized bitstream encoding for compression |
US9264068B2 (en) | 2014-05-09 | 2016-02-16 | Micron Technology, Inc. | Deflate compression algorithm |
JP6467937B2 (ja) | 2015-01-21 | 2019-02-13 | 富士通株式会社 | 文書処理プログラム、情報処理装置および文書処理方法 |
CN104636140B (zh) * | 2015-01-29 | 2018-05-29 | 小米科技有限责任公司 | 固件压缩方法、固件解压方法和装置 |
US10102215B2 (en) * | 2015-03-27 | 2018-10-16 | Intel Corporation | Apparatus for hardware implementation of lossless data compression |
US10303759B2 (en) | 2015-12-03 | 2019-05-28 | International Business Machines Corporation | Memory preserving parse tree based compression with entropy coding |
US9787323B1 (en) * | 2016-12-11 | 2017-10-10 | Microsoft Technology Licensing, Llc | Huffman tree decompression |
US11509328B2 (en) * | 2018-05-31 | 2022-11-22 | Microsoft Technology Licensing, Llc | Computer data compression utilizing multiple symbol alphabets and dynamic binding of symbol alphabets |
US11502705B2 (en) * | 2019-06-21 | 2022-11-15 | Sap Se | Advanced database decompression |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4464650A (en) | 1981-08-10 | 1984-08-07 | Sperry Corporation | Apparatus and method for compressing data signals and restoring the compressed data signals |
US4558302A (en) | 1983-06-20 | 1985-12-10 | Sperry Corporation | High speed data compression and decompression apparatus and method |
GB2172127B (en) | 1985-03-06 | 1988-10-12 | Ferranti Plc | Data compression system |
US4906991A (en) | 1988-04-29 | 1990-03-06 | Xerox Corporation | Textual substitution data compression with finite length search windows |
US4961139A (en) | 1988-06-30 | 1990-10-02 | Hewlett-Packard Company | Data base management system for real-time applications |
US5016009A (en) | 1989-01-13 | 1991-05-14 | Stac, Inc. | Data compression apparatus and method |
US5532694A (en) | 1989-01-13 | 1996-07-02 | Stac Electronics, Inc. | Data compression apparatus and method using matching string searching and Huffman encoding |
US4955066A (en) | 1989-10-13 | 1990-09-04 | Microsoft Corporation | Compressing and decompressing text files |
US5001478A (en) | 1989-12-28 | 1991-03-19 | International Business Machines Corporation | Method of encoding compressed data |
US5051745A (en) | 1990-08-21 | 1991-09-24 | Pkware, Inc. | String searcher, and compressor using same |
US5140321A (en) | 1991-09-04 | 1992-08-18 | Prime Computer, Inc. | Data compression/decompression method and apparatus |
US5155484A (en) | 1991-09-13 | 1992-10-13 | Salient Software, Inc. | Fast data compressor with direct lookup table indexing into history buffer |
US5406279A (en) | 1992-09-02 | 1995-04-11 | Cirrus Logic, Inc. | General purpose, hash-based technique for single-pass lossless data compression |
US5455577A (en) | 1993-03-12 | 1995-10-03 | Microsoft Corporation | Method and system for data compression |
US5392036A (en) | 1993-10-28 | 1995-02-21 | Mitan Software International (1989) Ltd. | Efficient optimal data recopression method and apparatus |
JP3003915B2 (ja) * | 1994-12-26 | 2000-01-31 | シャープ株式会社 | 単語辞書検索装置 |
US5970177A (en) | 1995-06-07 | 1999-10-19 | America Online, Inc. | Data compression using selective encoding |
US5933104A (en) | 1995-11-22 | 1999-08-03 | Microsoft Corporation | Method and system for compression and decompression using variable-sized offset and length fields |
US5889961A (en) | 1996-06-27 | 1999-03-30 | International Business Machines Corporation | Disk drive having program to be executed by a second processor stored in a first processor's ROM in a compressed form |
US5951623A (en) * | 1996-08-06 | 1999-09-14 | Reynar; Jeffrey C. | Lempel- Ziv data compression technique utilizing a dictionary pre-filled with frequent letter combinations, words and/or phrases |
US6075470A (en) | 1998-02-26 | 2000-06-13 | Research In Motion Limited | Block-wise adaptive statistical data compressor |
US6037883A (en) | 1998-05-07 | 2000-03-14 | Microsoft Corporation | Efficient memory usage for two-pass compression |
US6393149B2 (en) * | 1998-09-17 | 2002-05-21 | Navigation Technologies Corp. | Method and system for compressing data and a geographic database formed therewith and methods for use thereof in a navigation application program |
US6145069A (en) | 1999-01-29 | 2000-11-07 | Interactive Silicon, Inc. | Parallel decompression and compression system and method for improving storage density and access speed for non-volatile memory and embedded memory devices |
-
2001
- 2001-08-13 WO PCT/US2001/025326 patent/WO2002015408A2/en active IP Right Grant
- 2001-08-13 GB GB0303353A patent/GB2381358A/en not_active Withdrawn
- 2001-08-13 JP JP2002520418A patent/JP2004507145A/ja active Pending
- 2001-08-13 CN CN01814126A patent/CN1446404A/zh active Pending
- 2001-08-13 DE DE10196513T patent/DE10196513T1/de not_active Withdrawn
- 2001-08-13 KR KR1020037002242A patent/KR100602394B1/ko not_active IP Right Cessation
- 2001-08-13 US US09/928,867 patent/US6411227B1/en not_active Expired - Fee Related
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112947266A (zh) * | 2021-04-30 | 2021-06-11 | 江苏航运职业技术学院 | 船舶动力装置远程监控通讯方法及系统 |
CN112947266B (zh) * | 2021-04-30 | 2021-09-28 | 江苏航运职业技术学院 | 船舶动力装置远程监控通讯方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
US6411227B1 (en) | 2002-06-25 |
US20020063641A1 (en) | 2002-05-30 |
WO2002015408A3 (en) | 2003-03-13 |
KR100602394B1 (ko) | 2006-07-20 |
GB2381358A (en) | 2003-04-30 |
WO2002015408A2 (en) | 2002-02-21 |
DE10196513T1 (de) | 2003-11-13 |
JP2004507145A (ja) | 2004-03-04 |
GB0303353D0 (en) | 2003-03-19 |
KR20030022896A (ko) | 2003-03-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1446404A (zh) | 操作码的双模数据压缩 | |
US7817069B2 (en) | Alternative encoding for LZSS output | |
US6657565B2 (en) | Method and system for improving lossless compression efficiency | |
US5406279A (en) | General purpose, hash-based technique for single-pass lossless data compression | |
US6597812B1 (en) | System and method for lossless data compression and decompression | |
CA2299902C (en) | Method and apparatus for data compression using fingerprinting | |
US20030048207A1 (en) | Sliding window compression method utilizing compression hotspots | |
EP0903866B1 (en) | Method and apparatus for data compression | |
JP3141002B2 (ja) | 符号化方法及びデータ圧縮器 | |
JPH0779262B2 (ja) | 圧縮データの符号化方法 | |
US7656320B2 (en) | Difference coding adaptive context model using counting | |
KR19980081237A (ko) | 데이터 압축/복원 방법 및 압축 장치 | |
US6518895B1 (en) | Approximate prefix coding for data compression | |
US20070146173A1 (en) | Coding apparatus, decoding apparatus, coding method, decoding method and program | |
EP0435802B1 (en) | Method of decompressing compressed data | |
EP0438954B1 (en) | Method of decoding compressed data | |
JP3242795B2 (ja) | データ処理装置及びデータ処理方法 | |
US7612692B2 (en) | Bidirectional context model for adaptive compression | |
JPH05241776A (ja) | データ圧縮方式 | |
Zia et al. | Two-level dictionary-based text compression scheme | |
JPH0946235A (ja) | データ圧縮装置 | |
EP0834832A2 (en) | Arithmetic image coding | |
JP3283150B2 (ja) | データ圧縮・圧縮解除法 | |
FI115937B (fi) | Häviötön datan tiivistäminen ja purkaminen | |
Rexline et al. | Semi-adaptive substitution coder for lossless text compression |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |