控制对磁盘阵列进行读写操作的方法和装置与流程

文档序号:12824276阅读:345来源:国知局
控制对磁盘阵列进行读写操作的方法和装置与流程

本公开的实施例总体上涉及存储技术领域,具体地,涉及一种控制对磁盘阵列进行读写操作的方法和装置。



背景技术:

磁盘阵列如独立磁盘冗余阵列(raid)在数据存储领域中有着广泛的应用,其利用数据和设备的冗余度而防止由于磁盘或者存储设备的失效造成的数据丢失。根据保护程度需求的不同,定义有不同的raid架构,例如常用的raid0、raid1、raid3、raid5、raid6、raid10等。通常,raid中的每个磁盘被逻辑地划分为固定存储容量大小的条带(stripe)。为了提高磁盘阵列的可靠性,利用冗余数据进行数据错误检测和修复,其中典型地,raid3、raid5、raid6采用异或奇偶校验来确保条带的数据冗余性。

一般而言,对于更多用作校验位置的磁盘,数据读写操作造成的磁盘磨损程度更高。然而,所有现有的传统条带式校验raid算法均具有子算法用于固定选择磁盘位置以存储条带校验,不能基于raid中所有磁盘的磨损状态动态平衡磁盘间的磨损。同时,固定选择校验位置的传统raid算法也不能控制或影响相同条带中磁盘的磨损程度。这导致raid磁盘磨损程度无法预计,更无法控制磨损程度的增长。



技术实现要素:

为了解决上述问题,本公开的实施例提出一种控制对磁盘阵列进行读写操作的解决方案,实现校验冗余磁盘阵列中磁盘的动态磨损程度平衡,进而使得能够控制或管理磁盘的失效顺序,并实现基 于策略的磁盘磨损控制。

根据本公开的实施例的一个方面,提供一种控制对磁盘阵列进行读写操作的方法,该磁盘阵列包括多个磁盘,跨该多个磁盘按固定存储容量大小划分条带,该方法包括:接收对条带进行写操作的命令;以及通过检索映射表,确定该条带的校验位置,该映射表记录了条带与在该条带中设置的校验位置之间的映射关系,该校验位置被设置在具有最小磨损程度的磁盘中。

根据本公开的实施例的一个实施例,进一步包括:当映射表中未记录该条带时,选择当前具有最小磨损程度的磁盘作为校验位置磁盘,并在该映射表中记录该条带和校验位置。

根据本公开的实施例的一个实施例,进一步包括:根据每个磁盘的平均擦写次数与最大擦写次数的比值,计算每个磁盘的实际磨损水平值并作为每个磁盘的磨损程度。

根据本公开的实施例的一个实施例,进一步包括:当满足更新触发条件时,对其中已经记录有所有条带的映射表进行更新。

根据本公开的实施例的一个实施例,更新触发条件包括以下一项或多项:

当从检测到映射表中已经记录有所有条带起,时间超过设定的时间阈值;

当从检测到映射表中已经记录有所有条带起,上层io请求计数超过设定的上层io请求计数阈值;

当从检测到映射表中已经记录有所有条带起,io大小超过设定的io大小计数阈值。

根据本公开的实施例的一个实施例,对其中已经记录有所有条带的映射表进行更新包括:重新计算每个磁盘的磨损水平值,基于最小磨损水平原则,定期对部分条带更新相应的校验位置;以及将更新后的部分条带与在这些条带中设置的校验位置之间的映射关系记录到映射表中。

根据本公开的实施例的一个实施例,对其中已经记录有所有条 带的映射表进行更新包括:重新计算每个磁盘的磨损水平值,基于最小磨损水平原则,定期将部分条带的数据位置和校验位置交换,进行数据迁移;以及将交换后的部分条带与在这些条带中设置的校验位置之间的映射关系记录到映射表中。

根据本公开的实施例的一个实施例,进一步包括:为每个磁盘设置基准磨损水平值,每个磁盘的磨损程度为其实际磨损水平值和基准磨损水平值之和。

根据本公开的实施例的一个实施例,进一步包括,动态调整基准磨损水平值。

根据本公开的实施例的一个实施例,进一步包括,基于用户需求动态调整基准磨损水平值。

