用于存储器系统的纠错码分布的方法和系统
技术领域
本公开内容总体上涉及计算机存储器,并且更具体地涉及存储器系统中的纠错码分布。
背景技术
计算机系统在启动和操作时经常需要相当数量的高速随机访问存储器(RAM)来临时保存诸如数据和程序之类的信息。该信息在正常情况下是二进制的,由被称作数据比特的1和0的模式所组成。该数据比特经常以更高级别进行分组和组织。例如,字节经常由八个比特所组成;更一般地,这些分组或字节被称作符号并且可以由任意数量的比特或子符号所构成。
存储器设备的密度随着计算机系统变得越来越强大而持续增长。在一些情况下,单个计算机的RAM内容能够由数百万亿个比特所组成。不幸的是,仅单个RAM设备的一部分就会导致全系统范围的问题。当发生可能为“硬”(重复)或“软”(一次性或间歇性)故障的存储器错误时,这些故障可能会作为单个单元、多个比特、整个芯片或整个存储器模块的故障出现,并且全部或部分的系统RAM可能会无法使用直至其被修复。修复轮转(turn-around)时间可能是数小时或者甚至数日,这会对依赖于计算机系统的事务造成实质性影响。在具有存储器模块阵列的系统(例如,服务器)中,发生故障的存储器模块可以被临时隔离而并不导致系统瘫痪,以便维持系统操作。然而,这将导致整体系统存储器的存储器损失并且将对性能造成不利影响。
在正常操作期间遇到RAM故障的概率随着同时代计算机中的存储器存储数量的增长而持续增加。纠错码(ECC)在更为鲁棒的系统中得到使用并且通常被共同存储在附加设备中以检测并纠正具体的错误条件。存储器系统架构通常需要选择EEC实现以纠正一个或两个存储器设备中的许多错误比特,或者一个或多个比特的纠错能够跨许多存储器设备来提供。
发明内容
根据一个实施例,一种存储器系统包括多个存储器设备以及操作地耦合至所述存储器设备的存储器控制器。所述存储器控制器被配置为将写数据划分为多个数据块,其中所述数据块中的每个数据块与所述存储器设备之一相关联。所述存储器控制器进一步被配置为生成与所述数据块中的每个数据块相对应的局部纠错码(ECC)的实例,并且将所述数据块中的每个数据块与相对应的、局部ECC的实例相合并,以针对所述存储器设备中的每个存储器设备形成经编码的数据块。此外,所述存储器控制器被配置为将所述经编码的数据块中的每个经编码的数据块写入到所述存储器设备,而使得所述存储器设备中的每个存储器设备存储所述数据块中具有所述相对应的所述局部ECC的实例的一个数据块。在所述存储器系统中还可以包括全局ECC以及所述全局ECC的局部ECC。
根据另一个实施例,一种方法包括将写数据划分为多个数据块,其中所述数据块中的每个数据块与所述存储器设备之一相关联。生成与所述数据块中的每个数据块相对应的局部纠错码(ECC)的实例。将所述数据块中的每个数据块与所述相对应的、所述局部ECC实例相合并,以针对所述存储器设备中的每个存储器设备形成经编码的数据块。将经编码的数据块中的每个经编码的数据块写入到所述存储器设备,而使得所述存储器设备中的每个存储器设备存储所述数据块中具有相对应的局部ECC的实例的一个数据块。还可以包括全局ECC以及所述全局ECC的局部ECC。
根据另外的实施例,一种计算机程序产品包括可由处理电路读取并且存储有由所述处理电路执行以便执行一种方法的指令的有形存储介质。所述方法包括将写数据划分为多个数据块,其中所述数据块中的每个数据块与多个存储器设备之一相关联。生成与所述数据块中的每个数据块相对应的局部纠错码(ECC)的实例。将所述数据块中的每个数据块与相对应的、所述局部ECC的实例相合并,以针对所述存储器设备中的每个存储器设备形成经编码的数据块。将所述经编码的数据块中的每个经编码的数据块写入到所述存储器设备,而使得所述存储器设备中的每个存储器设备存储所述数据块中具有所述相对应的所述局部ECC的实例的一个数据块。还可以包括全局ECC以及所述全局ECC的局部ECC。
附图说明
图1图示了依据实施例的包括存储器系统的处理系统的框图;
图2图示了图1的存储器系统的实施例的框图;
图3图示了图1的存储器系统的另一个实施例的框图;
图4图示了图1的存储器系统的另一个实施例的框图;
图5图示了依据实施例的存储器控制器的框图;
图6是依据实施例的编码处理的流程图;
图7是依据实施例的另一种编码处理的流程图;
图8是依据实施例的另外的编码处理的流程图;
图9是依据实施例的另外的编码处理的流程图;以及
图10是依据实施例的纠错处理的流程图。
具体实施方式
在实施例中,存储器总线上的存储器设备群组中的每个存储器设备(例如,动态随机访问存储器或DRAM)包括基于数据块和存储器设备所计算的局部纠错码(ECC)。作为一个示例,九个存储器设备均具有8比特的设备数据总线宽度并且支持8的脉冲长度。因此,针对存储器设备的每个脉冲写入包括多达513比特的数据以及63比特的局部ECC,它们可以被分配为每个存储器设备的57比特的数据和7比特的局部ECC。向每个存储器设备分配局部ECC比特可以在每个存储器设备中支持多个错误,例如一个或两个比特反转。除了每个设备的局部ECC值之外,通过增加全局ECC存储存储器设备来存储跨全部存储区设备所计算的全局ECC能够实现额外的故障模式覆盖。全局ECC能够针对整个存储器设备的故障或者单个存储器设备中的单/双比特故障进行纠正。全局ECC存储存储器设备自身可以具有局部ECC值以保护全局ECC数据。局部ECC和全局ECC值可以结合使用以对可能无法以其它方式纠正的多种错误模式进行纠正。
图1图示了依据实施例的用于在存储器中存储并取回数据的处理系统100的框图。图1所描绘的处理系统100包括计算机处理器102,包括存储器设备的存储器106,以及用于从计算机处理器102接收数据以便存储在存储器106中的存储器控制器104。存储器控制器104和存储器106被共同称作存储器系统105。此外,存储器106还可以包括一个或多个全局ECC存储存储器设备。
在一个实施例中,存储器控制器104耦合至计算机处理器102并且从计算机处理器102接收写请求和读请求。当接收到写请求时,存储器控制器104生成任意所需的ECC值以支持存储器系统105的ECC架构,诸如存储器106的局部ECC值或者局部和全局ECC值。如这里进一步描述的,存储器控制器104将数据和ECC值写入到存储器106。类似地,如这里进一步描述的,存储器控制器104使用在读操作取回的诸如局部ECC值或者局部和全局ECC值二者之类的ECC值来检测并纠正从存储器106所读取的数据中的错误。
处理系统100是可以被用来执行这里所描述的处理的配置的一个示例。虽然处理系统100已经被描绘为仅具有一个计算机处理器102和存储器控制器104,但是将要理解的是,其它实施例也可以在具有两个或更多计算机处理器102或存储器控制器104的系统中进行操作。计算机处理器102也可以被称作处理电路(processing circuit)或处理电路装置(processing circuitry),并且可以包括多个处理核或者被分布于多个设备上。存储器106可以表示任意数量的存储器设备,其包括被组织为分级、模块、栈或平面配置的存储器设备的多个群组。在一个实施例中,存储器106、存储器控制器104和计算机处理器102并非位于相同的计算机内。例如,存储器106和存储器控制器104可以位于一个物理位置(例如,在存储器模块上)而计算机处理器102则位于另一个物理位置(例如,计算机处理器102经由网络访问存储器控制器104)。此外,这里所描述的部分处理的范围可以涉及存储器106、存储器控制器104和计算机处理器102中的一个或多个。
图2图示了作为存储器系统200的图1的存储器系统105的实施例的框图。存储器系统200包括图1的存储器控制器104和作为图1的存储器106的多个存储器设备202。每个存储器设备202能够存储数据值204和ECC值206。虽然图2出于图示的目的而将ECC值206描绘为每个存储器设备202中的列或条,但是ECC值206可以在每个存储器设备202内以任意模式进行分布。ECC值206针对每个存储器设备202以数据块为基础生成。存储器控制器104经由存储器总线208操作地耦合至存储器设备202。例如,每个存储器设备202可以具有8比特的输入/输出(I/O)宽度(W)并且支持8的脉冲串长度(BL),而使得跨九个存储器设备202的单次读或写操作产生8个72比特的传输(总共576比特)作为存储器控制器104和存储器设备202之间的存储器总线208上的脉冲209。
在每次写操作时,存储器设备202均接收包括数据块212和对应于数据块212的局部ECC 214的经编码的数据块210。类似地,在每次读操作时,存储器202均返回包括数据块212和局部ECC 214的经编码的数据块210。局部ECC 214针对每个相对应的数据块212生成而形成经编码的数据块210以针对每个存储器设备202校正比特错误。经编码的数据块210中的术语“编码”是指数据块与相对应的局部ECC实例相合并而形成更大的块结构的部署形式。共同地,跨存储器设备202进行分布的局部ECC 214能够在每次读操作对每个数据块212中的一个或两个比特错误进行纠正。
在图2的示例中,每个经编码的数据块210包括数据块212中的57个比特以及局部ECC 214中的7个比特而形成(57,7)的单错纠正双错检测(single error correction-double error detection,SEC DED)码。在该示例中,每个数据块212包括奇数数量的比特,并且每个局部ECC实例也包括奇数数量的比特,而使得经编码的数据块210中的比特总数为偶数(例如,总共64比特)。如果图1的计算机处理器102所提供的写数据包括例如64字节的用户数据(512比特的数据),则除了64字节的用户数据之外可以添加一个比特作为专用比特216,而形成被划分为与图2的九个存储器设备202相关联的九个数据块212的写数据。专用比特216可以包括在跨脉冲209的经编码的数据块210的任意预定位置。专用比特216能够在作为数据块212之一中的任意数据比特出现时由存储器控制器104进行解释。专用比特216能够增加另一级别的变化以保护数据值204。作为非限制性示例,专用比特216可以是奇偶比特或反转比特。奇偶比特可以通过在划分为数据块212之前跨所有写数据比特应用异或运算进行确定。反转比特可以被用来将数据值204中所存储的值进行反转以检测卡(stuck)比特或减少存储设备202中的物理单元位置的设备磨损。
图3图示了作为存储器系统300的图1的存储器系统105的另一实施例的框图。类似于图2的存储器系统200,图3的存储器系统300包括图1的存储器控制器104和作为图1的存储器106的实施例的多个存储器设备202。每个存储器设备202能够存储数据值204和ECC值206二者。与图2中一样,存储器系统300包括九个存储器设备202;然而,存储器系统300还包括可经由存储器总线208操作耦合至存储器控制器104的全局ECC存储存储器设备302。存储器设备202和全局ECC存储存储器设备302二者可以具有相同的物理结构,但是在每个设备202和302中所存储的数据/校验值的类型和使用则有所变化。
全局ECC存储存储器设备302能够存储全局ECC值304以及与全局ECC值304相关联的局部ECC值306二者。全局ECC值304提供跨存储器设备202的ECC覆盖而局部ECC值306则提供针对全局ECC值304的ECC覆盖,这类似于关于数据值204的ECC值206。全局ECC值304可以仅基于存储器设备202中的数据值204,或者基于存储器设备202中的数据值204和ECC值206的组合。
从存储器设备202和全局ECC存储存储器设备302进行的读取或者对它们进行的写入能够共同作为脉冲309来执行。在图3的示例中,脉冲309包括九个经编码的数据块210以及一个经编码的全局ECC块310,其中每个存储器设备202一个经编码的数据块210。每个经编码的数据块210包括数据块212和局部ECC 214。编码全局ECC块310包括全局ECC块312和局部ECC 314。类似于图2的示例,在跨脉冲309中的经编码的数据块210的任意预定位置中可以包括专用比特216。在图3的示例中,每个数据块212包括57个比特并且每个局部ECC214为7个比特。类似地,全局ECC块312可以包括57个比特,并且局部ECC 314可以包括7个比特。
图4图示了作为存储器系统400的图1的存储器系统105的另一实施例的框图。类似于图3的存储器系统300,图4的存储器系统400包括图1的存储器控制器104、存储器设备202以及可经由存储器总线208操作耦合至存储器控制器104的全局ECC存储存储器设备302。在存储器系统400中,全局ECC存储存储器设备302存储全局ECC值304但是并不存储诸如图3的局部ECC值306的局部ECC值。全局ECC值304提供了跨存储器设备202的ECC覆盖。通过省略图3的局部ECC值306,有更大数量的比特可用于图4的全局ECC存储存储器设备302中的全局ECC值304。
从存储器设备202和全局ECC存储存储器设备302进行的读取或者对它们进行的写入能够共同作为存储器系统400中的脉冲409来执行。在图4的示例中,脉冲409包括九个经编码的数据块210和一个全局ECC块412,其中每个存储器设备202一个经编码的数据块210。每个经编码的数据块210包括数据块212和局部ECC 214。在图4中,没有经编码的全局ECC块或全局ECC块的局部ECC。用于图3的局部ECC 314的比特被添加至图4的全局ECC块412。因此,全局ECC块412的大小可以大于图3的全局ECC块312,并且全局ECC块412包括比任意一个数据块212中所包括的比特数量更大的比特数量。例如,图3的全局ECC块312可以包括57个比特,而图4的全局ECC块412则包括64个比特。全局ECC块412中附加的比特(例如,64个比特)能够被用来提供经编码的数据块210(例如,均64比特)的覆盖,而图3的全局ECC块312(例如,57个比特)则可以跨图3的全部数据块212(例如,均57个比特)或图3的全部经编码的数据块210(例如,均64个比特)进行计算。在可替换实施例中,全局ECC块412跨全部数据块212进行计算。
图5图示了依据示例性实施例的图1的存储器控制器104的框图。在图5的示例中,存储器控制器104包括可与图1的计算机处理器102操作地耦合的处理器总线接口502。存储器控制器104还包括可操作地耦合至图2-4的存储器总线208的存储器总线接口504。存储器控制器104还可以包括缓冲器506和分区控制508。缓冲器506被配置为从处理器总线接口502接收要被写入到图1的存储器106中的写数据516或者从图1的存储器106接收要用于图1的计算机处理器102的读数据518。写数据516和读数据518在缓冲器506中可以具有单独定义的位置,或者缓冲器506内的共用位置可以被用于写数据516或读数据518。分区控制508可操作以将来自缓冲器506的写数据516划分为多个数据块,诸如图2-4的数据块212。分区控制508还可以在从图1的存储器106接收到读数据518时将所接收的数据块组合到缓冲器506中。
ECC控制510管理分区、ECC生成、块编码/解码、纠错和重试逻辑的定序。存储器控制器104包括局部ECC逻辑512并且在一些实施例中可以包括全局ECC逻辑514。存储器控制器104的操作参考图6-10进一步进行描述。
图6是依据实施例所描绘的编码处理600的流程图。如图6所描绘的处理600是用于利用要被写入图2-4的每个存储器设备202的局部ECC对数据块进行编码的处理的高阶示例。出于解释的目的,处理600参考图1、2、5和6进行描述,但是可应用于图3和4的存储器系统300和400。
在框602,处理600开始。存储器控制器104可以在缓冲器506中接收来自计算机处理器102的要被写入存储器106的写数据516的块。在框604,分区控制508将写数据516划分为多个数据块212,其中每个数据块212与多个存储器设备202之一相关联。专用比特216可以被添加至数据块212之一。在框606,局部ECC逻辑512生成对应于每个数据块212的局部ECC 214的实例。在框608,ECC控制510将每个数据块212与相对应的局部ECC 214的实例进行合并以针对每个存储器设备202生成经编码的数据块210。在框610,每个经编码的数据块210被写入存储器设备202而使得每个存储器设备202存储具有相对应的局部ECC 214的实例的数据块212之一作为数据值204和ECC值206。在框612,处理600结束。
图7是依据实施例的另一种编码处理700的流程图。处理700是可以在图3的存储器系统300上执行的编码处理的示例。处理700参考图1、3、5和7进行描述。在框702,处理700开始。在框704,存储器控制器104在缓冲器506中接收来自计算机处理器102的写数据516。在该示例中,写数据518包括64个字节(512个比特)。在框706,ECC控制510将专用比特216添加至写数据516的512个比特而产生513个比特。如之前所描述的,专用比特216例如可以是奇偶位或反转位。在框708,分区控制508将513个比特划分为九个数据块212。在生成局部ECC214之前,专用比特216包括在数据块212之一中而使得专用比特216被局部和/或全局ECC所覆盖。
在框710,全局ECC逻辑514生成57比特的全局ECC作为全局ECC块312。在框712,局部ECC逻辑512为每个块212、312生成7比特的局部ECC,其中包括九个局部ECC 214的实例以及一个局部ECC 314的实例。ECC控制510将每个数据块212与相对应的局部ECC 214的实例进行合并以针对每个存储器设备202形成经编码的数据块210。ECC控制510还将全局ECC块312与局部ECC314进行合并以形成编码全局ECC块310。在框714,ECC控制510发起脉冲309的写入,其包括针对存储器设备202的九个经编码的数据块210以及针对全局ECC存储存储器设备302的一个经编码的全局ECC块310。在框716,处理700结束。
图8是依据实施例的另外的编码处理800的流程图。处理800是可以在图3的存储器系统300上执行的编码处理的另一个示例。处理800参考图1、3、5和8进行描述。在框802,处理800开始。在框804,存储器控制器104在缓冲器506中接收来自计算机处理器102的写数据516。在该示例中,写数据518包括64个字节(512个比特)。在框806,ECC控制器510将专用比特216添加至写数据516的512个比特而产生513个比特。如之前所描述的,专用比特216例如可以是奇偶位或反转位。在框808,分区控制508将513个比特划分为九个数据块212。在生成局部ECC 214之前,专用比特216包括在数据块212之一中而使得专用比特216被局部和/或全局ECC所覆盖。
在框810,局部ECC逻辑512生成7比特的局部ECC作为对应于九个数据块212中的每一个的局部ECC 214。ECC控制510将每个数据块212与局部ECC 214相对应的实例进行合并以针对每个存储器设备202形成经编码的数据块210。在框812,全局ECC逻辑514生成57比特的全局ECC作为跨所有数据块212或经编码的数据块210的全局ECC块312。在框814,局部ECC逻辑512针对全局ECC块312生成7比特的局部ECC 314。ECC控制510还将全局ECC块312与局部ECC 314进行合并以形成经编码的全局ECC块310。在框816,ECC控制510发起脉冲309的写入,其包括针对存储器设备202的九个经编码的数据块210以及针对全局ECC存储存储器设备302的一个经编码的全局ECC块310。在框818,处理800结束。
作为比较,图7的处理700是在与每个经编码的数据块210的局部ECC 214无关的情况下在数据块212上计算全局ECC块312的示例。图8的处理800则能够在包括数据块212和局部ECC 214的经编码的数据块210上计算全局ECC块312;然而,这导致了更长的处理,因为局部ECC 314在生成全局ECC块312之前无法被生成,并且全局ECC块312在生成局部ECC 214之后生成。
图9是依据实施例的另外的编码处理900的流程图。处理900是可以在图4的存储器系统400上执行的编码处理的示例。处理900参考图1、4、5和9进行描述。在框902,处理900开始。在框904,存储器控制器104在缓冲器506中接收来自计算机处理器102的写数据516。在该示例中,写数据516包括64个字节(512个比特)。在框906,ECC控制510将专用比特216添加至写数据516的512个比特而产生513个比特。如之前所描述的,专用比特216例如可以是奇偶位或反转位。在框908,分区控制508将513个比特划分为九个数据块212。在生成局部ECC214之前,专用比特216包括在数据块212之一中而使得专用比特216被局部和/或全局ECC所覆盖。
在框910,局部ECC逻辑512生成7比特的局部ECC作为对应于九个数据块212中的每一个的局部ECC 214。ECC控制510将每个数据块212与局部ECC 214相对应的实例进行合并以针对每个存储器设备202形成经编码的数据块210。在框912,全局ECC逻辑514生成64比特的全局ECC作为跨所有数据块212或经编码的数据块210的全局ECC块312。在框914,ECC控制510发起脉冲409的写入,其包括针对存储器设备202的九个经编码的数据块210以及针对全局ECC存储存储器设备302的一个全局ECC块412。在框916,处理900结束。
图9的处理900类似于图8的处理800,其区别在于不对全局ECC块412生成局部ECC。这与图3的全局ECC块312相比为全局ECC块412提供了另外的比特并且提供了更快的处理;然而,其除去了对全局ECC块412内的错误进行纠正的能力。
图10是依据实施例的纠错处理1000的流程图。出于解释的目的,处理1000参考图1、3、5和10进行描述,但是也可以应用于图4的存储器系统400。图10中所描述的校验的顺序并不需要线性执行并且可以以任意顺序执行或者被组合为单个操作。在框1002,处理1000开始。在框1004,存储器控制器104响应于来自计算机处理器102的读请求而从存储器106接收诸如脉冲309的脉冲。ECC控制510初始化全局ECC逻辑514和局部ECC逻辑512以基于对全局ECC存储存储器设备302和存储器设备202的读取而针对全局ECC错误以及一个或多个局部ECC错误进行校验。错误可以基于相对于全局或局部ECC分析所检测到的比特错误的估计数量而被识别为可纠正的或不可纠正的。如果检测到比可操作以进行纠正的给定ECC更多的比特错误,则不可纠正的错误被识别出。如果检测到最大的所支持错误或更少的错误(例如,至少一个错误),则可纠正的错误被识别出。关于与具体存储器设备202相关联的一个或多个局部ECC 214的分析能够指示针对具体存储器设备202存在不可纠正的错误,而相同脉冲309中的其它存储器设备202的数据块212则可能没有错误或具有可纠正的错误。
在框1006,执行校验以确定是否识别出全局ECC可纠正错误和局部ECC可纠正错误。在框1008,基于识别出全局ECC可纠正错误和局部ECC可纠正错误的确定,使用读全局ECC或读局部ECC(例如,从对应于读操作而从脉冲309所读取的全局ECC块312或局部ECC214、314)尝试进行纠错,并且ECC控制510在尝试纠错之后验证全局ECC可纠正错误或局部ECC可纠正错误均不存在。
在框1010,如果并未识别出全局ECC可纠正错误和局部ECC可纠正错误,则执行校验以确定是否识别出全局ECC可纠正错误和局部ECC不可纠正错误。在框1012,基于识别出全局ECC可纠正错误和局部ECC不可纠正错误的确定,使用读全局ECC来尝试纠错,并且ECC控制510验证在使用读全局ECC尝试纠错之后该局部ECC不可纠正错误被纠正或者是可纠正的。
在框1014,如果并未识别出全局ECC可纠正错误和局部ECC不可纠正错误,则执行校验以确定是否识别出全局ECC不可纠正错误和局部ECC可纠正错误。在框1016,基于识别出全局ECC不可纠正错误和局部ECC可纠正错误的确定,使用读局部ECC来尝试纠错,并且ECC控制510验证在使用读局部ECC尝试纠错之后该全局ECC不可纠正错误被纠正或者是可纠正的。即使识别出一个局部ECC不可纠正和全局ECC不可纠正错误,也可以在至少一个数据块212具有可纠正错误的情况下尝试进行局部ECC纠错,因为该纠错将使得其它纠错能够成功进行。在框1018,处理1000结束。
使用处理1000重新尝试纠错可以基于确定局部ECC不可纠正错误变换为局部ECC可纠正错误或者全局ECC不可纠正错误变换为全局ECC可纠正错误来执行。能够执行处理1000的多次迭代直至所有可纠正错误都被纠正或者不可纠正错误保持为不可纠正。
技术效果和益处包括跨存储器系统中的多个存储器设备分布局部ECC而使得能够并行地在多个存储器设备中进行比特错误的检测和纠正。包含全局ECC结合局部ECC能够应对(accommodate)整个存储器设备的故障并且进一步提升纠错能力。向全局ECC增加局部ECC使得纠错能力更为鲁棒。
术语在这里仅是出于对特定实施例进行描述的目的被使用而并非意在作为本发明的限制。如这里所使用的,除非另外明确指出,否则单数形式“一个”(“a”、“an”和“the”)意在也包括复数形式。将要进一步理解的,当在该说明书中使用时,术语“包含”、“包含了”、“包括”和/或“包括了”指明存在所指出的特征、整数、步骤、操作、元素和/或组件,但是并不排除存在或添加一个或多个其它的特征、整数、步骤、操作、元素、组件和/或其群组。
相对应的结构、材料、动作以及以下权利要求中的所有手段或步骤加上功能部件的等同形式意在包括用于结合如特别请求保护的其它请求保护的要素而执行功能的任意结构、材料或动作。该说明书中所公开的实施例的描述已经出于说明和描述的目的而给出,但是其并非意在是穷举的或者局限于所公开的形式。许多修改和变化对于本领域技术人员将是显而易见的而并不背离本发明实施例的范围和精神。选择并描述实施例以便对本发明的原理和实践应用进行最佳解释,并且使得本领域技术人员能够针对具有各种修改的各个实施例理解本发明,其中这些修改适用于所预期的特定使用。
所属技术领域的技术人员知道,本发明的各个方面可以实现为系统、方法或计算机程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明的各个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形存储介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
上面将参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些计算机程序指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其他设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article of manufacture)。
计算机程序指令还可以加载到计算机、其它可编程数据处理装置或者其它设备上而使得一系列操作步骤得以在计算机、其它可编程装置或其它设备上执行以产生计算机实施的处理而使得在计算机或其它可编程装置上执行的指令提供用于实施以流程图和/或框图中的一个或多个框中所指定的功能/动作的处理。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。