数据压缩的制作方法

文档序号:6516141阅读:188来源:国知局
专利名称:数据压缩的制作方法
技术领域
本发明一般涉及数据压缩领域,尤其涉及用于数据压缩的系统、服务器、方法和计算机可读媒质。
背景技术
用户能够以日益增长的各种方式访问越来越多的数据。例如,用户可访问网站,并接收音乐会事件的广播,即网播(webcast)。另外,用户可使用无线电话通过无线网络访问游戏和其它应用程序。为向用户提供这一数据,数据可通过网络从服务器流向客户机以供客户机呈现。用户然后可与所呈现的数据交互,如通过观看影片、听歌曲等等。
流传送数据向用户提供了增加的功能,使得用户可快速地接收数据。如果没有流传送,如果需要在由客户机输出之前从服务器接收所有的数据量,则用户会在客户机上呈现数据时经受延迟。通过流传送数据,可减少用户所遇到的延迟。数据流传送可用于提供数据的“实时”呈现。
为流传送数据,一般使用分组以流传送或连续的方式将数据从服务器发送,以当数据到达时在客户机上呈现,这与在包括数据的整个文件在客户机上可用之前不呈现数据相反。流传送可用于各种类型的数据,如视频数据、音频数据、媒体数据等等。视频数据流提供了“移动图像”的序列,这些图像被发送,并在到达时被呈现。类似地,音频数据流提供了当音频数据到达时播放的声音数据。媒体数据流包括音频和视频数据两者。
可压缩流传送数据以有效地将数据通过网络从服务器流到客户机,并提高流数据的效用。例如,通信上将服务器耦合至客户机的网络可具有有限的带宽。有限带宽会限制在任何一个时刻从服务器传递到客户机的数据量,并因此限制了在通过网络流传送数据时向客户机提供的功能。例如,由于有限的带宽,流传送的视频数据可被限制到较低的分辨率,而如果使用了更高带宽的网络,情况则相反。因此,期望较高分辨率流视频数据的用户可能被强迫购买较高带宽的连接。通过压缩流数据,可在任何一个时刻通过低带宽网络传输更多的数据,并因此提高流数据的效用。
然而,当压缩数据时,会遇到另外的问题,这与压缩整个数据集相反,如块压缩。例如,为一次压缩整个影片,压缩例程可检查构成该影片的整个数据量,以压缩数据。压缩例程可提供遍及构成该影片的数据所包括的常见序列的表示。然而,可提供流数据用于数据的“实时”呈现。因此,可能有有限量的时间来分析流数据,以提供客户机对数据的实时呈现。另外,在任何一个时候可能有有限量的数据可用于压缩以提供公共序列的表示。
因此,对数据压缩有不断的需求。

发明内容
描述了数据压缩。在一个示例性实施例中,压缩模块由服务器执行,以压缩流到客户机的数据,如响应于来自客户机的远程访问请求而发送的数据、终端服务环境中的数据等等。压缩模块采用包括先前流到客户机的数据的历史缓冲区。当被执行时,压缩模块将要流传送的数据中的序列与历史缓冲区中的一个或多个序列相比较,以找出匹配的序列。为在历史缓冲区中定位序列,采用了具有多个条目的查找表,每一个条目都可由多个索引之一发现。每一条目涉及历史缓冲区中是否有对应的索引,如果有,则还引用历史缓冲区中该对应索引的一个或多个位置。因此,压缩模块可使用要流传送的数据中的一初始序列作为查找表中的索引,以找出历史缓冲区中的匹配索引。数据中的该匹配序列然后可用描述历史缓冲区的匹配序列的位置和长度的表示来替换,以形成流到客户机的经压缩的数据。
在另一实现中,一种方法包括接收指示用于通过网络将数据从服务器提供的终端服务传递到客户机的资源的可用性的反馈,以及响应于该反馈调整用于压缩数据的压缩例程的一个或多个参数。
在另外一个实现中,一种方法包括在服务器处从客户机接收对通过服务器远程访问可用应用程序或文件的请求。确定用于响应于该请求通过网络传递数据的资源的可用性。基于确定的可用性调整用于压缩数据的压缩例程的一个或多个参数。