根据本公开的实施例的第二个方面,提供一种控制对磁盘阵列进行读写操作的装置,该磁盘阵列包括多个磁盘,跨该多个磁盘按固定存储容量大小划分条带,该装置包括:接收单元,被配置为接收对条带进行写操作的命令;读写控制单元,被配置为通过检索映射表,确定该条带的校验位置;以及映射管理单元,被配置为在该映射表中记录条带与在该条带中设置的校验位置之间的映射关系,该校验位置被设置在具有最小磨损程度的磁盘中。

根据本公开的实施例的一个实施例,映射管理单元进一步被配置为:当映射表中未记录条带时,选择当前具有最小磨损程度的磁盘作为校验位置磁盘,并在映射表中记录条带和校验位置。

根据本公开的实施例的一个实施例,读写控制单元进一步被配置为:根据每个磁盘的平均擦写次数与最大擦写次数的比值,计算每个磁盘的实际磨损水平值并作为每个磁盘的磨损程度。

根据本公开的实施例的一个实施例,映射管理单元进一步被配置为:当满足更新触发条件时,对其中已经记录有所有条带的映射表进行更新。

根据本公开的实施例的一个实施例,映射管理单元进一步被配置为,根据以下一项或多项更新触发条件,对其中已经记录有所有 条带的映射表进行更新:

当从检测到映射表中已经记录有所有条带超过起,时间超过设定的时间阈值;

当从检测到映射表中已经记录有所有条带起,上层io请求计数超过设定的上层io请求计数阈值;

当从检测到映射表中已经记录有所有条带起,io大小超过设定的io大小计数阈值。

根据本公开的实施例的一个实施例,读写控制单元进一步被配置为:重新计算每个磁盘的磨损水平值,基于最小磨损水平原则,定期对部分条带更新相应的校验位置;以及其中映射管理单元进一步被配置为:将更新后的部分条带与在这些条带中设置的校验位置之间的映射关系记录到映射表中。

根据本公开的实施例的一个实施例,读写控制单元进一步被配置为:重新计算每个磁盘的磨损水平值,基于最小磨损水平原则,定期将部分条带的数据位置和校验位置交换,进行数据迁移;以及其中映射管理单元进一步被配置为:将交换后的部分条带与在这些条带中设置的校验位置之间的映射关系记录到映射表中。

根据本公开的实施例的一个实施例,读写控制单元进一步被配置为:为每个磁盘设置基准磨损水平值,每个磁盘的磨损程度为其实际磨损水平值和基准磨损水平值之和。

根据本公开的实施例的一个实施例,读写控制单元进一步被配置为,动态调整基准磨损水平值。

根据本公开的实施例的一个实施例,读写控制单元进一步被配置为,基于用户需求动态调整基准磨损水平值。

根据本公开的实施例的第三方面,提供一种计算机可读存储介质,具有存储在其上的计算机可读程序指令,计算机可读程序指令用于执行本公开的实施例的控制对磁盘阵列进行读写操作的方法。

根据本公开的实施例的第四方面,提供一种存储系统,其包括根据本公开实施例的控制对磁盘阵列进行读写操作的装置。

附图说明

现将仅通过示例的方式,参考所附附图对本公开的实施例进行描述,其中

图1是示出raid3的条带结构示意图;

图2是示出raid5的条带结构示意图;

图3是示出raid6的条带结构示意图;

图4是示出随机数据写的一个示例的示意图;

图5是示出随机数据写的另一个示例的示意图;

图6是示出根据本公开的一个实施例的控制对磁盘阵列进行读写操作的方法流程示意图;

图7是示出根据本公开的一个实施例的控制对磁盘阵列进行读写操作的方法详细流程示意图;

图8是示出根据本公开的一个实施例的更新映射表的流程示意图;

图9是示出根据本公开的一个实施例的控制对磁盘阵列进行读写操作的装置示意图。

具体实施方式

现将结合附图对本公开的实施例进行具体的描述。应当注意的是,附图中对相似的部件或者功能组件可能使用同样的数字标示。所附附图仅仅旨在说明本公开的实施例。本领域的技术人员可以在不偏离本公开精神和保护范围的基础上从下述描述得到替代的实施方式。

图1-图3分别示出了raid3、raid5、raid6的条带结构示意图。传统条带式奇偶校验raid算法均具有固定的子算法用于固定选择磁盘位置以存储条带校验。

