本公开涉及计算跨设备冗余数据。具体地,本公开描述了计算冗余数据并将其存储在预先指定的位置。更具体地,本公开涉及提供与数据和冗余数据相关联的单次提交保证。
背景技术:
高性能非易失性存储器系统变得流行,成为传统存储层次的新级别。进一步地,试图在电源故障的情况下实现冗余方案的现有方法包括各种形式的独立磁盘冗余阵列(例如,raid5和raid6)或更多复杂方案(如纠删码),以便保护数据免遭单个或多个设备故障。但是,现有冗余方案和设备故障方法要求两次提交,一次针对数据,而另一次针对冗余数据。这些现有方法不考虑冗余数据是如何计算的,从而导致了成为性能瓶颈的双提交。本公开通过提供一种用于利用单次提交实现跨设备冗余方案的高度可靠系统,解决了与存储设备中冗余数据相关联的问题。
技术实现要素:
本公开涉及用于利用单次提交实现跨设备冗余方案的系统和方法。根据本公开主题的一个新颖方面,一种用于存储和数据缩减的系统包括压缩单元,所述压缩单元具有用于压缩数据的输入和输出,所述压缩单元的所述输入被耦合以用于接收数据流,所述压缩单元压缩所述数据流以产生数据颗粒;写入页分配单元,所述写入页分配单元具有用于向所述一个或多个存储设备传送数据颗粒并生成冗余数据的输入和输出,所述写入页分配单元的所述输入与所述压缩单元的所述输出耦合以用于接收数据颗粒,所述写入页分配单元的所述输出与所述一个或多个存储设备耦合;以及颗粒存储器,所述颗粒存储器用于临时存储数据且具有输入和输出,所述输入与所述写入页分配单元耦合,所述输出与所述一个或多个存储设备耦合。所述系统还可以包括:加密单元,所述加密单元具有用于将所述数据进行编码以产生编码数据流的输入和输出,所述加密单元的所述输入被耦合以用于接收所述数据流,所述加密单元的所述输出与所述写入页分配单元的所述输入耦合;分配逻辑,所述分配逻辑用于分析与所述颗粒存储器相关联的预定数据布局映射以标识所述颗粒存储器的用于临时存储数据颗粒的存储器段,所述分配逻辑与所述压缩单元和所述颗粒存储器耦合;数据队列,所述数据队列用于临时存储颗粒直至所述颗粒可以被存储在所述颗粒存储器中,所述数据队列具有输入和输出,所述数据队列的所述输入与所述压缩单元耦合,所述数据队列的所述输出与所述分配逻辑耦合;以及dma命令单元,所述dma命令单元用于将数据从所述颗粒存储器直接传送到所述一个或多个存储设备。
通常,本公开中描述的主题的另一新颖方面可以通过多种方法实现,所述方法包括:由写入页分配单元接收分配数据颗粒的请求;响应于接收所述请求,由所述写入页分配单元执行对与颗粒存储器相关联的预定数据布局映射的分析以标识存储器段;由所述写入页分配单元向所述存储器段分配若干数据颗粒,同时计算与所述若干数据颗粒相关联的冗余数据;向所述颗粒存储器的所述存储器段中存储所述若干数据颗粒和所述冗余数据;由所述写入页分配单元判定是否已满足与所述颗粒存储器相关联的存储阈值;以及响应于满足与所述颗粒存储器相关联的所述存储阈值,向一个或多个存储设备传输存储在所述存储器段中的数据颗粒和冗余数据。
一个或多个这种方面的其他实施方式包括相应系统、装置和计算机程序,所述计算机程序被配置成用于执行方法的动作并被编码在计算机存储设备上。
这些和其他实施方式均可以可选地包括一个或多个以下特征。例如,操作进一步包括:由压缩单元从客户端设备接收数据流;以及由所述压缩单元将所述数据流压缩为多个数据颗粒;标识与所述预定数据布局映射相关联的活动写入页;在所述预定数据布局映射的所述活动写入页中检索与目前存储的数据颗粒相关联的指针;基于所述指针确定与所述活动写入页相关联的不可用位置数据,所述不可用位置数据反映占用的存储空间;以及基于所述指针确定与所述预定数据布局映射的所述活动写入页相关联的可用位置数据;向所述颗粒存储器的一个或多个预先提供的存储器缓冲器中存储所述冗余数据;以及基于传入数据颗粒,计算所述一个或多个预先提供的存储器缓冲器中每个存储器缓冲器的有效位。操作进一步包括:针对与分配给所述存储器段的所述若干数据颗粒相关联的第一数据颗粒,记录与所述预定数据布局映射相关联的起始位置;以及基于所述分配所述若干数据颗粒,更新与所述颗粒存储器相关联的所述预定数据布局映射;跨多个存储设备并行存储所述数据颗粒和冗余数据;生成用于向多个存储设备传输数据颗粒和冗余数据的模板;以及使用所述模板将数据颗粒和冗余数据直接从所述颗粒存储器传送到所述多个存储设备。其他特征包括:其中,传输存储在所述存储器段中的数据颗粒和冗余数据使用预先配置的模板;其中,所述模板至少包括与所述数据颗粒和冗余数据相关联的偏移和若干字节;其中,所述存储阈值是32k字节;并且其中,所述颗粒大小是512字节。额外的特征包括:其中,向所述存储器段分配所述若干数据颗粒与计算冗余数据是同时执行的。
这些实施方式在许多方面都是特别有利的。例如,本文中所描述的技术可以用于利用单次提交实现跨设备冗余方案。
应该理解的是,在本公开中使用的语言主要是为了可读性和指导目的而被选择的,而不是限制本文中所公开的主题的范围。
附图说明
以示例性而非限制性方式在附图中展示本公开,在附图中,类似号码用于指示类似元件。
图1是展示了根据本文中所描述技术的用于利用单次提交实现跨设备冗余方案的示例系统的高级框图。
图2是展示了根据本文中所描述技术的存储逻辑示例的框图。
图3是展示了根据本文中所描述技术的示例写入页分配单元的框图。
图4是展示了根据本文中所描述技术的示例数据通过写入页分配单元的框图。
图5是根据本文中所描述技术的用于实现跨设备冗余方案的示例方法的流程图。
图6a和6b是根据本文中所描述技术的用于实现跨设备冗余方案的另一示例方法的流程图。
图7是展示了根据本文中所描述技术的写入页分配单元所见的数据布局的示例图形表示。
图8是展示了根据本文中所描述技术的跨越多个后端存储设备的设备列的示例图形表示。
具体实施方式
以下描述了用于实现跨设备(或交叉驱动器)冗余架构的系统和方法。具体地,在本公开中,以下描述了用于实现存储设备(具体是闪存存储设备)的跨设备(或交叉驱动器)冗余的系统和方法。虽然本公开的系统和方法是在使用了闪存存储的特定系统架构的背景下描述的,应该理解的是,所述系统和方法可以应用于硬件和其他具有类似属性的存储器设备的其他架构和组织。
本公开涉及基于写入页分配(wpa)单元的预定数据布局映射分配数据,以及计算跨设备冗余数据。在一些实施例中,本公开描述了同时计算用于存储应用的冗余数据和分配。本公开与现有实施方式的区别在于解决了以下问题:计算冗余数据、在预指定的位置存储所述冗余数据以及提供在突然电源故障时保证数据的数据提交。另外,所述wpa单元的存在允许针对写入数据使用单次提交流程,这产生了性能和固件代码复杂优势。由此,本公开通过提供一种用于利用单次提交实现跨设备冗余方案的高度可靠系统,解决了与存储设备中冗余数据相关联的问题。
系统
图1是展示了根据本文中所描述技术的用于利用单次提交实现跨设备冗余方案的示例系统100的高级框图。在描绘的实施例中,系统100可以包括存储逻辑104、交换机106和一个或多个存储设备110a、110b至110n。在展示的实施例中,存储逻辑104与一个或多个存储设备110a、110b至110n经由交换机106通信地耦合。但是,本公开并不局限于这种配置,可以采用各种不同的系统环境和配置,并且所述各种不同的系统环境和配置是在本公开的范围内。其他实施例可以包括额外的或更少的部件。应该理解的是,图1和其他图是用于展示实施例的,并且参考号或标记后字母(例如“110a”)的指示是对由该特定参考标记指定的元件或部件的具体引用。如文中参考标号(例如“110”)没有后跟字母,应该理解的是,这种参考标记是对包含该参考标记的元件或部件的不同实施例的总体参考。
在一些实施例中,存储逻辑104提供跨设备冗余方案。存储逻辑104能够提供计算功能、服务和/或资源以发送、接收、读、写入和变换来自系统100其他实体的数据。在一些实施例中,存储逻辑104可以是计算设备,被配置成用于使存储设备110的一部分或全部存储空间可用。存储逻辑104经由信号线120耦合至交换机106,用于与系统100的存储设备110a-110n通信和合作。在其他实施例中,存储逻辑104经由交换机106在存储设备110之间传输数据。应该理解的是,可以以分布式架构或其他方式利用多个存储逻辑单元104。为了本申请的目的,系统执行的系统配置和操作是在单个存储逻辑104的背景下描述的。
交换机106可以是常规类型和有线,并且可具有多种不同配置。进一步地,交换机106可以包括太网卡、无限带宽、pci-express交换机,和/或其他互联数据路径交换机,多个设备(例如,存储设备110)可通过其进行通信。尽管图1的示例展示了单个交换机106,但在实践中,一个或多个交换机106可连接系统100的实体。
存储设备110a、110b至110n可以包括非瞬态计算机可使用(例如可读、可写入等)介质,所述非瞬态计算机可使用介质可以是任何包含、存储、传达、传播或传输由处理器处理或者与其结合处理的指令、数据、计算机程序、软件、代码例程等的非瞬态装置或设备。在一些实施例中,存储设备110a、110b至110n经由信号线126a、126b至126n通过交换机106与存储逻辑104通信和合作。虽然本公开将存储设备110视为闪速存储器,应该理解的是,在一些实施例中,存储设备110可以包括非瞬态存储器,如动态随机访问存储器(dram)设备、静态随机访问存储器(sram)设备或一些其他存储器设备。
图2是展示了根据本文中所描述技术的存储逻辑104示例的框图。存储逻辑104是组合逻辑、固件、软件、代码或例程或其一些组合,用于实现跨设备冗余方案。如在图2中所描绘的,存储逻辑104可以包括命令队列单元208、压缩单元210、加密单元212、计数器单元214、wpa单元216、模板直接存储器访问(dma)命令单元220和提交队列单元222,上述部件可经由通信总线(未示出)电耦合和通信地耦合以相互合作和通信。这些部件208、210、212、216、220和222还被耦合以经由交换机106与系统100的其他实体(例如存储设备110)进行通信。
在一个实施例中,命令队列单元208、压缩单元210、加密单元212、计数器单元214、wpa单元216、模板dma命令单元220和提交队列单元222是用于执行以下描述的操作的硬件。在一些实施例中,命令队列单元208、压缩单元210、加密单元212、计数器单元214、wpa单元216、模板dma命令单元220和提交队列单元222是可由处理器执行的指令集或包括在一个或多个定制处理器中的逻辑,以便提供其各自功能。在一些实施例中,命令队列单元208、压缩单元210、加密单元212、计数器单元214、wpa单元216、模板dma命令单元220和提交队列单元222存储在存储器中,并且可由处理器访问和执行,以便提供其各自功能。在进一步实施例中,命令队列单元208、压缩单元210、加密单元212、计数器单元214、wpa单元216、模板dma命令单元220和提交队列单元222被适配成用于与处理器和系统100的其他部件合作和通信。单元、模块、例程、特征、属性、方法和其他方面的特定命名和分割不是必需遵守的或者不是重要的,并且实现本发明或其特征的机制可以有不同的名称、分割和/或格式。
命令队列单元208是用于接收来自一个或多个设备的数据和命令的缓冲器和软件、代码或例程。在一个实施例中,命令队列单元208接收来自一个或多个设备的数据流(数据包),并将它们准备好以存储在非易失性存储设备(例如存储设备110)中。在一些实施例中,命令队列单元208接收传入数据包并临时将所述数据包存储在存储器缓冲器中。在进一步实施例中,命令队列单元208接收4k数据块并对其进行分配以存储在一个或多个存储设备110中。在其他实施例中,命令队列单元208可以包括队列调度,所述队列调度对与多个设备相关联的数据流的数据块进行排队,以便存储逻辑104基于所述队列调度中所述数据块的对应位置处理所述数据块。在一些实施例中,命令队列单元208接收来自一个或多个设备的数据流,并且基于所述队列调度,向压缩单元210和/或存储逻辑104的一个或多个其他部件传输所述数据流。
压缩单元210是用于减少存储数据所需存储器量的逻辑、软件、代码或例程。在一个实施例中,压缩单元210接收来自命令队列单元208的数据流,并且将所述数据流压缩为多个数据颗粒。在一些实施例中,压缩单元210接收来自设备的数据流,将所述数据流压缩为若干数据颗粒,并将所述若干数据颗粒临时存储在存储器缓冲器中。在进一步实施例中,压缩单元210接收数据块,并且将每个数据块压缩为若干数据颗粒。数据颗粒可以表示最大压缩粒度(例如,数据流的数据块能够被压缩的最小数据大小)。
在一个实施例中,压缩单元210对数据流、数据块和/或数据包的压缩可以基于相应数据流、数据块和/或数据包的大小。例如,由压缩单元210接收的数据流、数据块和/或数据包可以是预定大小(例如,4k字节),并且压缩单元210可以基于所述预定大小(4k字节)将所述数据流、数据块和/或数据包压缩为压缩大小是512字节的数据颗粒。在其他实施例中,压缩单元210可以基于压缩算法压缩包括数据块的数据流,所述压缩算法例如但不限于是否编码算法、去重复算法等。
在其他实施例中,压缩单元210基于与数据块相关联的格式压缩数据流的所述数据块。例如,数据流的数据块可以与某个格式相关联,并且压缩单元210基于所述格式将所述数据块压缩为预定段。在一些实施例中,压缩单元210向存储逻辑104的一个或多个部件传输分段的压缩数据块以在其上执行动作和/或功能。与数据块相关联的非限制性格式示例可以包括但不限于.doc、.pdf、.csv、.txt、.mp4、.jpeg、.png、.ppt等。在进一步实施例中,压缩单元210基于与设备(例如wpa颗粒存储器218、存储设备110等)相关联的约束压缩数据流。约束可以基于与设备相关联的存储器(例如wpa颗粒存储器218和存储设备110)的大小,所述存储器用于存储若干数据颗粒、数据块等。
在一个实施例中,响应于压缩数据流,压缩单元210可以向wpa单元216传输请求。与数据流相关联的请求可以包括以下至少一种,但不限于,在存储器缓冲器中临时存储所述数据流的请求、在存储设备(例如存储设备110)中存储所述数据流的数据的请求、经由交换机106上传所述数据流的数据的请求、修改所述数据流的数据的请求等。在一些实施例中,压缩单元210在wpa单元集合中确定活动wpa单元,用于向所确定的活动wpa单元216传输压缩数据流,以供进一步处理。由压缩单元210确定活动wpa单元216可以基于所述集合中每个wpa单元接收的回复消息来执行。在进一步实施例中,压缩单元210基于与所述数据流的数据块相关联的格式(例如,数据类型)确定用于压缩数据流的活动wpa单元。例如,可以向活动wpa单元指定格式(例如,数据类型),用于处理满足所述格式的数据块。在一个实施例中,压缩单元210向不同的活动wpa单元传输数据流的压缩数据块(例如,数据颗粒)集合,以供进一步处理。例如,如在本文其他地方所描述的,压缩单元210向第一活动wpa单元传输数据流的第一压缩数据块集合,并向第二活动wpa单元传输所述数据流的剩余压缩数据块集合。在进一步实施例中,压缩单元210确定wpa单元集合中的活动wpa单元,以供进一步基于与每个wpa单元相关联的队列调度处理压缩数据流。例如,压缩单元210可以使用所述队列调度中的可用处理槽向wpa单元传输压缩数据流。
在一个实施例中,压缩单元210压缩包括数据块的数据流、确定活动wpa单元216以供进一步处理压缩数据块、向活动wpa单元216传输所述压缩数据块以及同时向wpa颗粒存储器218的存储器缓冲器传输所述压缩数据块。在进一步实施例中,压缩单元210可以将压缩数据流临时存储在存储器缓冲器中(未示出),同时在向一个或多个wpa单元216传输所述压缩数据流以执行其功能前,等待所述wpa单元216变得可用。
加密单元212是用于加密数据的逻辑、软件、代码或例程。在一个实施例中,加密单元212接收来自命令队列单元208的数据流并加密所述数据流。在一些实施例中,加密单元212接收来自压缩单元210的压缩数据流并加密所述数据流。在进一步实施例中,加密单元212仅加密数据流的一部分和/或与数据流相关联的数据块集合。
在一个实施例中,响应于自命令队列单元208接收的指令,加密单元212加密与数据流相关联的数据块和/或压缩数据流。例如,如果用户选择加密与用户财务相关联的数据同时退出加密与通用数据文件(例如,提供给公众的文件,如杂志、报纸文章、图片等)相关联的数据,命令队列单元208接收有关加密哪个文件的指令,并且向加密单元212提供所述指令。在进一步实施例中,加密单元212基于加密算法加密数据流和/或压缩数据流。加密算法可以是用户定义和/或已知加密算法,如但不限于,哈希算法、对称钥加密算法和/或公钥加密算法。在其他实施例中,加密单元212可以向wpa颗粒存储器218传输加密数据流和/或压缩加密数据流,同时向存储逻辑104的一个或多个部件传输加密/压缩数据流以在其上执行动作和/或功能。
计数器单元214是用于指定与数据相关联的计数的存储寄存器或存储器和逻辑或例程。在一个实施例中,计数器单元214追踪/计算预先提供的存储器缓冲器中每个存储器缓冲器(例如,wpa颗粒存储器218的每个逻辑存储器缓冲器)的有效位(例如,计数)。在一些实施例中,计数器单元214通过追踪、更新和修改与存储器缓冲器相关联的有效位来维护每个预先提供的存储器缓冲器(存储器的部分)的有效位表。在一些实施例中,计数器单元214与wpa单元216合作维护每个冗余数据缓冲器的有效位,以便系统100能够保证将使用有效且一致的数据构建提供的缓冲器(例如,wpa颗粒存储器218的每个逻辑存储器缓冲器)。
wpa单元216是用于分配传入数据的逻辑、软件、代码或例程。wpa单元216可以包括wpa颗粒存储器218和模板dma命令单元220。wpa颗粒存储器218可以包括用于临时存储数据的存储器缓冲器。在一个实施例中,wpa颗粒存储器218临时存储数据流、数据块和数据颗粒(例如,压缩和/或压缩/加密),并且存储逻辑104的一个或多个部件生成与所述数据流和/或数据块的冗余数据。在一些实施例中,同时进行存储所述数据流、数据块或数据颗粒和生成所述冗余数据。针对本申请的实施例,“同时”意味着以下各项中的任意项:1)在生成冗余的同时存储数据流、数据块或数据颗粒,即几乎同时开始和结束;2)存储数据流、数据块或数据颗粒的时间与生成冗余的时间部分重叠;或3)生成冗余数据的时间与存储数据流、数据块或数据颗粒中任一个的时间部分重叠。在其他实施例中,wpa单元216在wpa颗粒存储器218中存储数据颗粒,同时在存储设备110中存储数据流和冗余数据。
在一个实施例中,wpa单元216接收与分配若干数据颗粒相关联的请求。例如,wpa单元216接收与单元id和需要分配的压缩数据流的若干数据颗粒相关联的请求。单元id可以包括但不限于数据流的专用信息和用于由存储逻辑104的一个或多个部件标识的信息,所述数据流存储在所述存储设备中。在其他实施例中,wpa单元216接收来自压缩单元210的请求,所述请求与向wpa单元216分配压缩数据流的若干数据颗粒相关联。
在一个实施例中,wpa单元216接收来自加密单元212的加密数据流,并且向一个或多个存储设备110和/或wpa颗粒存储器218分配所述加密数据流。在进一步实施例中,wpa单元216接收来自加密单元212的压缩和加密数据流,并且向一个或多个存储设备110和/或wpa颗粒存储器218分配所述压缩和加密数据流。
在一个实施例中,响应于接收数据流(例如,压缩数据流和/或加密数据流)和/或请求,wpa单元216与压缩单元210合作执行对与wpa单元216相关联的预定数据布局映射的分析。如参考图7和8更加详细描述的,预定数据布局映射可以包括信息,如但不限于,与所述预定数据布局映射相关联的活动写入页的不可用位置数据和若干可用(不受限制)位置数据。例如,预定数据布局映射可以包括具有行和列的矩阵/表。所述预定数据布局映射的行可以指示存储空间(例如,可用颗粒存储位置或填充颗粒存储位置),而所述预定数据布局映射的列可以反映一个或多个设备(例如,存储设备110)。应该理解的是,所述预定数据布局映射的以上配置通过示例提供,并且多种进一步配置是被设想并可能的。
进一步地,分析与wpa单元216相关联的预定数据布局映射可以包括,但不限于,基于所述预定数据布局映射的分析,确定用于若干数据颗粒中相应数据颗粒的活动写入页。而且,在一些实施例中,所述分析可以包括wpa单元216在预定数据布局映射的活动写入页中检索与目前存储的数据颗粒相关联的指针。wpa单元216则可以基于所述指针确定与所述活动写入页相关联的不可用位置数据和/或可用位置数据。例如,与目前存储的数据颗粒相关联的指针可以指示相应数据颗粒正占用所述预定数据布局映射中的存储空间(例如,数据块)。在一些实施例中,如以下描述的,预定数据布局映射可以是用户定义和/或基于处理约束定义的。
在一个实施例中,在执行预定数据布局映射分析之后,wpa单元216确定路由数据,所述路由数据与向预定数据布局映射中若干不受限制颗粒位置(例如,可用数据位置)分配若干数据颗粒(例如,压缩数据流)的每个数据颗粒相关联。在一些实施例中,wpa单元216确定路由数据,所述路由数据与基于分析与wpa单元216相关联的预定数据布局映射,向若干不受限制数据位置中至少一个不受限制(可用数据)位置分配若干数据颗粒的每个数据颗粒相关联。在一些实施例中,wpa单元216同时确定第一路由数据和第二路由数据,所述第一路由数据用于向预定数据布局映射中的位置分配每个数据颗粒,所述第二路由数据包括与异或和/或校验保护(例如,计算冗余数据)与压缩数据流和/或加密/压缩数据流相关联的数据颗粒相关联的信息。
如在本文其他地方所描述的,通过允许在从压缩单元210向wpa颗粒存储器218的wpa逻辑存储器缓冲器传送数据块(数据颗粒)的同时生成冗余数据,wpa单元216消除了双提交要求。wpa单元216可以将若干数据颗粒的每个数据颗粒映射同时写入至预定数据布局映射中(多个)不受限制颗粒位置,同时在写入/传送每个数据颗粒时,生成与每个数据颗粒相关联的冗余数据。然后,wpa单元216可以同时存储、修改或更新预定数据布局映射中的冗余数据。由wpa单元216映射可以包括包括,但不限于,预定数据布局映射中压缩颗粒在逻辑块和物理块之间的映射。进一步地,物理位置可以包括,例如,原始闪存设备或管理闪存设备或管理闪存驱动器上的物理位置。在一些实施例中,wpa单元216通过使用校验方案(如基于raid5或raid6或cauchyreedsolomon的纠删码)并行计算不同设备的冗余数据,同时从压缩单元210向wpa单元216传输若干数据颗粒。进一步地,一旦适当地计算并更新校验数据(例如,冗余数据),将保护(数据流)的压缩用户数据免遭故障。
在一个实施例中,wpa单元216记录与所述预定数据布局映射相关联的起始位置,用于与分配给wpa单元216的若干数据颗粒相关联的第一数据颗粒。在一些实施例中,wpa单元216用所述第一数据颗粒的物理地址更新所述预定数据布局映射。在进一步实施例中,wpa单元216用存储的相应数据颗粒(数据块)的物理地址更新所述预定数据布局映射。例如,wpa单元216随后基于所述分配所述一个或多个数据颗粒更新其相应预定数据布局映射。然后,wpa单元216颗粒可以向一个或多个存储设备(例如,闪存设备或管理闪存驱动器)路由数据块(例如,未压缩、压缩和/或加密数据块)和冗余数据。在一个实施例中,wpa单元216基于相应(活动)wpa单元216的预定数据布局映射的存储器可用性(不可以/可用位置数据),分配若干数据颗粒的每个数据颗粒。
在一个实施例中,可以由wpa单元216分布计算与若干数据颗粒相关联的冗余数据,并按部分计算。在一些实施例中,wpa单元216计算数据块(若干数据颗粒)的冗余数据(校验数据),同时通过对所述数据块(例如,数据颗粒)执行异或(xor)函数,接收来自压缩单元210的所述数据块(若干数据颗粒)。在其他实施例中,wpa单元216在向存储设备110传送数据块之前,计算所述数据块的冗余数据(校验数据)。进一步地,在一些实施例中,wpa单元216可以在一个或多个存储设备110之间分布/传送部分和/或全部计算的冗余数据(校验数据),同时向相应存储设备(或存储驱动器)传送数据块。在进一步实施例中,wpa单元216向与冗余数据存储相关联的预先提供的存储器缓冲器传输完整冗余/校验数据,同时向与其他冗余数据存储相关联的其他预先提供的存储器缓冲器传输所述冗余/校验数据的部分。冗余数据/校验数据是计算值,用于在设备故障(例如,存储设备110的电源故障)后重建数据块,同时向存储设备110写入/传送数据块。
在一个实施例中,wpa单元216计算预先提供的存储器缓冲器中每个存储器缓冲器(例如,wpa颗粒存储器218的每个逻辑存储器缓冲器)的有效位。在一些实施例中,wpa单元216计算用于压缩数据的第一组预先提供的存储器缓冲器的有效位,并且并行计算与冗余数据相关联的第二组预先提供的存储器缓冲器的有效位。这允许wpa单元216与存储逻辑104的一个或多个其他部件合作,以在故障情况下提供系统100数据保证。在一些实施例中,wpa单元216可以执行故障设备的分析,并且基于存储在存储设备和/或wpa颗粒存储器218的预先提供的存储器缓冲器的冗余数据的部分,重建(多个)数据块。此外,wpa单元216与存储逻辑104的一个或多个其他部件合作维护每个冗余数据缓冲器的有效位,以便系统100能够保证将使用有效且一致的数据构建提供的缓冲器(例如,wpa颗粒存储器218的每个逻辑存储器缓冲器)。在一个实施例中,如在本文其他地方所描述的,wpa单元216发布命令,以基于预先配置的模板向存储设备110(后端非易失性存储设备)传送压缩数据块。
模板dma命令单元220是用于提供各种后端设备之间通信和操作灵活度的软件、代码、逻辑或例程。在一个实施例中,模板dma命令单元220接收来自wpa单元216的格式化dma命令,并向存储设备110和/或后端设备(或管理驱动器)传送来自wpa颗粒存储器218的存储器缓冲器的数据(例如,压缩数据块、冗余数据块等)。在一个实施例中,模板dma命令单元220接收用户定义和配置的dma模板。例如,用户通过客户端设备102呈现的应用,使用软件和/或任何其他软件/硬件配置定义dma命令的模板。在一些实施例中,模板dma命令单元220向wpa单元216传输所述dma命令的模板,并且wpa单元216修改所述dma命令的模板。由wpa单元216修改所述dma命令的模板可以包括但不限于修改字段,如sram偏移以使用、字节数以传送、方向、将数据块设为合适格式和将命令写入至存储设备110和/或后端设备(管理驱动器)的合适地址。
提交队列单元222是用于对存储数据进行排队的软件、代码、逻辑或例程。在一个实施例中,提交队列单元222接收数据(例如,32k数据块)并临时将所述数据存储在存储器缓冲器(未示出)中。例如,提交队列单元222可以临时将数据流存储在存储器缓冲器,同时在向一个或多个部件传输所述数据流以在其上执行动作和/或功能之前,等待所述一个或多个部件完成其他工作的处理。在一些实施例中,提交队列单元222接收32k数据块,并对所述32k数据块进行分配以存储在一个或多个存储设备110中。在进一步实施例中,提交队列单元222接收来自wpa颗粒存储器218的数据流,并向存储设备110传输所述数据流以进行存储。
图3是展示了根据本文中所描述技术的示例300写入页分配单元216的框图。如在图3中所描绘的,写入页分配单元216耦合在压缩单元210和交换机106(未在图3中描绘)之间。在此实施例中,写入页分配单元216包括:队列302、分配逻辑304、wpa颗粒存储器218和模板dma命令单元220。
在一个实施例中,压缩单元210a经由信号线316与分配逻辑304通信地耦合。在一些实施例中,压缩单元210a向分配逻辑304传输消息。所述消息可以包括,但不限于,指示用于自压缩单元210a向wpa单元216的队列302传送的若干数据颗粒的请求。在一个实施例中,分配逻辑304向压缩单元210a传输回复消息以确认所述请求。响应于传输所述消息和所述回复消息,压缩单元210a经由信号线310向队列302传输所述若干数据颗粒,以供进一步处理。
在一个实施例中,分配逻辑304经由信号线312在队列302中检索所述若干数据颗粒。在一些实施例中,分配逻辑304基于时间间隔检索所述若干数据颗粒。例如,分配逻辑304第一次在队列302中检索所述若干数据颗粒的一部分,并且第二次在队列302中检索所述若干数据颗粒剩余部分。在进一步实施例中,如在本文其他地方所描述的,响应于在队列302中检索数据颗粒,分配逻辑304经由信号线314向wpa颗粒存储器218分配所述数据颗粒。在其他实施例中,分配逻辑304在向wpa颗粒存储器218分配所述数据颗粒的同时,计算与所述数据颗粒的每个数据颗粒相关联的冗余数据,并将所述冗余数据存储在wpa颗粒存储器218中。
在一些实施例中,分配逻辑304将数据颗粒分组成预定数据大小段,并且将所述预定数据大小段存储在wpa颗粒存储器218中。例如,分配逻辑304接收来自压缩单元210a的512字节数据颗粒,然后分配逻辑304分组并存储传入512字节数据颗粒直至满足预定数据大小段(例如,32k块),并经由信号线120向存储设备110b传输所述预定数据大小段。在进一步实施例中,wpa颗粒存储器218可以包括,但不限于,反映与存储设备110相关联的存储槽的预定数据大小段。在其他实施例中,模板dma命令单元220经由信号线120向存储设备110b传输来自wpa颗粒存储器218的所述预定数据大小段。
返回参照图3,在一个实施例中,模板dma命令单元220起到直接存储器访问控制器的功能。模板dma命令单元220经由信号线318与分配逻辑304且经由信号线120与存储设备110b通信地耦合。在一些实施例中,模板dma命令单元220经由信号线120向存储设备110b传送直接来自wpa颗粒存储器218的数据颗粒和冗余数据。在进一步实施例中,模板dma命令单元220经由信号线120传送来自存储设备110b的数据颗粒和冗余数据,并将其存储在wpa颗粒存储器218中。在其他实施例中,模板dma命令单元220经由信号线120向相应存储设备110传送预定数据大小段(例如,包括多个数据颗粒的32k数据块)和/或存储在wpa颗粒存储器218中的冗余数据。
图4是展示了根据本文中所描述技术的示例数据通过写入页分配单元216的框图。如在图4中所描绘的,该配置包括多个压缩单元210a至210n、wpa单元216、wpa颗粒存储器218和多个存储设备110a至110n。
在一个实施例中,压缩单元210a至210n接收数据块。例如,压缩单元210a至210n接收大小为4k字节的数据块。在一个实施例中,压缩单元210a-210n将所述数据块自数据块的(第一)大小(例如,4k字节数据大小)减少(压缩)为若干数据颗粒。例如,压缩单元210a-210n接收4k字节的数据块。然后,压缩单元210a-210n将第一数据大小(4k)的4k数据块减少为具有第二数据大小(例如,512字节)的若干数据颗粒。在进一步实施例中,压缩单元210a-210n向wpa单元216传输具有数据大小的若干数据颗粒以在其上执行动作和/或功能。
返回参照图4,wpa单元216接收来自压缩单元210a至210n的若干数据颗粒,并且分配所述若干数据颗粒以存储在wpa颗粒存储器218中。在一个实施例中,如在本文其他地方所描述的,wpa单元216基于预定数据布局映射向wpa颗粒存储器218分配若干数据颗粒。在一些实施例中,wpa单元216在向wpa颗粒存储器218分配所述数据颗粒的同时,计算与所述数据颗粒的每个数据颗粒相关联的冗余数据,并将所述冗余数据存储在wpa颗粒存储器218中。在一些实施例中,wpa单元216将数据颗粒分组成预定数据大小段,并且将所述预定数据大小段存储在wpa颗粒存储器218中。例如,wpa单元216接收来自压缩单元210a-210n的512字节数据颗粒,然后wpa单元216分组传入512字节数据颗粒并将所述512字节数据颗粒存储在wpa颗粒存储器218中,直至满足预定数据大小段(例如,32k块数据块)。一旦满足预定数据大小段,wpa单元216向一个或多个存储设备110a至110n传输所述预定数据大小段。
图5是根据本文中所描述技术的用于实现跨设备冗余方案的示例方法500的流程图。方法500可以通过接收502分配若干数据颗粒的请求来开始。在一个实施例中,wpa单元216接收来自压缩单元210的向wpa颗粒存储器218分配若干数据颗粒的请求。在一些实施例中,压缩单元210向wpa单元216传输请求消息。所述请求消息可以包括,但不限于,指示用于自压缩单元210向wpa单元216的wpa颗粒存储器218传送的若干数据颗粒的信息。在一个实施例中,wpa单元216向压缩单元210传输回复消息以同意所述请求。在一些实施例中,步骤502中执行的操作可以由wpa单元216与系统100的一个或多个其他部件协作执行。
然后,响应于接收所述请求,方法500继续执行504对与wpa单元216相关联的预定数据布局映射的分析。在一个实施例中,压缩单元210与wpa单元216合作执行所述预定数据布局映射的分析。wpa单元216的预定数据布局映射可以包括数据,如但不限于,与所述预定数据布局映射相关联的活动写入页的不可用位置数据和若干可用(不受限制)位置数据。然后,方法500可以继续基于所述分析,分配或标识506所述若干数据颗粒以与wpa颗粒存储器218相关联,同时在分配期间计算与若干数据颗粒相关联的冗余数据。在一个实施例中,wpa单元216向wpa颗粒存储器218分配所述数据颗粒,同时计算与所述数据颗粒相关联的冗余数据。在一些实施例中,该方法还可以在wpa颗粒存储器218中同时存储所述颗粒和所述冗余数据。
然后,方法500可以前进至判定508是否达到与wpa颗粒存储器218段相关联的阈值。在一个实施例中,所述wpa颗粒存储器218段包括若干数据颗粒和/或冗余数据。在一些实施例中,wpa颗粒存储器218接收数据颗粒,并且将所述数据颗粒存储在wpa颗粒存储器218(段)的预定数据大小段中。例如,wpa单元216接收来自压缩单元210的512字节数据颗粒,并将所述512字节数据颗粒分组直至满足(例如,32k字节块)预定数据大小段(例如,阈值)。步骤508中执行的操作可以由wpa单元216与系统100的一个或多个其他部件协作执行。
然后,响应于满足所述wpa颗粒存储器218段的所述阈值,方法500可以继续向一个或多个存储设备110传输510存储在所述wpa颗粒存储器218段中的若干数据颗粒。在一个实施例中,模板dma命令单元220向一个或多个存储设备110传输存储在所述wpa颗粒存储器218段中的若干数据颗粒。在传输所述段并且确定存储后,将从wpa颗粒存储器218删除所述段,从而确保完全容错阻止由于电源故障或设备故障产生的任何数据丢失。本领域技术人员将会认识到,以上描述的段和颗粒大小仅用于示例展示。段和颗粒的各种其他大小被视为在本发明的范围内。
图6a和6b是根据本文中所描述技术的用于实现跨设备冗余方案的另一示例方法600的流程图。方法600通过接收602数据块开始。在一个实施例中,命令队列单元208接收数据流,所述数据流包括一个或多个数据块,并向压缩单元210传输所述一个或多个数据块。在一些实施例中,命令队列单元208接收数据包,并向压缩单元210传输所述数据包。在进一步实施例中,压缩单元210接收来自一个或多个设备(未描绘)的数据块。
然后,方法600可以继续确定604所述数据块的大小。在一个实施例中,命令队列单元208接收数据流,所述数据流包括一个或多个数据块,并确定每个数据块的数据大小。例如,命令队伍单元208接收来自一个或多个设备的数据块,并确定每个数据块的数据大小是4k字节。在一些实施例中,命令队列单元208向压缩单元210传输所述数据块和标识每个数据块的数据大小的相应元数据。步骤604中执行的操作可以由命令队列单元208与压缩单元210和/或系统100的一个或多个其他部件协作执行。
然后,方法600可以前进至基于所述数据块的大小,将所述数据块压缩606为多个数据颗粒。在一个实施例中,压缩单元210接收来自命令队列单元208的数据块和与每个数据块相关联的相应元数据,所述相应元数据标识相关联的数据块的数据大小。在一些实施例中,压缩单元210基于每个数据块的数据大小,将自命令队列单元208接收到的所述数据块压缩为多个数据颗粒。应该理解的是,压缩单元210可以基于各种不同因素将传入数据块压缩为不同数量的颗粒,所述不同因素包括压缩类型、输入数据类型、压缩特征等。例如,压缩单元210接收大小为4k的数据块,然后压缩单元210可以将所述数据块压缩为任何数量的512字节数据颗粒。
然后,方法600可以继续向队列302中传输608所述若干数据颗粒。在一个实施例中,在将数据块压缩为若干数据颗粒后,压缩单元210向wpa单元216的队列302传输若干数据颗粒。在一些实施例中,队列302可以呈队列调度器的形式,并且压缩单元210可以基于所述队列调度器中的位置,向wpa单元216传输若干数据颗粒。步骤608中执行的操作可以由命令队列单元208与压缩单元210和/或系统100的一个或多个其他部件协作执行。
然后,方法600可以前进至从队列302中检索610所述若干数据颗粒。在一个实施例中,wpa单元216在队列302中连续地检索固定数量的数据颗粒。然后,方法600可以继续通过执行对与wpa颗粒存储器218相关联的预定数据布局映射的分析,确定612在wpa颗粒存储器218中用于存储所述若干数据颗粒的位置。在一个实施例中,wpa单元216与压缩单元210合作通过执行对与wpa颗粒存储器218相关联的预定数据布局映射的分析,确定在wpa颗粒存储器218中用于存储所述若干数据颗粒的位置。在一个实施例中,所述由wpa单元216执行的分析可以包括,但不限于,标识与预定数据布局映射相关联的当前数据填充位置和若干不受限制颗粒位置(例如,未填充颗粒位置)。在一些实施例中,步骤612中执行的操作可以由wpa单元216与系统100的一个或多个其他部件协作执行。
然后,方法600可以继续基于所述分析,向wpa颗粒存储器218中的位置存储614所述若干数据颗粒。然后,方法600可以继续向wpa颗粒存储器218中的所述位置存储所述若干数据颗粒的同时,计算616与所述若干数据颗粒相关联的冗余数据。然后,方法600可以前进至向wpa颗粒存储器218中的所述位置存储618与所述若干数据颗粒相关联的所述冗余数据。
然后,方法600可以继续判定620是否满足与wpa颗粒存储器218中所述位置相关联的阈值,wpa颗粒存储器218中所述位置包括所述若干数据颗粒和所述冗余数据。如果不满足与wpa颗粒存储器218中所述位置相关联的所述阈值,方法600可以返回至框614。否则,如果满足与wpa颗粒存储器218中所述位置相关联的所述阈值,则方法600可以前进至向一个或多个存储设备110传输622存储在wpa颗粒存储器218位置中的所述若干数据颗粒,并且方法600可以结束。
图7是展示了根据本文中所描述技术的写入页分配单元216所见的数据布局的示例图形表示。如在图7中所描绘的,数据布局映射700可以包括报头702、数据块704和保留数据块706。在一个实施例中,wpa单元216基于数据布局映射700,在多个设备之间并行写入数据。例如,与数据布局映射700的数据块704相关联的位置可以对应于用于在一个或多个存储设备110上存储数据块704的位置。在一些实施例中,数据块704可以与自客户端设备(例如,客户端设备102)接收的用户数据相关联。用户数据可以包括,但不限于,文档、邮件、多媒体数据(例如,音频、视频、音频和视频组合)、图形文件、定性数据、定量数据、应用等。在进一步实施例中,数据块704与预定数据大小(例如,512字节、4k字节、32k字节)相关联。例如,如在本文其他地方所描述的,数据块704可以表示由压缩单元210压缩的压缩数据块(512字节数据颗粒)。
返回参照图7的数据布局映射700,在一个实施例中,报头702可以包括与列和/行的相应数据块相关联的信息,所述列和/行与信息数据布局映射700相关联。例如,报头702可以指示颗粒位置。参考数据布局映射700,颗粒位置可以指示数据块的位置。例如,颗粒位置可以表示存储设备110上数据块的逻辑位置和物理存储位置之间的映射。在一些实施例中,报头702可以包括与数据布局映射700的数据块704/706相关联的额外预定义信息(例如,报头s000、s100、s200等)。由报头702提供的额外预定义信息的非限制性示例可以包括信息,如对特定存储设备的引用id、用于所述特定存储设备的信道的第一指示符和特定存储设备中子信道的第二指示符。在进一步实施例中,报头702可以与包括一个或多个驱动器单元的后端存储设备110相关联。
返回参照图7的数据布局映射700,在一个实施例中,数据布局映射700描绘了保留数据块706(例如,校验行)。在一些实施例中,可以将每个保留数据块706保留用于异或(raid)校验颗粒条目。在进一步实施例中,如在本文其他地方所描述的,基于传入压缩数据块(512字节数据颗粒和/或32k字节数据段),修改和更新保留数据块706。例如,随着传入压缩数据颗粒的压缩数据块传入数据布局映射700,读和修改相应校验颗粒(保留数据块706的冗余数据块)以反映与所述压缩数据块相关联的新数据。在一个实施例中,如在本文其他地方所描述的,一旦计算和更新相应数据块704的校验颗粒(保留数据块),保护所述压缩数据块免遭设备故障(例如,存储设备110)或电源故障。在一些实施例中,框(h0、h1和h2至h6)可以反映与特定数据块相关联的冗余/校验数据。在进一步实施例中,wpa单元216生成与数据块相关联的冗余数据,所述冗余数据可以被分为段且在s100-s020之间分布,用于在发生设备故障时重建所述数据块。例如,h0可以是数据块的完整(总)冗余/校验数据,而h1-h6可以包括所述数据块的所述冗余/校验数据的部分。因此,响应于接收数据块的设备(例如,s100)的设备故障,wpa单元216和/或系统100的其他部件可以使用存储在不同设备/驱动器(s200-s020)上的冗余/校验数据重建与设备/驱动器故障相关联的丢失数据块。
图8是展示了根据本文中所描述技术的展示了跨越多个后端存储设备的设备列的800数据布局映射的示例图形表示。如在图8中所描绘的,数据布局映射800可以包括报头802、数据块804和冗余数据块806。在一个实施例中,系统100的一个或多个部件基于数据布局映射800,在多个设备(例如,存储设备110a-110n)之间并行写入数据。例如,与数据布局映射800的一个或多个数据块804相关联的一个或多个位置可以对应于用于在存储设备110上存储数据块804的位置。在一些实施例中,数据块804可以是特定数据大小。例如,如在本文其他地方所描述的,数据块804可以表示由压缩单元210压缩(减少)为预定数据大小的压缩数据块(512字节数据颗粒和/或32k数据段)。在未示出的进一步实施例中,所述多个设备可以形成单个后端设备单元(du)。
返回参照图8的数据布局映射800,在一个实施例中,报头802可以包括与列和/行的相应数据块相关联的信息,所述列和/行与信息数据布局映射800相关联。例如,报头802可以指示(例如,作为后端设备单元成员的存储器设备和/或多个存储器设备中的)颗粒位置。参考数据布局映射800,颗粒位置可以指示数据块的位置。在一个实施例中,颗粒位置可以表示存储设备110上数据块的逻辑位置和物理存储位置之间的映射。在一些实施例中,报头802可以包括与数据布局映射800的数据块804/806相关联的额外预定义信息。由报头802提供的额外信息的非限制性示例可以包括信息,如对特定存储设备的引用id、用于所述特定存储设备的信道的第一指示符和特定存储设备中子信道的第二指示符。
在一些实施例中,报头802可以与包括一个或多个驱动器单元的后端存储设备相关联。在一个实施例中,系统100的一个或多个部件可以基于设备类型(例如,单个存储器后端单元、包括驱动器单元的后端单元),修改和更新与报头802相关联的信息。例如,与包括一个或多个驱动器单元的后端存储设备相关联的预定义信息可以包括信息,如但不限于,驱动器id、一个或多个驱动器内的段偏移和驱动器和/或数据布局映射的段中的扇区偏移。返回参照图8的数据布局映射800,在一个实施例中,数据布局映射800描绘了冗余数据块806(例如,校验行)。在一些实施例中,冗余数据块806的每个冗余数据块可以反映校验颗粒条目。在进一步实施例中,如在本文其他地方所描述的,基于传入压缩数据块,修改和更新冗余数据块806。例如,随着压缩数据块(数据颗粒和/或32k数据段)被映射到(wpa单元216的)数据布局映射800,读和修改相应校验颗粒(冗余数据块806的冗余数据块)以反映与所述压缩数据块相关联的新数据。在一个实施例中,如在本文其他地方所描述的,一旦计算和更新相应数据块804的校验颗粒(冗余数据块),保护所述压缩数据块免遭设备(例如,存储设备110)电源故障。
以下描述了用于提供实现跨设备冗余方案的高度可靠系统的系统和方法。在以上描述中,出于解释的目的,阐述了许多具体的细节。然而,可能显而易见的是,可以在没有任何这些具体细节给定子集的情况下实践所公开的技术。在其他实例中,以框图的形式示出了结构和设备。例如,参考用户界面和特定硬件,以上在一些实施方式中描述了所公开的技术。而且,以上所公开的技术主要针对在线服务;但是,所公开的技术适用于其他数据来源和其他数据类型(例如,回收如图像、音频、网页等其他资源)。
本说明书中对“一个实施方式”或“实施方式”的引用意味着结合该实施方式所描述的具体特征、结构、或特性包括在所公开技术的至少一个实施方式中。短语“在一个实施方式中”在本说明书中各地方的出现不一定全都引用相同的实施方式。
已经在对计算机存储器内数据位的操作的处理和符号表示方面呈现了以上详细描述的某些部分。通常,过程被认为是导致结果的自相一致的一序列步骤。这些步骤可以涉及物理量的物理操纵。这些量采用能够被存储、传递、组合、比较、以及以另外方式操纵的电或磁信号的形式。这些信号可以称为呈比特、值、元素、符号、字符、术语、数字等形式。
这些和类似的术语与适当的物理量相关联并且可以被视为应用于这些量的标记。如从现有讨论中明显看到,除非另外特别声明,否则应认识到,贯穿本说明书,使用如“处理”或“运算”或“计算”或“确定”或“显示”等术语的讨论可以指计算机系统或类似电子计算设备的动作和过程,所述计算机系统或类似电子计算设备对表示为计算机系统的寄存器和存储器的物理(电子)量的数据进行操纵并且将其转换成类似地表示为计算机系统存储器或寄存器或其他此类信息存储、传输或显示设备中的物理量的其他数据。
所公开的技术还可涉及一种用于执行本文中的操作的装置。该装置可以是为了所需目的而特别构造的,或者它可以包括通过存储在计算机中的由计算机程序选择性地激活或重新配置的通用计算机。这种计算机程序可以存储在计算机可读存储介质中,例如但不限于任何类型的磁盘,包括软磁盘、光盘、cd-rom、以及磁盘、只读存储器(rom)、随机存取存储器(ram)、eprom、eeprom、磁性或光学卡、包括usb密钥且具有非易失性存储器的闪存,或任何类型的适合于存储电子指令并且连接到计算机系统总线上的介质。
所公开的技术可以采用完全硬件实施方式、完全软件实施方式或包含硬件和软件元件两者的实施方式的形式。在一些实施方式中,通过软件实现技术,所述软件包括但不限于固件、驻留软件、微代码等。
进一步地,所公开的技术可以采用计算机程序产品的形式,可以从提供由计算机或任何指令执行系统使用或者与其结合使用的程序代码的非瞬态计算机可使用或计算机可读介质访问所述计算机程序产品。为了本申请的目的,计算机可使用或者计算机可读介质可以是任何包含、存储、传达、传播或传输由指令执行系统、装置或设备使用或者与其结合使用的程序的装置。
适合于存储和/或执行程序代码的计算机系统或数据处理系统将包括至少一个处理器(例如,硬件处理器),所述处理器经由系统总线直接或间接耦合至存储器元件。所述存储器元件可以包括在实际执行程序代码时采用的本地存储器、大容量存储器和高速缓冲存储器,所述高速缓冲存储器提供临时存储至少一些程序代码,以便减少执行时必须在大容量存储器中检索代码的次数。
输入/输出或i/o设备(包括但不限于键盘、显示器、指点设备等)可以直接或通过介于其间的i/o控制器耦合至系统。
网络适配器也可以耦合至系统,以使数据处理系统通过介于其间的私有或公共网络耦合至其他数据处理系统或远程打印机或存储设备。调制解调器、缆线调制解调器和以太网卡仅是少数当前可用的网络适配器类型。
最后,本文呈现的处理器和显示器可能不是固有地与任何特定计算机或其他装置相关。各种通用系统可以与根据本文中的教导的程序一起使用,或者可以证明构建更加专用的装置来执行所需的方法步骤是方便的。多种这些系统所需的结构将出现在以下描述中。此外,没有引用任何具体的编程语言来描述所公开的技术。应认识到,各种编程语言可以用于实现如在本文中所描述的技术的教导。
出于说明和描述的目的,提供了先前的本技术实施方式描述。未旨在详尽地展示或将本技术限制在所公开的确切形式。鉴于以上教导,可以做出许多修改和变更。本技术的范围旨在不受此详细说明的限制。可以以其他具体形式实现技术而不偏离其精神或必要特征。同样,模块、例程、特征、属性、方法和其他方面的特定命名和分割不是必需遵守的或者不是重要的,并且实现本技术或其特征的机制可以有不同的名称、分割和/或格式。进一步地,本技术的模块、例程、特征、属性、方法和其他方面可以被实现为软件、硬件、固件、或任何三者的组合。另外,在部件(其示例是模块)被实现为软件的情况下,所述部件可以被实现为独立的程序、更大程序的一部分、多个单独的程序、静态或动态链接库、内核可加载模块、设备驱动程序、和/或计算机编程现在已知或将来知晓的每一个和任何其他方式。另外,本技术绝不限于使用任何具体编程语言或者用于任何具体操作系统或环境的实现。因此,本技术的公开旨在说明而非旨在限制。