图1是示出数据通过网络从服务器流到客户机的环境的一个示例性实现的说明。
图2是更详细地示出图1的服务器和客户机的示例性实现的说明。
图3是描述配置用于流传送数据供压缩的示例性过程的流程图。
图4是描述一个示例性过程的流程图,其中,被配置成包括对要流传送的分组的引用的图3的查找表用于压缩分组。
图5是描述一个示例性过程的流程图,其中,图4的已压缩分组由客户机通过执行一解压模块来解压。
图6是一个示例性实现的说明,其中,在历史缓冲区中使用一滑动窗以包括要流传送的数据。
图7是描述其中进一步优化流数据的压缩的一个示例性实现的过程的流程图。
图8是一个示例性实现的说明,其中,优化序列的压缩以进一步优化数据压缩。
图9是一个示例性实现的系统的说明,其中,响应于从系统接收的返回动态地调整压缩。
在所讨论的实例中,相同的标号用于参照相同的结构和组件。
具体实施例方式
综述描述了数据压缩。在一个示例性实现中,由服务器执行一压缩模块,以压缩用于从服务器流到客户机的数据。该压缩模块采用一包括先前流到客户机的数据的历史缓冲区。当被执行时,该压缩模块将要流传送的数据中的序列与历史缓冲区中的一个或多个序列进行比较,以找出匹配序列。为在历史缓冲区中定位序列,采用一具有多个条目的查找表。每一条目可使用多个索引中的特定一个来发现。每一条目涉及对应的索引是否位于历史缓冲区中,并且如果是,则还引用对应索引在历史缓冲区中的一个或多个位置。因此,压缩模块可使用要流传送的数据中的一初始序列,作为查找表中的索引以找出条目。以这一方式,压缩模块可快速地定位具有初始序列的历史缓冲区中的每一位置,而无需为要流传送的数据中的每一序列单独比较历史缓冲区中的每一序列。
如果匹配索引的对应条目引用了多个位置,则压缩模块通过将每一位置上具有匹配索引的序列与包括初始序列的数据中的序列进行比较,来导出匹配序列。数据中的该匹配序列然后可用描述历史缓冲区中匹配序列的位置和长度的表示来表示。然后可形成包括该表示的已压缩数据。已压缩数据然后流到客户机。客户机通过使用同样包括先前从服务器流到客户机的数据的历史缓冲区来解压已压缩数据。客户机通过执行解压模块,使用由该表示指示的长度和位置找出客户机历史缓冲区中的匹配序列,以重建该数据。以这一方式,提供了一种无损数据压缩技术,使得可在没有丢失数据的情况下压缩和解压数据。例如,可使用该数据压缩技术压缩和解压视频数据,而不会丢失数据部分,由此保留了视频数据的分辨率。
示例性环境图1是示出其中数据通过网络106从服务器102流到客户机104的环境100的示例性实现的说明。客户机104可用各种方法来配置。例如,客户机104可被配置为能够通过网络通信的设备,如所示的台式机、移动站、娱乐设施、机顶盒、无线电话等等。客户机104也可涉及操作客户机104的个人和/或实体。换言之,客户机104可描述包括用户和/或机器的逻辑客户机。尽管示出了一个客户机104,然而多个客户机可通信上耦合至网络106。网络106被示出为因特网,并也可包括各种其它网络,如内联网、有线或无线电话网络等等。
服务器102被配置成通过网络106将数据流到客户机104。服务器102可提供各种流数据,以供客户机104呈现。在一个实现中,服务器102可提供流到客户机104的音乐会的网播。当由客户机104呈现时,用户可观看并倾听网播。在另一实现中,客户机104可接收包括从服务器102流出的歌曲的数据,以供客户机104输出。
在另外一个实现中,服务器102也可提供用于远程应用程序执行的终端服务。例如,服务器102可包括多个应用程序108(1)、……、108(n)、……、108(N),其中,“n”可以是从2到“N”的任何整数。应用程序108(1)-108(N)中的每一个在服务器102上执行。服务器102通过网络106将屏幕信息流到客户机104,该屏幕信息是通过执行应用程序108(1)-108(N)来提供的。例如,屏幕信息可包括由操作系统提供的桌面和显示涉及文字处理程序的执行的信息的窗口的显示,以及由操作系统和/或文字处理程序提供的音频信息。
从服务器102流出的屏幕信息由客户机104呈现,以供用户观看。用户可与客户机104交互,以使用客户机104的输入设备,如鼠标108和/或键盘110来提供输入。输入可对应于呈现的屏幕信息,如通过使用键盘110提供的用于文字处理程序的文本输入。输入通过网络106从客户机104传递到服务器102。当由服务器102接收时,输入可在执行多个应用程序108(1)-108(N)时使用。例如,文字处理程序可接收用于包括在文档中的文本输入,并将屏幕信息流到客户机104以说明该文档具有包括的文本。通过执行服务器102上的应用程序108(1)-108(N)并将屏幕信息流到客户机104,客户机104可访问客户机104自身上以其它方式可能不可用的功能。
例如,客户机104可被配置成“瘦”客户机,如具有有限的处理和/或存储器资源。然而,服务器102可以是特征丰富的,如通过具有比客户机104更多的处理和/或存储器资源量。因此,服务器102可执行客户机104无法执行和/或由客户机104以较慢的方式执行的应用程序。服务器102通过向客户机104发送屏幕信息来向客户机104提供一个或多个应用程序108(1)-108(N)的执行结果,并通过网络106从客户机104接收输入。以这一方式,由服务器102提供的功能,如处理资源、存储器资源和多个应用程序108(1)-108(N)可被提供给否则将会无法访问该功能的客户机104。
为提供服务器102和客户机104之间通过网络的通信,服务器102和客户机104分别实现远程桌面协议(RDP)112、114。RDP 112、114被设计成如上所述地通过网络连接向应用程序108(1)-108(N)提供远程显示和输入能力。例如,RDP可用于允许携带从服务器102到客户机104的设备通信和呈现数据的单独的虚拟信道,以及从客户机104传递到服务器102的经加密的输入。
RDP 112、114可也通过在服务器102和客户机104上分别包括压缩和解压模块116、118来提供带宽的减少。压缩模块116可由服务器102通过实现RDP 112来执行,以在数据通过网络106流传送之前压缩它。类似地,解压模块可由客户机104通过实现RDP 114来执行,以解压通过网络106从服务器102流出的已压缩数据。
当被执行时,压缩和解压模块116、118分别压缩和解压通过网络106流传送的数据。如上所述,流数据的压缩和解压会导致一个独特的问题,与一次压缩和解压整个数据集,即块压缩相反。例如,数据可“实时”地流传送,使得流传送数据时所遇到的延迟会降低数据的有用性。压缩和解压模块116、118解决了流数据的这一独特的问题,并由此提供了已压缩数据通过网络106的流传送,如参考图3到5更详细描述的。
通过使用终端服务(TS),客户机104可访问安装在服务器102上的一个或多个应用程序108(1)-108(N)、执行服务器102上的应用程序、以及在客户机104上显示应用程序用户界面(UI)。由于应用程序108(1)-108(N)在服务器102上执行,TS允许客户机104利用企业基础结构资源,而与客户机104是否具有执行本地在客户机104本身上的资源的硬件和软件无关。
尽管在由服务器102执行多个应用程序108(1)-108(N)的终端服务环境中描述了客户机104,然而客户机104也可执行多个应用程序120(1)、……、120(m)、……、120(M)中的一个或多个。例如,应用程序120(1)-120(M)之一可提供一接口,它结合RDP 114使用,以呈现供用户观看的数据,并从用户接收输入,如从鼠标108和/或键盘110接收输入。另外,尽管压缩和解压模块116、118被示出为相应的RDP 112、114的一部分,然而压缩和解压模块116、118可被配置成独立的软件组件,它们被执行来分别压缩和解压流数据。
另外,尽管以下讨论的部分描述了终端服务环境中压缩的使用,然而此处所描述的压缩和解压技术也可用于各种其它环境。例如,压缩和解压技术可用于压缩远程访问环境中使用的数据。远程访问描述了从遥远的距离访问计算机或网络的能力。例如,企业的远程办公室可能期望接入企业网络,并使用远程访问来获取诸如通过电话网络、因特网等对其上包含的文件和应用程序的访问权限。服务器102可被配置成具有关联的软件的远程访问服务器,该软件被设立以处理远程地寻求接入网络的客户机。在一个实现中,远程访问服务器包括用于安全性的防火墙服务器,以及用于将远程访问请求转发到网络的其它部分的路由器。远程访问服务器也可用作虚拟专用网络(VPN)的一部分。
图2是更详细地示出图1的服务器102和客户机104的示例性实现200的说明。服务器102包括处理器202和存储器204。RDP 112及其相应的压缩模块116被示出为在处理器202上执行,并可储存在存储器204中。类似地,客户机104包括处理器206和存储器208。RDP 114及其相应的解压模块118被示出为在处理器206上执行,并可储存在存储器208中。
要从服务器102流到客户机104的数据可从各种来源提供,如执行一个或多个应用程序108(1)-108(N)、从诸如视频摄像机、麦克风的输入设备210接收,等等。压缩模块116在服务器102的处理器202上执行,以压缩流到客户机104的数据。数据可以分组的形式从服务器102流到客户机104。
例如,压缩模块116可接收具有给定长度的未压缩序列的数据,并试图将该序列向下压缩成一较小的(现在已压缩)的长度,如具有更少的字节、比特等等。压缩模块116可通过用一种表示来替换序列而在每一分组的基础上压缩数据,该表示在储存时使用比被替换的序列更少的存储器资源,如更少的字节。
如果压缩模块116能够压缩序列,则将已压缩的数据发送到RDP连接的端点,即客户机104的RDP 114。解压模块118由客户机104执行,以解压已压缩数据来重建该数据。在压缩模块116无法压缩数据的情况下,数据可以未压缩形式,即文字序列(literal sequence)流到客户机104。压缩模块116然后可由服务器102执行,以试图压缩后一序列。
用于压缩数据的基本操作涉及要压缩的数据中的序列与已在过去流传送的序列之间的模式匹配。为实现这一目的,压缩模块116维护一包含先前流到客户机104的数据的历史缓冲区212。当被执行时,压缩模块116将要流传送的数据中的序列与包括在已流到客户机104的数据中的一个或多个序列进行匹配。要流传送的数据中匹配历史缓冲区中的序列的序列然后可通过使用引用历史缓冲区212中的匹配序列的一个或多个表示来表示。该表示可以小于即使用更少的存储器资源用于储存要压缩的实际序列,即匹配序列的存储器资源。这有效地减少了包括在流数据中的数据量。
为说明使用历史缓冲区212的模式匹配的一个基本实例,假定历史缓冲区212包含以下序列1 2 7 4 5 6 3 9 4 5 1 4 9 1压缩模块116在服务器102的处理器202上执行,并接收以下序列4 5 9 7 4 5 6 3 9 4 5 1 4 6当被执行时,压缩模块116找出历史缓冲区中匹配要压缩的数据中的序列的最长序列,即匹配序列。在本情形中,出现在历史缓冲区中的匹配序列在下面用粗体显示。匹配序列是10字节长,并从离历史缓冲区212的起始处三个字节之处开始(从左边开始,并从零算起)。
4 5 9 7 4 5 6 3 9 4 5 1 4 6由此,当被执行时,压缩模块116可通过将要流传送的数据表示如下来产生已压缩数据4 5 9(从离缓冲区的起始处三个字节之处开始的长度为10字节的匹配)6通过引用历史缓冲区中的匹配序列,服务器102不需要重新发送已流到客户机104的序列。由此,压缩模块116通过找出要流传送的数据中的重复模式,并用当通过网络106发送时使用更少存储器资源和带宽的表示来替换重复模式,即匹配序列,来压缩要流传送的数据。
为解压已压缩数据,客户机104包括解压模块118和历史缓冲区214。与服务器102的历史缓冲区212一样,客户机104的历史缓冲区214储存先前流传送的数据。因此,当由客户机104执行时,解压模块118可通过使用历史缓冲区214来解压流到客户机104的已压缩数据。继续前一实例,假定客户机104接收已压缩数据,示出如下4 5 9(从离缓冲区的起始处三个字节之处开始的长度为10字节的匹配)6基于包括在已压缩数据中的表示,当被执行时,解压模块118可从历史缓冲区214中检索已压缩序列,它在下面用粗体显示4 5 9 7 4 5 6 3 9 4 5 1 4 6由此,解压模块118可通过使用历史缓冲区214来解压已压缩的串。
服务器102也可包括查找表216,以找出历史缓冲区212中的匹配序列。例如,查找表216可包括多个条目,其每一个可由多个索引的对应的一个发现。每一条目描述历史缓冲区212中具有对应索引的每一位置。由此,当由服务器102执行时,压缩模块116可使用查找表216来快速定位历史缓冲区212中的特定序列。对查找表216和历史缓冲区212的进一步讨论可参考图3-4找到。
服务器102也可使用编码技术来进一步压缩流传送的数据,如哈夫曼编码、算术编码、前缀编码和马尔可夫编码。例如,要流传送的数据可包括不匹配历史缓冲区中的序列的序列。这些序列可被称为“文字”序列。通过使用哈夫曼编码,数据中部分或所有文字序列可被压缩以进一步压缩数据。例如,哈夫曼编码可用一出现频率表开始,该表关系到要被进一步压缩的每一文字序列的出现频率。出现频率表可从数据本身和/或代表性数据中生成。例如,文字序列的出现频率可通过处理先前流传送的分组来获取,然后用于处理每一后续分组。
例如,可向每一文字序列分配一唯一地表示该特定文字序列的可变长度串,如唯一的前缀。该可变长度串然后被排列成树以分别编码和解码每一文字序列和表示。为编码文字序列,在树中定位要编码的文字序列。树中用于定位包括该文字序列的叶的分支用于编码该文字序列,即,提供该文字序列的表示。例如,树中用于哈夫曼编码的每一分支可由一输出字母表的码元来标记,如比特0和1,使得编码是从树的根到要编码的文字序列的路径上的分支标记的枚举。解码每一表示是通过基于可变长度串中每一连续值从其起点开始通过分支向下遍历到树的叶,直到到达包括文字序列的树叶为止来执行的。
尽管描述了文字序列的哈夫曼编码,然而可使用哈夫曼编码来进一步压缩各种数据。例如,哈夫曼表218可对文字222序列和后指针(backpointer)224两者进行编码。如上所述,文字序列包括未在历史缓冲区212中找到的序列。因此,通过使用哈夫曼表218,文字222序列可被压缩。哈夫曼表218也可用于压缩后指针224。后指针224描述了历史缓冲区212中的特定序列的位置。例如,如上所述,数据中匹配历史缓冲区212中的序列的序列,即匹配序列,可被描述为“从离缓冲区的起始处Y字节之处开始的长度为X字节的匹配”。后指针224描述了历史缓冲区212中的匹配序列的位置,即Y字节。哈夫曼表220可用于压缩匹配序列的长度226,即X字节。
为解压从服务器102流到客户机104的已压缩数据,由客户机104使用分别对应于服务器102的哈夫曼表218、220的哈夫曼表228、230来执行解压模块。例如,哈夫曼表228可用于解压文字232序列和后指针,而哈夫曼表230可用于解压匹配序列的长度226。对哈夫曼表的进一步讨论可参考图7找到。
服务器102和客户机104也可包括相应的最近使用(LRU)表236、238。LRU表236、238的每一个可用于基于后指针是否为“最近使用”后指针之一来进一步编码后指针。例如,LRU表236可用于对最后四个后指针的每一个分别提供LRU表示。LRU表示用作在LRU表236中定位特定后指针的索引。以这一方式,重复的后指针可被进一步压缩。对LRU表的进一步讨论可参考图7找到。
尽管描述了从服务器102流到客户机104的数据的压缩,然而客户机104也可压缩数据并将其流回服务器102。另外,尽管以下讨论描述了与从服务器102流到客户机104的分组有关的数据的压缩,然而可使用各种数据集合来压缩数据,如子分组字节序列、多分组等等。此外,尽管以下讨论描述了字节序列,然而也可构想数据中的其它序列,如比特。
示例性过程图3是描述示例性过程300的流程图,其中,配置流数据用于压缩。在块302,向历史缓冲区212添加数据。例如,历史缓冲区212可包括多个分组304(1)、304(2),它们通过网络106从图2的服务器102流到和/或将要流到客户机104。在另一实现中,分组304(1)、304(2)可对应于先前通过执行压缩模块116处理的数据。
服务器102接收要流传送的分组304(3)。当由服务器102执行时,压缩模块116将分组304(3)添加到历史缓冲区212,使得历史缓冲区包括流传送的分组304(1)、304(2)和将要流传送的分组304(3)。
在块306,当由服务器102执行时,压缩模块116更新查找表216以引用添加的数据,即分组304(3)。查找表216被配置成包括多个索引308(k),其中,“k”可以是从“1”到“K”的任何索引。每一索引308(k)用于发现查找表216中多个条目的相应的一个。每一条目涉及多个索引308(k)的对应的一个是否位于历史缓冲区212中,并且如果是,引用对应的索引308(k)在历史缓冲区212中的一个或多个位置。例如,多个条目之一可引用历史缓冲区中具有索引308(k)的对应的一个的多个位置。多个位置的每一个被示出为通过使用多个散列链310(k)的对应的一个来描述。
例如,索引308(k)被示出为具有“4 5”的序列。查找表216中索引308(k)的对应条目,即散列链310(k)描述了历史缓冲区212中索引308(k)“4 5”的每一位置。例如,分组304(1)在图3中被示出为具有以下序列0 1 2 3 4 5 6 7分组304(2)在图3中被示出为具有以下序列8 9 4 5 3 1 3 0要流到图2的客户机104的分组304(3)在图3中被示出为具有以下序列4 5 6 7 0 8 2 4分组304(1)-304(3)可以在历史缓冲区中顺序地排列,使得观察到以下序列0 1 2 3 4 5 6 7 8 9 4 5 3 1 3 0 4 5 6 7 0 8 2 4散列链310(k)描述了历史缓冲区212中索引308(k)“4 5”的每一位置。每一位置可用各种方法来描述。例如,当从历史缓冲区212的起始开始,以数字零开始计数时,位置可被描述为第一类型序列的位置。散列链310(k)描述了历史缓冲区212中离序列的起始处16字节之处的索引308(k)“4 5”的第一位置,如在图3中由从散列链310(k)中的“16”到分组304(3)的起始的虚线示出的。类似地,散列链310(k)描述了历史缓冲区212中离序列的起始处10字节的索引308(k)“4 5”的第二位置,由图3中从散列链310(k)中的“10”到分组304(2)的第三字节的虚线示出。此外,散列链310(k)包括历史缓冲区中4字节处的索引308(k)“4 5”的第三且最终的位置。由此,查找表216包括索引310(k),如“4 5”,它具有引用描述索引308(k)在历史缓冲区212中的每一位置,如4、10、16的散列链310(k)。通过更新查找表216,当被执行时,压缩模块116可压缩数据以用更有效的方式来流传送,如下文参考图4更详细描述的。
尽管在图3中示出每一索引308(k)具有多个散列链310(k)中对应的一个,然而可能会有索引308(k)没有对应的散列链的情况。例如,在某些情形下,历史缓冲区212可能不包括索引。因此,查找表216中对应于该索引的条目可能不包括散列链。换言之,该索引的散列链的值为零,即,历史缓冲区212中没有包括该对应索引的位置。另外,尽管多个散列链310(k)的每一个被示出为包括在查找表216中,一个或多个散列链310(k)可用各种方式来提供。例如,查找表216中的每一条目可包括指向一对应散列链的指针,该对应散列链被配置为与查找表216分离的数组。
图4是描述了一个示例性过程400的流程图,其中,被配置成包括对要流传送的分组304(3)的引用的图3的查找表216用于压缩分组304(3)。在块402,当被执行时,压缩模块116开始将所添加的数据,即分组304(3)的当前指针404指向图3的块302处的历史缓冲区212。
在块406,由服务器102执行压缩模块116,以找出查找表216中匹配当前指针404处的初始序列的索引。例如,压缩模块116可使用当前指针404处由两个字节,如“4 5”组成的初始序列,以找出多个索引308(k)中匹配该初始序列的那一个。在本示例中,查找表216的索引308(k)“4 5”匹配历史缓冲区212中当前指针404处的初始序列“4 5”。索引308(k)具有查找表216中引用描述历史缓冲区212中索引“4 5”308(k)的每一位置的散列链310(k)的对应的条目。因此,该对应条目描述了历史缓冲区212中初始序列的每一位置。
如果匹配索引308(k)的对应条目引用多个位置,则将历史缓冲区中具有索引308(k)“4 5”的每一位置的序列与数据中具有当前指针404处的初始序列的序列进行比较。例如,当前指针404处,即历史缓冲区212中的位置“16”处的初始序列“4 5”,以及历史缓冲区212中位置“10”的序列具有长度为“2”,即,每一位置上字节序列中仅前两个字节相互匹配。如上所述,本示例中,散列链310(k)中的位置通过从历史缓冲区212的起始开始,从零开始计数来描述。当前指针404处的初始序列和历史缓冲区212的位置“4”处的序列具有长度为“4”。换言之,位置“4”处的字节序列中的四个字节与位置“16”处的序列中的四个字节相匹配。以这一方式,从计算的长度导出匹配序列“4 5 6 7”。为找出最优匹配序列,可将散列链310(k)中的每一位置与要压缩的数据的序列,即分组304(3)进行比较,直到计算了最大长度和/或达到阈值,如参考图7更详细描述的。为优化比较,可首先比较序列中的下一字节,如历史缓冲区212中初始序列之后的字节或索引,因为从比较中已知,前两个字节匹配。基于序列中“下一”字节的比较的另外的讨论可以参考图8找到。
在块408,用形成压缩数据所使用的表示来表示匹配序列。例如,分组304(3)中的匹配序列“4 5 6 7”可用描述匹配序列的长度以及匹配序列在历史缓冲区212中的位置的表示来表示。该表示可被格式化为元组,即具有指定的顺序的集合,它被格式化为{后指针,长度}。后指针可将匹配序列的相对位置描述为历史缓冲区中的偏移。例如,后指针可将相对位置描述为历史缓冲区中匹配序列的绝对位置和当前指针404的绝对位置之间的偏移。在本示例中,匹配序列的绝对位置是在历史缓冲区212的位置4处,而当前指针404的绝对位置是“16”。因此,匹配序列的相对位置是离当前指针404 12字节之处。长度描述了匹配序列的长度,如“4”。由此,分组304(3)可通过用表示“{12,4}”表示匹配序列“4 5 6 7”来压缩,以形成已压缩数据,如分组410。在另一实现中,匹配序列的位置可根据匹配序列在历史缓冲区中的绝对位置,如位置4来提供。
由此,查找表216可提供历史缓冲区212中的每一索引308(k)的每一位置。因此,当执行压缩模块116时,可在历史缓冲区212中找到初始序列的每一位置,而无需“步查(walk)”历史缓冲区212中的每一个别比特或字节来找出匹配序列。由此,压缩模块116可有效地压缩要流传送的数据。
图5是描述一个示例性实现的过程500的流程图,其中,图4的已压缩数据由客户机104通过执行解压模块128来解压。在块502,客户机104接收已压缩数据,如分组410,它从图4的服务器120流到客户机104。
在块504,当被执行时,解压模块218找出客户机104的历史缓冲区214中的匹配序列。客户机104的历史缓冲区214与服务器102的历史缓冲区212一样可包括从服务器102流到客户机104的数据。由此,客户机104的历史缓冲区214在形成已压缩数据,如分组410之前匹配服务器102的历史缓冲区212。因此,当被执行时,解压模块118可根据描述服务器历史缓冲区212中的匹配序列的长度和位置的描述来找出客户机104的历史缓冲区214中的匹配序列。继续上述示例,在位置“12”处找到匹配序列“4 5 6 7”,它是上述的相对位置。
在块506,当被执行时,解压模块118用匹配序列替换该表示,以重建数据。例如,表示“{12,4}”用匹配字节序列“4 5 6 7”来替换,以形成包括序列“4 5 67 0 8 2 4”的分组508,该序列与在图4的块408处压缩的分组304(3)的序列相匹配。例如,已压缩数据可通过形成包括替换匹配序列的表示的一组新数据,来从要流传送的数据中形成。由此,如本示例中所示的,客户机104可解压已压缩数据,而不使用查找表216。因此,即使当客户机104与服务器102相比减少了硬件和/或软件资源,所流传送的已压缩数据也可由客户机104解压。
在分别参考图3-4所描述的示例性过程300、400中,配置查找表216,使得多个索引308(k)的每一个包括两个字节。因此,可向查找表216提供描述主机缓冲区212中的每一两字节序列的65,536个对应条目。这使初始序列可直接在查找表216中使用。换言之,不转换初始序列以用于查找表216来发现对应条目。尽管描述了具有两个字节的索引308(k),然而可使用各种不同的索引长度,如三字节序列、四字节序列等等。
图6是示例性实现600的说明,其中,在历史缓冲区212中使用了滑动窗来包括要流传送的数据。在参考图3所讨论的实现中,向历史缓冲区212添加分组304(3)。然后更新查找表216以引用分组304(3)。然而,历史缓冲区212可能具有有限量的存储。因此,采用了滑动窗来包括历史缓冲区212中新添加的数据。
例如,历史缓冲区212可包括序列602,作为图3的块302处添加分组304(3)的结果。本示例中历史缓冲区212可储存最大24字节。因此,为添加具有八个字节的序列604,执行压缩模块116以从历史缓冲区212的起始处移除具有八个字节的序列606,并将剩余的序列移动到历史缓冲区212的起始处。然后在历史缓冲区212的末端添加新序列604。通过移动和添加序列,历史缓冲区212然后就具有包括新添加序列604的24字节序列608。
为更新查找表216以反映该序列608,查找表216中散列链310(k)的每一位置可具有一减去的数字,它对应于历史缓冲区212中其每一字节被移位的字节数。例如,在本示例中,每一字节被移位了8字节,以为新序列604留出空间。因此,由多个散列链310(1)-310(k)描述的每一位置具有从位置中减去的“8”,以反映对应索引308(k)在历史缓冲区212中的新位置。为从每一散列链310(k)中移除不再包括在历史缓冲区212的位置,从散列链310(k)中移除其值小于零的任何位置。
图7是描述一个示例性实现中的过程700的流程图,其中,流数据的压缩被进一步优化。在上述参考图3-4讨论的过程300、400中,查找表216被配置成描述历史缓冲区212中对应索引308(k)的每一位置,以有效地在历史缓冲区212中定位初始序列。在历史缓冲区212中找出匹配序列还可被进一步优化,以进一步提高数据压缩的效率。
例如,在块702,使用查找表并采用阈值找出匹配序列。可采用各种阈值。例如,可在历史缓冲区的预定数量的位置上执行找出匹配序列的比较,以限制所执行的比较次数。通过限制历史缓冲区中与要流传送的数据比较的位置的数量,可限制位置的大小(如,字节数)。例如,如上所述,历史缓冲区212中的匹配序列的位置可被描述为匹配序列的始端或末端与当前指针的始端或末端之间的相对位置,它可通过后指针来描述。因此,通过限制所执行的比较的次数,匹配序列将位于“更靠近”当前指针的概率就越大。由此,由于这一“靠近”,位置可具有较小的值,如使用更少的字节。在另一实现中,可采用阈值,使得具有超过预定阈值的值的位置不被考虑在内,这可再一次有助于限制位置的值的大小。由此,可采用各种阈值,如要搜索的位置的数量、描述该位置的值的大小、描述每一定位的序列的长度的值的大小等等。
在判决块704,确定描述匹配序列的位置的后指针是否包括在最近使用(LRU)表内。LRU表可用于储存最近使用的后指针。如果匹配序列的后指针包括在LRU表中,则可使用对应于LRU表中该后指针的LRU表示来对该匹配序列的后指针进行编码。例如,LRU表的深度可以为4,使得最后四个最近使用的后指针被储存在LRU表中。LRU中每一后指针具有映射到LRU表的对应的LRU表示。因此,如果后指针包括在LRU表中,则在块706,可用来自LRU表的LRU表示对后指针进行编码。以这一方式,压缩模块可着眼于流数据中遇到的其它模式,以进一步压缩数据。例如,从服务器流到客户机的图形数据可包括在历史缓冲区中的相似偏移处重复的匹配序列。因此,匹配序列可使用包括匹配序列的长度和位置的表示来压缩,通过使用LRU表示其位置得以进一步压缩。
如果后指针不包括在LRU表中,则在块708,可使用图2的哈夫曼表228来编码后指针。哈夫曼编码可用一出现频率表来开始,该表涉及要被进一步压缩的每一后指针的出现频率。向每一后指针分配一唯一地表示该后指针的可变长度串。例如,每一可变长度串可具有一唯一的前缀。该串然后可被排列成树,以分别编码和解码每一后指针和表示。为编码后指针,在树中定位该后指针。树中用于定位包括后指针的叶的分支用于编码该字节序列,即,提供该后指针的表示。例如,树中用于哈夫曼编码的每一分支可由一输出字母表的符号来标记,如比特0和比特1,使得编码是对从树根到要编码的后指针的路径上的分支标记的枚举。解码每一表示通过基于串中的每一连续值,从起源通过分支向下跟踪树到树叶,直到达到包括该后指针的树叶位置来执行。
在块710,也使用哈夫曼表来编码匹配序列的长度。例如,图2的哈夫曼表230可用于编码历史缓冲区中的匹配序列的长度,以进一步压缩数据。可如对后指针所描述的那样对长度进行编码。
在块712,匹配序列由被配置成元组的表示来表示,它包括描述历史缓冲区中匹配序列的位置以及匹配序列的长度的后指针。在块714,采用一代价函数来确定该表示是否比匹配序列更有效,如当储存时使用更少的存储器资源和/或当流传送时使用更少的带宽。例如,在某些情形中,匹配序列可能比描述历史缓冲区中的匹配序列的位置和长度的表示使用更少的字节。因此,可采用代价函数来确定是表示还是匹配序列,即数据中的文字序列更有效。可采用各种代价函数。例如,代价函数可使用后指针的大小和匹配序列的长度的乘积。
在判别块716,如果表示更有效,则在块718,通过用该表示来表示匹配序列来形成已压缩数据。在块720,更新当前指针,并处理下一初始序列。例如,当前指针可按匹配序列的长度递增,并且对数据中的下一序列重复该过程。一旦当前指针递增通过了用于流传送的数据,将已压缩的数据流到客户机。
在判别块716,如果表示并非更有效,则在块722,如先前所描述的使用哈夫曼表来表示匹配序列。在块720,按匹配序列中的字节数递增当前指针,并且对下一序列继续该过程。
如上所述,哈夫曼表可进一步压缩要流传送的数据。这些哈夫曼表已分别被描述成对后指针、长度和文字序列编码。在另一实现中,可组合哈夫曼表。例如,如图2所示,哈夫曼表228可用于编码文字232字节序列和后指针234。为在已压缩流中区别后指针和文字序列,可分别向后指针和文字序列提供唯一的前缀,如,每一后指针用比特“0”开始,每一文字序列用比特“1”开始。在另一实现中,可使用同一的索引代码,通过将文字序列和后指针组合成单个字母表,使得后指针和文字序列具有不同的各自的字符,来对这两者进行编码。
诸如上述哈夫曼表等编码表可用各种方式来提供。例如,在一个实现中,预配置编码表以供压缩和解压模块使用,使得不需要对要流传送的数据的每一分组计算编码表。这可用于提高加密过程的速度。在另一实现中,以预定的间隔动态地计算编码表。例如,可在每一次接收预定数量的分组时重新计算编码表,以更新编码表。
图8是一个示例性实现800的说明,其中,对序列的压缩进行优化以进一步优化数据压缩。如上所述,服务器102包括历史缓冲区212和查找表216。服务器102执行压缩模块116来压缩分组304(3)。从历史缓冲区212的起始处到其前两个字节相同的最右边的序列的起始的偏移可被表示为i1=HASH[HASH_SUM(s)]。在所示的示例中,当从历史缓冲区212的起始处从零开始计数时,“s”等于“4 5”,i1=10。从历史缓冲区212的起始处到下一最右边序列的下一偏移可被表示为i2=NEXT[i1]。在图8所示的示例中,在散列链802(k)中,i2=NEXT[10]=4。类似地,从历史缓冲区212的起始处的每一连续的偏移可在散列链802(k)中表示,如i3=NEXT[i2]。在所示的示例中,i3=0,因为在历史缓冲区212中没有包括“4 5”的其它序列。
当被执行时,压缩模块116然后可启动一过程以压缩从历史缓冲区212中的位置16的“4 5”开始的分组304(3)。压缩模块116首先可定位历史缓冲区212中具有来自散列链802(k)的位置i1=HASH[HASH_SUM(′4′,′5′)]=10的初始序列“4 5”的序列。该位置被储存,并且NEXT[16]被设为10,HASH[HASH_SUM(′4′,′5′)被设为16。通过首先比较相应序列中的下一顺序字节,在当前位置(16)和位置i1(10)相互比较序列。在本情形中,将分组304(3)中的第三字节与分组304(2)中的第五字节进行比较以找出匹配。在所示的示例中,下一顺序字节(即,相应的序列中的第三字节)是不同的,因为HISTORY[10+3]=′3′,而HISTORY[16+3]=′6′。因此,预期匹配序列的长度保持在2,而预期匹配序列的位置保持在10。
压缩模块116然后可在历史缓冲区212中从定位查找表216的位置i2=NEXT[i1]=4处的下一序列。由于i2不等于0,有至少两个字节的匹配。相应的字节“4 5”之后的下一顺序字节被如上所述地比较,得到4字节的匹配。因此,预期匹配序列的长度被设为4,而预期匹配序列的位置被设为4。压缩模块116然后可在历史缓冲区212中从定位散列链802(k)的位置i3=NEXT[i2]=0处的另一序列。由于i3等于0,它是散列链802(k)的末端,并且不比较任何其它位置。应当注意,在一个实现中,压缩模块116不特别地核查散列链802(k)的末端。相反,位置“i0”(图8所示的示例中为16)处的序列被设为等于i0。因此,当到达散列链802(k)的末端(iN=NEXT[i{N-1}]=0)时,核查它,并且压缩模块116前进到i{N+1}=NEXT[iN]=i0。
通过比较预期匹配序列长度之后的“下一”顺序字节,可提高比较的速度。例如,在上述示例中,将HISTORY[i0+匹配长度]与HISTORY[i0+匹配长度]进行比较,当历史缓冲区212中没有其它序列用于比较时,然后执行每一相应位置上的全序列的比较。换言之,在历史缓冲区212中的相应位置上的相应序列中,将每一字节相互比较。如果全序列比较成功,则导出匹配序列。以这一方式,可获得历史缓冲区212中的序列比较的可测量的加速。
图9是一个示例性实现的系统900的说明,其中,响应于从系统接收的反馈动态地调整压缩。由于各种各样的因素,服务器102和客户机104之间通过网络的通信可以变化。例如,客户机104可具有有限的软件和/或硬件资源,使得客户机104花费比服务器102压缩数据更长的时间来解压数据。在另一示例中,服务器102可向多个客户机提供数据,并因此客户机可能比服务器102为每一客户机压缩数据更快地解压数据。通过调整先前描述的一个或多个压缩参数,可优化服务器102和客户机104之间的通信,使得可考虑服务器102和104的硬件和/或软件资源,以及通信上耦合它们的网络106的资源。例如,如果服务器102正在“等候”向客户机104发送已压缩数据,则服务器102可执行附加的压缩计算以进一步压缩数据。
为调整RDP 112的压缩模块116的参数,获取反馈。可使用各种因素作为反馈来调整压缩参数,如通用网络特征。例如,来自网络层的指示由于慢链路而存在网络反压力(backpressure)的信息可由压缩模块116使用来指示有额外的时间来进一步压缩数据。因此,压缩模块116可被动态地调整来花费更多的时间压缩数据,以当存在反压力时减小最终输出的大小。
在另一示例中,RDP 112可使用历史缓冲区904(1)、……、904(h)、……、904(H)的固定池(pool)902。希望发送数据的较高层通过向池902请求(分配)缓冲区(如,缓冲区904(h))、用数据填充缓冲区904(h)(包括压缩数据)、然后将已压缩的数据发送到客户机104来操作。当发送了缓冲区的内容时,缓冲区904(h)仅被返回到池902,即“释放”。这一技术允许RDP 112,尤其是压缩模块116能够基于花费了多久将缓冲区“释放”回缓冲区池,来获取关于是有慢连接还是快连接(如,带宽量)、慢客户机还是快客户机(如,客户机解压数据所花费的时间量)等的反馈,即反压力信息。
在又一示例中,如果池902的缓冲区904(1)-904(H)没有一个可用,则可通过调整各种压缩阈值以在压缩上花费更多的时间,来调节压缩模块116以“更努力地工作”。一旦网络条件改善,也可调整压缩模块116以执行更少的压缩操作,使得数据更快速地被发送出去。例如,如果网络106具有相当大量的可用带宽,则可减少所执行的压缩操作的数量,因为不需要压缩来降低传递数据所花费的时间。以这一方式,可采用一种动态技术,使得基于波动的网络条件在运行时改变压缩参数。在另一实现中,使用网络速度的初始度量来调整参数,这些参数然后贯穿整个会话而使用。
如上所述,用于调整压缩模块116的因素也可考虑服务器102的硬件和/或软件资源。例如,可考虑服务器102的负载(如,服务器102正提供多少活动会话、图2的处理器上的负载等等),并动态调整压缩强度以通过在压缩上使用更少的CPU来补偿。可被调整的压缩参数的一个示例是搜索窗大小。例如,搜索窗大小可从64K调整到512K。更大的窗可提供更多相关压缩,但是实现较慢。因此,如果认为网络慢时,“切换”到大窗是有利的。
用于调整压缩模块116的因素的另一示例是散列链中被遍历来查找匹配的链接数量可被调整。例如,步查更长的链链接可提高找到更长匹配的概率,但是可消耗额外的硬件和/或软件资源来执行匹配。
用于调整压缩模块116的因素的又一示例是指定用于终止搜索的所找到的最长匹配的阈值。如上所述,该阈值可用于限制找出匹配所执行的搜索的量。这一阈值越大,找到更长匹配的概率越大,并由此可以进一步压缩数据。然而,当执行这一搜索时,也可使用更大量的处理资源。尽管讨论了各种因素和参数,各种其它因素和参数也可如此处所描述地使用。
尽管以对结构特征和/或方法动作专用的语言描述了本发明,然而可以理解,所附权利要求书中定义的本发明不必要局限于所描述的具体特征或动作。相反,揭示了具体特征和动作作为实现本发明的示例性形式。
权利要求
1.一种方法,包括压缩数据以在终端服务环境中传递,其特征在于,它通过以下行动来压缩数据在一查找表中找出一匹配数据中的初始序列的索引,其中所述查找表包括多个条目,每一所述条目可使用多个所述索引中的特定一个来发现;以及每一所述条目涉及一对应的所述索引是否位于一历史缓冲区中,并且如果是,则还引用所述历史缓冲区中对应的所述索引的一个或多个位置;以及如果所述匹配索引的对应的所述条目引用多个所述位置对于每一所述位置,将所述位置上具有所述匹配索引的序列与所述数据中的序列进行比较,所述序列包括所述初始序列;基于每一所述位置上的序列的长度和位置中的至少一个,从所述比较中导出一匹配序列;以及使用包括所述历史缓冲区中的匹配序列的长度和位置的表示来表示所述匹配序列。
2.如权利要求1所述的方法,其特征在于,它还包括对所述数据中的每一所述序列,找出所述查找表中的一个所述索引;形成包括一个或多个所述表示的已压缩数据;以及流传送所述已压缩数据。
3.如权利要求1所述的方法,其特征在于,所述匹配索引的对应的所述条目引用一散列链,它包括所述历史缓冲区中的匹配索引的每一所述位置。
4.如权利要求1所述的方法,其特征在于,所述初始序列和所述索引的每一个都由至少两个字节组成。
5.如权利要求1所述的方法,其特征在于,它还包括形成包括所述表示的已压缩数据;以及通过网络流传送所述已压缩数据,其中,所述数据被格式化为一个或多个分组。
6.如权利要求1所述的方法,其特征在于,它还包括使用一选自以下组中的编码技术对所述表示的长度和位置的至少一个进行编码哈夫曼编码;算术编码;前缀编码;以及马尔可夫编码。
7.如权利要求1所述的方法,其特征在于如果所述匹配索引的对应的所述条目不引用任何所述位置,则通过哈夫曼编码来编码所述初始序列;如果所述匹配索引的对应的所述条目引用单个所述位置将单个所述位置处具有所述匹配索引的序列与所述数据中的序列进行比较;基于单个所述位置处的序列的长度和位置的至少一个,从所述比较中导出一匹配序列;以及使用包括所述历史缓冲区中的匹配序列的长度和单个所述位置的表示来表示所述匹配序列;以及当所述数据的每一所述序列被表示或被编码时,流传送具有所述编码或所述表示的数据。
8.如权利要求1所述的方法,其特征在于,导出所述匹配序列的所述比较是使用选自以下组中的一个或多个阈值来执行的具有要比较的所述匹配索引的所述位置的数量;描述具有所述匹配索引的每一所述位置的值的大小;以及描述每一所述位置处与所述数据中包括所述匹配索引的序列相匹配的序列的长度的值的大小。
9.如权利要求1所述的方法,其特征在于,它还包括采用一代价函数来确定所述表示是否在储存时比所述匹配序列使用了更少的存储器,并且如果是,形成包括所述表示的已压缩数据。
10.如权利要求1所述的方法,其特征在于,它还包括确定所述匹配序列的位置是否与一最近使用(LRU)表中的多个位置之一相匹配,其中所述LRU表中的每一所述位置具有一对应的所述LRU表示;所述LRU表中的每一所述位置描述了先前经流传送的数据中多个最近使用的序列位置之一;以及如果所述匹配序列的位置被包括在所述LRU表中,则用来自所述LRU表的对应的所述LRU表示来编码所述匹配序列的位置。
11.一个或多个包括计算机可执行指令的计算机可读媒质,当所述指令被执行时,实现权利要求1所述的方法。
12.一种方法,它包括压缩数据以在终端服务环境中传递,其特征在于,它通过执行以下行动压缩数据向一历史缓冲区添加数据;更新一引用所述历史缓冲区的查找表以包括所添加的数据,其中所述查找表包括多个条目,每一所述条目可使用多个索引中的特定一个来发现;以及每一所述条目涉及对应的所述索引是否位于所述历史缓冲区中,并且如果是,还引用所述历史缓冲区中对应的所述索引的一个或多个位置;在所述历史缓冲区中所添加的数据之处开始一当前指针;在所述查找表中找出匹配所述当前指针处的初始序列的一个所述索引;如果所述匹配索引的对应的所述条目引用多个所述位置将每一所述位置上具有所述匹配索引的序列与所添加的输入数据中包括所述初始序列的序列进行比较;从所述比较中导出一匹配序列;用包括所述历史缓冲区中的匹配序列的位置和长度的表示来表示所述匹配序列;采用一代价函数来确定所述表示在储存时是否比所述匹配序列使用更少的存储器空间,如果是,则配置数据以包括所述表示,并将所述当前指针前进所述匹配序列的长度,否则,配置所述数据以包括所述初始序列,并将所述当前指针前进所述初始序列的长度;以及当所述当前指针前进通过所添加的数据时,分组化所配置的数据用于流传送。
13.如权利要求12所述的方法,其特征在于,它还包括使用一选自以下组中的编码技术对所述表示的长度和位置的至少一个进行编码哈夫曼编码;算术编码;前缀编码;以及马尔可夫编码。
14.如权利要求12所述的方法,其特征在于,当所述当前指针处的初始序列不匹配所述历史缓冲区中的任何序列时,对所述当前指针处的初始字节序列进行编码,以包括在所配置的数据中,用于通过一选自以下组中的编码技术来流传送哈夫曼编码;算术编码;前缀编码;以及马尔可夫编码。
15.如权利要求12所述的方法,其特征在于,它还包括确定所述匹配序列的位置是否与一最近使用(LRU)表中的多个位置之一相匹配,其中所述LRU表中的每一所述位置具有一对应的所述LRU表示;所述LRU表中的每一所述位置描述了先前经流传送的数据中多个最近使用的序列位置中的一个;以及如果所述匹配序列的位置被包括在所述LRU表中,则用来自所述LRU表的对应的所述LRU表示来编码所述匹配序列的位置。
16.一个或多个包括计算机可执行指令的计算机可读媒质,当所述指令被执行时,实现权利要求12所述的方法。
17.一种方法,其特征在于,它包括接收反馈,它指示用于通过网络将数据从由服务器提供的终端服务传递到客户机时的资源的可用性;以及响应于所述反馈,调整一用于压缩所述数据的压缩例程的一个或多个参数。
18.如权利要求17所述的方法,其特征在于,所述资源选自以下组所述客户机的硬件资源;所述客户机的软件资源;所述网络的网络资源;所述服务器的硬件资源;所述服务器的软件资源;以及其任一组合。
19.一个或多个包括计算机可执行指令的计算机可读媒质,当所述指令被执行时,实现权利要求17所述的方法。
20.一种方法,其特征在于,它包括在服务器处从客户机接收对通过所述服务器可用的应用程序或文件进行远程访问的请求;响应于通过网络的所述请求,确定用于传递数据的资源的可用性;以及基于所确定的可用性,调整一用于压缩所述数据的压缩协议的一个或多个参数。
21.如权利要求20所述的方法,其特征在于,所述资源选自以下组所述客户机的硬件资源;所述客户机的软件资源;所述网络的网络资源;所述服务器的硬件资源;所述服务器的软件资源;以及其任一组合。
22.一个或多个包括计算机可执行指令的计算机可读媒质,当所述指令被执行时,实现权利要求20所述的方法。
23.一种服务器,其特征在于,它包括一历史缓冲器,它具有多个字节;一查找表,它包括多个条目,每一所述条目可使用多个索引中特定的一个来发现;以及涉及对应的所述索引是否位于所述历史缓冲区中,并且如果是,还引用所述历史缓冲区中对应的所述索引的一个或多个位置;以及一压缩模块,它可执行以便在所述查找表中找出与用于从终端服务传递到客户机的数据中的初始序列相匹配的一个所述索引序列;如果所述匹配索引的对应的所述条目引用多个所述位置对于每一所述位置,将所述位置上具有所述匹配索引的序列与所述数据中的序列进行比较,所述序列包括所述初始序列;基于每一所述位置上的序列的长度和位置中的至少一个,从所述比较中导出一匹配序列;以及使用包括所述历史缓冲区中的匹配序列的长度和位置的表示来表示所述匹配序列。
24.如权利要求23所述的服务器,其特征在于,所述压缩模块还可执行以便对所述数据中的每一所述序列,在所述查找表中找出一个所述索引;形成包括一个或多个所述表示的已压缩数据;以及流传送所述已压缩数据。
25.如权利要求23所述的服务器,其特征在于,所述匹配索引的对应的所述条目引用一散列链,它包括所述历史缓冲区中匹配索引的每一所述位置。
26.如权利要求23所述的服务器,其特征在于,所述初始序列和所述索引的每一个都由至少两个字节组成。
27.如权利要求23所述的服务器,其特征在于,所述压缩模块还可执行以便形成包括所述表示的已压缩数据;以及分组化所述已压缩数据用于通过网络流传送,其中,所述数据被格式化为一个或多个分组。
28.如权利要求23所述的服务器,其特征在于,所述压缩模块还可执行以便通过一选自以下组中的编码技术对所述表示的长度和位置的至少一个进行编码哈夫曼编码;算术编码;前缀编码;以及马尔可夫编码。
29.如权利要求23所述的服务器,其特征在于,所述压缩模块还可执行,以便如果所述匹配索引的对应的所述条目不引用任何所述位置,通过一选自以下组中的编码技术对所述初始序列进行编码哈夫曼编码;算术编码;前缀编码;以及马尔可夫编码。
30.如权利要求23所述的服务器,其特征在于,导出所述匹配序列的所述比较是使用选自以下组中的一个或多个阈值来执行的具有要被比较的所述匹配索引的所述位置的数量;描述具有所述匹配索引的每一所述位置的值的大小;以及描述每一所述位置上与所述数据中包括所述匹配索引的序列相匹配的序列的长度的值的大小。
31.如权利要求23所述的服务器,其特征在于,所述压缩模块还可执行,以便采用一代价函数来确定所述表示在存储时是否比所述匹配序列使用更少的存储器,并且如果是,形成包括所述表示的已压缩数据。
32.如权利要求23所述的服务器,其特征在于,所述压缩模块还可执行,以便确定所述匹配序列的位置是否与一最近使用(LRU)表中的多个位置中的一个相匹配,其中所述LRU表中的每一所述位置具有一对应的所述LRU表示;所述LRU表中的每一所述位置描述先前经流传送的数据中多个最近使用的序列位置中的一个;以及如果所述匹配序列的位置被包括在所述LRU表中,则用来自所述LRU表的对应的所述LRU表示来编码所述匹配序列的位置。
33.一种系统,其特征在于,它包括一网络;一服务器,包括第一历史缓冲区,它具有多个字节;一查找表,它包括多个条目,每一所述条目可使用多个索引中特定的一个来发现,每一所述条目涉及对应的所述索引是否位于所述历史缓冲区中,并且如果是,引用所述历史缓冲区中对应的所述索引的一个或多个位置;以及一压缩模块,它可执行以便响应于一远程访问请求,在所述查找表中找出所述数据中与当前指针处的初始序列相匹配的一个所述索引;如果所述匹配索引的对应的所述条目引用一个或多个所述位置将每一所述位置上具有所述匹配索引的序列与所述数据中当前指针处的序列进行比较;从所述比较中导出一匹配序列;配置数据以包括一表示,该表示包括所述第一历史缓冲区中所述匹配序列的位置和长度,并将所述当前指针前进所述匹配序列的长度;如果所述匹配索引的对应的所述条目不引用任何所述位置,则配置数据以包括所述初始序列,并将所述当前指针前进所述初始序列的长度;以及当所述当前指针前进通过所添加的数据时,通过所述网络流传送所配置的数据;以及一客户机,它通信上耦合至所述网络,并包括第二历史缓冲区和一解压模块,所述解压模块可执行,以便通过基于由所述表示所指示的位置和长度在所述第二历史缓冲区中找出所述匹配序列,来解压所述经流传送的数据。
34.如权利要求33所述的系统,其特征在于,所述解压模块还可由所述客户机执行以向所述第二历史缓冲区添加所解压的数据。
35.如权利要求33所述的系统,其特征在于,所述压缩模块还可由所述服务器执行,以通过一选自以下组中的编码技术对所述表示的长度和位置的至少一个进行编码哈夫曼编码;算术编码;前缀编码;以及马尔可夫编码。
36.如权利要求33所述的系统,其特征在于,如果所述匹配索引的对应的所述条目不引用任何所述位置,则所述压缩模块还可执行,以通过一选择以下组中的编码技术对所述初始序列进行编码哈夫曼编码;算术编码;前缀编码;以及马尔可夫编码。
37.如权利要求33所述的系统,其特征在于,所述压缩模块还可由所述服务器执行,以确定所述匹配序列的位置是否与一最近使用(LRU)表中的多个位置中的一个相匹配,其中所述LRU表中的每一所述位置具有一对应的所述LRU表示;所述LRU表中的每一所述位置描述先前经流传送的数据中多个最近使用的序列位置中的一个;以及如果所述匹配序列的位置被包括在所述LRU表中,则用来自所述LRU表的对应的所述LRU表示来编码所述匹配序列的位置。
38.一种包括计算机可执行指令的计算机可读媒质,其特征在于,当所述指令由计算机执行时,引导所述计算机在一查找表中找出与用于流到客户机的数据中的一初始序列相匹配的索引,所述数据用于生成远程地从所述客户机执行的应用程序的用户界面,其中所述查找表包括多个条目,每一所述条目可使用多个所述索引中的特定的一个来发现;以及每一所述条目涉及一对应的所述索引是否位于一历史缓冲区中;并且如果是,还引用所述历史缓冲区中对应的所述索引的一个或多个位置;如果所述匹配索引的对应的所述条目引用多个所述位置对于每一所述位置,将所述位置上具有所述匹配索引的序列与所述数据中的序列相比较,所述序列包括所述初始序列;以及根据所述比较计算所述匹配序列的长度。
39.如权利要求38所述的计算机可读媒质,其特征在于,所述计算机可执行指令引导所述计算机使用一包括所述长度和位置的表示来表示所述匹配序列。
40.如权利要求38所述的计算机可读媒质,其特征在于,所述匹配索引的对应的所述条目引用一散列链,它包括所述历史缓冲区中所述匹配索引的每一所述位置。
41.如权利要求38所述的计算机可读媒质,其特征在于,所述初始序列和所述索引的每一个都由至少两个字节组成。
42.如权利要求38所述的计算机可读媒质,其特征在于,所述计算机可执行指令引导所述计算机通过一选自以下组中的编码技术对所述长度和位置的至少一个进行编码哈夫曼编码;算术编码;前缀编码;以及马尔可夫编码。
43.如权利要求38所述的计算机可读媒质,其特征在于,所述计算机可执行指令引导所述计算机,如果所述匹配索引的对应的所述条目不引用任何位置,则通过一选择以下组中的编码技术对所述初始序列进行编码哈夫曼编码;算术编码;前缀编码;以及马尔可夫编码。
44.如权利要求38所述的计算机可读媒质,其特征在于,所述比较是使用选自以下组中的一个或多个阈值来执行的具有要被比较的所述匹配索引的所示位置的数量;描述具有所述匹配索引的每一所述位置的值的大小;以及描述每一所述位置上与所述数据中包括所述匹配索引的序列相匹配的序列的长度的值的大小。
45.如权利要求38所述的计算机可读媒质,其特征在于,所述计算机可执行指令引导所述计算机采用一代价函数确定包括所述匹配序列的长度和位置的表示在储存时是否比所述匹配序列使用更少的存储器,并且如果是,形成包括所述表示的已压缩数据。
46.如权利要求38所述的计算机可读媒质,其特征在于,所述计算机可执行指令引导所述计算机确定所述匹配序列的位置是否与一最近使用(LRU)表中的多个位置中的一个相匹配,其中所述LRU表中的每一所述位置具有一对应的所述LRU表示;所述LRU表中的每一所述位置描述先前经流传送的数据中多个最近使用的序列位置中的一个;以及如果所述匹配序列的位置被包括在所述LRU表中,则用来自所述LRU表的对应的所述LRU表示来编码所述匹配序列的位置。
全文摘要
描述了流数据的压缩。在一个实现中,一种方法包括通过在一查找表中找出匹配数据中一初始序列的索引,压缩数据用于在终端服务环境中传递。该查找表包括多个条目。每一条目可使用多个索引中的特定一个来发现。每一条目涉及对应索引是否位于历史缓冲区中,并且如果是,还引用历史缓冲区中对应索引的一个或多个位置。如果匹配索引的对应条目引用多个位置,对每一位置,将具有匹配索引的序列与数据中包括初始序列的序列进行比较。基于每一位置上的序列的长度和位置,从比较中导出一匹配序列。该匹配序列使用包括历史缓冲区中匹配序列的长度和位置的表示来表示。
文档编号G06F13/00GK1671103SQ200510009159
公开日2005年9月21日 申请日期2005年2月4日 优先权日2004年3月15日
发明者A·V·卡达齐, M·V·斯里格, N·Y·阿布多 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1