图1示出了raid3的条带结构示意图,raid3采用一个专用的磁盘(例如为磁盘n)作为校验磁盘,其他磁盘(磁盘0-3)为数据 磁盘,数据按字节的方式交叉存储到各个数据磁盘中,不同磁盘上同一条带的数据作异或(xor)奇偶校验,校验值写入校验磁盘中。

图2示出了raid5的条带结构示意图,raid5按照块的方式存储数据,校验数据分布在阵列中的所有磁盘(磁盘0-n)上,不采用专门的校验磁盘,然而,校验数据分布是固定的。例如,间隔固定逻辑块地址(lba),校验位置轮转到下一个磁盘。根据本公开的一个实施例,例如该间隔实现可以被称作morley条带。

图3示出了raid6的条带结构示意图,raid6采用双重校验以提升数据冗余性,与raid5类似,双重校验数据分布的轮转方法也是固定的。根据本公开的一个实施例,例如如图3所示意,阵列中同样不采用专门的校验磁盘,各磁盘上的奇校验位置每隔一个morley条带即轮转到下一个磁盘,偶校验位置也如此,也即每个逻辑相邻的磁盘的奇偶校验位置分布都固定一个间隔(图3中为morley条带),双重校验数据分布的轮转方法是固定的。

随着磁盘阵列io性能的提升,磁盘的磨损程度也会增加。在io操作中写操作极大地影响着的磁盘磨损程度。raid写算法主要包括两种:

第一种是对所有磁盘进行满条带写操作,条带中的所有磁盘都将在任何写操作中被同样地写操作。这种情况下,满条带写操作将给每个磁盘带来相同的磨损影响。

第二种是按需对必要的磁盘进行部分条带写操作。为了讨论方便,以下以raid5为例描述。图4示出了随机数据写操作的一个示例,这个例子中,只需要写入数据到磁盘0的条带0即d00位置。写操作分为以下五步:

1)从数据位置d00中读取旧数据;

2)从校验位置p0中读取旧校验;

3)将旧校验与旧数据及要写入的新数据异或得到新校验;

4)将新数据写入d00;

5)将新校验写入p0。

由以上可以看出,在第二种写算法中,将数据写入一个数据磁盘,同时为了保持校验保护,共需要4次io操作,两次读两次写操作。注意的是,图4中#1,#2…#5仅是示出操作的逻辑顺序,实际的io操作可以在相同的时间并行地对不同磁盘进行操作。按照这种写算法,两次数据磁盘写操作需要6次io操作,三次数据写操作需要8次io操作,以此类推。

在上述第二种写算法中,即按需部分条带写操作中,无论对多少数据磁盘进行写操作或对哪些数据磁盘进行写操作,都必须对校验磁盘进行写操作。如果需要随机写入数据4次,每次需要写入4个数据磁盘中的一个,那么每个数据磁盘将被写入一次,但校验磁盘被写入4次,如图5所示。由此可见,这种情况下,校验磁盘的磨损影响将是每个数据磁盘的4倍。因此,对于用作校验位置的磁盘,通常磨损程度更高。然而,如前所述,所有现有的传统条带式校验raid算法均具有子算法用于选择固定的磁盘位置以存储条带校验,因此并不能基于raid中所有磁盘的磨损状态动态平衡磁盘间的磨损。

应该理解,在上述第一种写算法中,即采用满条带写操作中,针对任何写操作,将对条带中的所有磁盘同样地进行写操作。因此,满条带写操作将给磁盘阵列中的每个磁盘带来相同的磨损影响,在这种写算法中不存在磁盘阵列中各个磁盘之间的磨损差异的情况。因而,本公开的各个实施方式并不直接针对于改进采用满条带写操作的算法。

此外,还应该理解的是,本公开的各个实施方式考虑到如下技术事实:读操作不会给磁盘磨损带来显著影响。因此,在各个实施方式中可以合理的忽略读操作对磁盘磨损的影响,而充分考虑写操作对于磁盘磨损的影响。但是,本领域技术人员根据现有技术以及本领域的公知常识容易知晓在本公开的各个实施例中读操作如何执行。

以下为了便于描述,以raid5作为具体示例来阐述根据本公开 的各个实施方式。但是,应该理解,本公开中参照raid5的各个实施方式也能够很容易地应用到raid3和raid6中,而不会超出本公开精神的范围。

根据本公开的各个实施方式,通过在raid的一个条带中动态选择校验磁盘位置,且选择具有最低磨损程度的磁盘作为该条带的校验位置磁盘。以下参照图6-9具体进行描述。

图6示出根据本公开的一个实施例的控制对磁盘阵列进行读写操作的方法流程示意图。

如图6所示,当接收对条带进行写操作的命令时,通过检索映射表,确定该条带的校验位置。具体地,在步骤s601,接收对条带进行写操作的命令;在步骤s602,通过检索映射表,确定该条带的校验位置,该映射表记录了条带与在该条带中设置的校验位置之间的映射关系,该校验位置被设置在具有最小磨损程度的磁盘中。

图7示出了根据本公开的一个实施例的控制对磁盘阵列进行读写操作的方法详细流程图。应该理解,图7所描述的流程仅仅是实现本公开思想的一种具体示例,其中的步骤可以被省略、修改或者替换,而不会超出本公开覆盖的范围。

步骤s701,接收到对条带进行写操作的命令。

步骤s702,在映射表中搜索该条带。这个映射表记录与在该条带中设置的校验位置之间的映射关系,该校验位置被设置在具有最小磨损程度的磁盘中。

对于校验位置磁盘,可以采用例如下述方式表示。

根据本公开的一个实施例,例如在实际raid应用中,一个raid5中最多支持16个磁盘,因此,可以采用4比特表示所有16种可能的校验位置磁盘。例如,0b0001表示磁盘0为校验位置磁盘,0b0010表示磁盘1为校验位置磁盘,0b1111表示磁盘15为校验位置磁盘。

对在一个raid中具有不同磁盘数目限制的其他raid5/3的实现,可通过增加更多比特来表示校验位置的更多可能。对raid6, 可以采用双比特序列表示校验位置,例如,对16个磁盘的raid6,p=0b0001和q=0b0100表示磁盘0为校验p位置磁盘、磁盘4为校验q位置磁盘。

先前的条带raid采用固定轮转方法选择校验位置,或者可以认为是校验位置的预定义。因此,对先前raid,不需要记录特定条带中哪个磁盘是校验磁盘,raid能计算出来。

步骤s703,判断是否获得映射。在该步骤中,首先判断映射表中是否存在该条带,如果不存在,则意味着未获得映射;如果存在,接着判断映射表中对应的校验位置对本次写io操作是否有效,如果有效,则意味着获得映射,反之,意味着未获得映射。

步骤s704,根据s703步骤的判断结果,如果获得映射,则获取该条带的校验位置,之后进行到步骤s708。

步骤s705,根据s703步骤的判断结果,如果未获得映射,则获取所有磁盘的磨损信息。

下面以一个具体实现为例描述如何得到磁盘的磨损程度。由于固态硬磁盘(ssd)是比传统硬磁盘读写速度更快的存储媒质,存储系统的性能有了很大提高,其成本也越来越低,因此在存储产品中得到越来越多应用。在某些产品中,ssd磁盘可能被直接布置进传统raid。在本公开的一个实施例中,以raid中的磁盘为ssd磁盘为例进行描述。

通常,衡量ssd磁盘磨损程度的信息,包括最大擦写计数、平均擦写计数以及通过某些scsi扩展opcode获得的来自ssd磁盘的每周期使用寿命(eol)、通电小时数、甚至温度。最大擦写计数是ssd磁盘中任何通道上最大的擦写次数,每周期eol是任一单元能承受的最多擦写次数。平均擦写计数表示特定的ssd通道和单元的磨损状态。

由于sdd磁盘本身的制作工艺和设计,从通道角度的统计比从单元角度的统计更有意义,因此,采用将平均擦写计数与最大擦写计数进行比较。同时,这也体现了整体的ssd磁盘磨损程度。

根据本公开的一个实施例,基于从ssd磁盘得到的磨损信息,用下式(1)计算一个ssd磁盘的磨损程度:

ssd磁盘磨损水平值=平均擦写计数÷最大擦写计数(1)

上式中较大的值表示磁盘磨损程度更高,更接近于使用寿命。根据式(1)可以计算得到所有ssd磁盘的磨损程度。

步骤s706,选择具有最小磨损程度的ssd磁盘作为该条带的校验磁盘。

步骤s707,将该条带和其对应的校验位置记录到映射表中。将在步骤s06中选择的校验磁盘作为该条带的校验位置磁盘,并将它们的映射关系记录到映射表中。

步骤s708,根据校验位置,计算raid几何数据。在该步骤中,根据校验位置、raid中数据磁盘分布等具体信息,针对接收到的写请求,选择写算法,并计算出执行io操作所需要的信息,如操作的ssd磁盘、实际的lba地址等。

步骤s709,基于raid几何数据,按照选择的raid算法执行写io操作。在该步骤中,基于步骤s08计算的raid几何数据,根据选择的raid算法完成条带写io操作。

通过上述方法,在相同raid中持续调整ssd各磁盘的磨损程度,每次新条带将有新校验位置,例如,vnx2中,访问新条带morley条带,raid将得到所有ssd磁盘的磨损程度之后选择最低磨损程度的磁盘为校验位置磁盘,这样可以很好的动态运行。

理论上,按照上述方法动态调整raid中ssd磁盘的磨损水平,每个ssd磁盘的磨损状态将最终趋于平衡或者非常相近。然而,对raid5,两个ssd磁盘失效会导致raid损坏,数据将会丢失;对raid6,三个ssd磁盘失效会导致raid损坏,数据丢失将会发生。因此,使得所有ssd磁盘都位于相同的磨损程度存在潜在风险。更佳地,对上述方案进行微调来控制ssd磨损进程。

根据本公开的一个实施例,通过对每个ssd磁盘设置基准磨损水平值,能有效控制同一个raid中ssd磁盘的失效顺序。在raid 初始化过程中,可以为每个ssd磁盘选择基准磨损水平值,例如ssd0磁盘的基准磨损水平值为0.05,其他ssd磁盘的基准磨损水平值为0。接着从所有ssd磁盘获得磨损信息并计算它们实际磨损程度,例如利用式(1)计算实际磨损水平值,之后将对应于每个ssd的基准磨损值加到每个ssd实际磨损水平值上得到其磨损程度,再选择具有最小磨损程度的ssd磁盘作为校验位置磁盘。根据上面的描述,在这个示例中,如果不考虑其他因素,ssd0磁盘将会比其他ssd磁盘使用寿命更长。

根据本公开的一个实施例,还可以对基准磨损水平值进行动态调整来实现传统raid中ssd磁盘的磨损控制。

根据本公开的一个实施例,基于用户需求实现传统raid中基于策略的ssd磨损控制。根据存储系统应用场景的不同,用户会对其使用的存储系统有不同的需求,本公开的一个实施例基于ssd磁盘的磨损状态,允许用户对不同ssd磁盘的使用进行选择,也即实现基于策略的ssd磁盘磨损控制。

用户可以向系统输入该需求,系统被该输入所驱动,从而对ssd磁盘的使用寿命进行控制。这些策略包括,例如,用户希望所有ssd磁盘都完全均匀被磨损,另外的策略包括,如对不同的ssd类型,如高耐力、中等耐力和低耐力的ssd磁盘,用户可根据需要选择某种类型的ssd磁盘优先使用,系统基于用户策略,对raid中ssd磁盘的磨损进行控制。作为示例,例如,用户选择低耐力的ssd磁盘优先使用,系统将低耐力的ssd磁盘的基准磨损水平值加上权重,使得更多地选择该低耐力ssd磁盘作为校验磁盘,在其使用寿命快到时,将其先替换;或者用户可以根据需要选择ssd磁盘中的某一块或某些块磁盘优先使用,系统将对应的基准磨损水平值加上权重,使得更多地选择某一块或某些块ssd磁盘作为校验磁盘,在使用寿命快到时,将它们先替换。

图8示出了根据本公开的一个实施例的更新映射表示意流程图。当对raid中所有条带都已分配校验位置,也即映射表中包括了 raid的所有条带时,可以基于不同策略对映射表进行更新。

以下参照图7的具体流程,对图8进行描述。在图7中的步骤s701接收到对条带进行写操作的命令后,在步骤801,首先判断映射表中是否记录有所有条带,如果未记录有所有条带,则进行到图7中的步骤s702,并执行图7中的后续流程;如果映射表中已经记录有所有条带,则进行到步骤802,判断是否满足更新触发条件,如果满足触发更新条件,则在步骤803,更新映射表;如果不满足更新触发条件,则仍然进行到图7中的步骤s702,并执行图7中的后续流程。

根据本公开的一个实施例,当映射表中已经记录了raid所有条带时,根据实际应用中数据操作的不同场景,监测所有ssd磁盘的磨损状态,间隔一定时间,更新映射表;或者监测所有ssd磁盘的磨损状态,设定一个阈值,当上层io请求计数或io大小计数超过该阈值时,更新映射表。也即,更新触发条件可以例如包括以下一项或多项:

-当从检测到映射表中已经记录有所有条带起,时间超过设定的时间阈值;

-当从检测到映射表中已经记录有所有条带起,上层io请求计数超过设定的上层io请求计数阈值;

-当从检测到映射表中已经记录有所有条带起,io大小超过设定的io大小计数阈值。

根据本公开的一个实施例,更新映射表可以采用如下方式,例如,首先重新计算每个磁盘的磨损水平值,基于最小磨损水平原则,定期对部分条带更新相应的校验位置,然后将更新后的部分条带与在这些条带中设置的校验位置之间的映射关系记录到映射表中;或者,首先重新计算每个磁盘的磨损水平值,基于最小磨损水平原则,定期将部分条带的数据位置和校验位置交换,进行数据迁移,然后将交换后的部分条带与在这些条带中设置的校验位置之间的映射关系记录到映射表中。

值得注意的是,在本公开的实施例中,由于校验位置是动态选择的,在系统重启期间,需要从磁盘重新载入映射信息到存储器,否则raid无法执行io操作,因此应在raid级别将校验位置记录在内存中。同时,当由于其他因素使得raid本身退化甚至损坏时,这时需要访问映射信息,由raid地址空间本身解映射,因而还需要在raid外的其他磁盘空间保存映射表。

图9示出了根据本公开的一个实施例的控制对磁盘阵列进行读写操作的装置,包括:接收单元901,被配置为接收对条带进行写操作的命令;读写控制单元902,被配置为通过检索映射表,确定条带的校验位置;以及映射管理单元903,被配置为在映射表中记录条带与在该条带中设置的校验位置之间的映射关系,该校验位置被设置在具有最小磨损程度的磁盘中。

映射管理单元还进一步被配置为:当映射表中未记录该条带时,选择当前具有最小磨损程度的磁盘作为校验位置磁盘,并在所述映射表中记录条带和校验位置;以及当满足更新触发条件时,对其中已经记录有所有条带的映射表进行更新。具体方式已在上述公开的实施例中描述,此处不再赘述。

读写控制单元还进一步被配置为:根据每个磁盘的平均擦写次数与最大擦写次数的比值,计算每个磁盘的实际磨损水平值并作为每个磁盘的磨损程度;以及更佳地,还可以为每个磁盘设置基准磨损水平值,每个磁盘的磨损程度为其实际磨损水平值和基准磨损水平值之和。另外,读写控制单元还进一步被配置为,基于用户需求动态调整基准磨损水平值。具体方式已在上述公开的实施例中描述,此处不再赘述。

根据本公开的实施例,还提供一种计算机可读存储介质,具有存储在其上的计算机可读程序指令,所述计算机可读程序指令用于执行本公开的实施例的控制对磁盘阵列进行读写操作的方法。

根据本公开的实施例,还提供一种存储系统,其包括上述的根据本公开实施例的控制对磁盘阵列进行读写操作的装置。

通过以上描述和相关附图中所给出的教导,这里所给出的本公开的许多修改形式和其它实施方式将被本公开相关领域的技术人员所意识到。因此,所要理解的是,本公开的实施方式并不局限于所公开的具体实施方式,并且修改形式和其它实施方式意在包括在本公开的范围之内。此外,虽然以上描述和相关附图在部件和/或功能的某些示例组合形式的背景下对示例实施方式进行了描述,但是应当意识到的是,可以由备选实施方式提供部件和/或功能的不同组合形式而并不背离本公开的范围。就这点而言,例如,与以上明确描述的有所不同的部件和/或功能的其它组合形式也被预期处于本公开的范围之内。虽然这里采用了具体术语,但是它们仅以一般且描述性的含义所使用而并非意在进行限制。

对于本领域技术人员而言,显然本公开的实施例不限于上述示范性实施例的细节,而且在不背离本公开的实施例的精神或基本特征的情况下,能够以其他的具体形式实现本公开的实施例。因此,无论如何来看,均应将实施例看作是示范性的,而且是非限制性的。此外,明显的,“包括”一词不排除其他元素和步骤,并且措辞“一个”不排除复数。装置权利要求中陈述的多个元件也可以由一个元件来实现。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1