一种存储系统、识别数据块稳定性的方法以及装置与流程

文档序号:13677759阅读:210来源:国知局
本发明实施例涉及存储
技术领域
,特别是一种存储系统、识别数据块稳定性的方法以及装置。
背景技术
:FlashMemory(闪存)装置是一种非易失性存储器,其存储介质是NANDFlash,具有断电后数据不消失的特点,因此,被广泛的作为外部和内部存储器使用。以NANDFlash为存储介质的闪存装置可能是固态硬盘(全称:SolidStateDevice,简称:SSD),又名固态驱动器(全称:SolidStateDrive,简称:SSD),还可能是其他存储器。一个SSD通常由多个闪存芯片组成,每个闪存芯片包含若干个块(block)。由于NANDFlash具有擦除特性,保存在block中的数据不会像普通机械硬盘那样直接被修改。当需要对某个逻辑地址指向的数据进行修改时,需要查找一个空闲的block将修改后的数据写入该空闲的block,然后将所述逻辑地址指向新写入的数据,那么,原来的block中的数据则变为无效数据。对于SSD而言,有效数据是指block中保存的有逻辑地址指向的数据,这部分数据可能会被读取;无效数据是指block中保存的没有逻辑地址指向的数据,这部分数据不可能会被读取。随着SSD中存储的数据越来越多,可利用的空闲的block越来越少,因此有必要对SSD进行垃圾回收以便产生可供利用的空闲的block。垃圾回收是指将block中的有效数据搬移到空闲的block中去,然后将旧的block进行擦除,经过擦除之后的block又可以作为空闲的block再次写入数据。通常情况下,SSD在进行垃圾回收时,会查找包含无效数据较多的block,因为包含无效数据较多的block包含的有效数据较少,那么需要搬移到空闲block的有效数据会较少。在SSD的寿命跟NANDFlash的擦除次数相关的情况下,垃圾回收时搬移的数据越少,SSD的写放大就越小。然而,由于不同block保存的数据被修改的可能性大致相当,因此每个block包含的无效数据的多少也无明显差别。技术实现要素:本发明实施例第一方面提供了一种存储系统,该存储系统包括控制器和闪存装置,所述存储系统支持重复数据删除,所述闪存装置中保存有第一数据块;所述控制器包括处理器、缓存和通信接口;所述通信接口,用于与所述闪存装置通信;所述缓存中保存有所述第一数据块的信息,所述第一数据块的信息包括所述第一数据块的引用计数,或所述第一数据块保存在所述闪存装置的时间长度,或所述第一数据块的引用计数和所述第一数据块保存在所述闪存装置的时间长度,其中所述第一数据块的引用计数等于所述控制器接收所述第一数据块的数量。所述处理器,用于从所述缓存中读取所述第一数据块的信息。然后,根据(1)所述第一数据块的引用计数,和数据块的引用计数与稳定级别的对应关系,或(2)所述第一数据块保存在所述闪存装置的时间长度,和数据块保存在闪存装置的时间长度与稳定级别的对应关系,或(3)所述第一数据块的引用计数和所述第一数据块保存在所述闪存装置的时间长度,和数据块的引用计数,数据块保存在闪存装置的时间长度与稳定级别的对应关系,确定所述第一数据块的稳定级别,所述稳定级别用于表示数据块的稳定性。再将所述第一数据块的逻辑地址以及所述第一数据块的稳定级别通过所述通信接口发送给所述闪存装置,所述闪存装置用于存储所述第一数据块的逻辑地址与所述第一数据块的稳定级别之间的对应关系,当数据搬移的任务触发时,获取所述第一数据块的逻辑地址对应的所述第一数据块的稳定级别,将所述第一数据块写入所述第一数据块的稳定级别对应的块中。在第一方面的第一实施方式中,所述数据块的引用计数与稳定级别的对应关系包括:引用计数区间与稳定级别的对应关系。所述处理器,具体用于根据所述第一数据块的引用计数确定第一引用计数区间,所述第一数据块的引用计数位于所述第一引用计数区间中,以及根据所述第一引用计数区间,以及引用计数区间与稳定级别的对应关系确定所述第一数据块的稳定级别。在第一方面的第二种实施方式中,所述数据块保存在闪存装置的时间长度与稳定级别的对应关系包括:时间区间与稳定级别的对应关系。所述处理器,具体用于根据所述第一数据块保存在所述闪存装置的时间长度确定第一时间区间,所述第一数据块保存在所述闪存装置的时间长度位于所述第一时间区间中,以及根据所述第一时间区间,以及时间区间与稳定级别的对应关系确定所述第一数据块的稳定级别。在第一方面的第三种实施方式中,所述数据块的引用计数,数据块保存在闪存装置的时间长度与稳定级别的对应关系包括:引用计数区间,时间区间与稳定级别的对应关系。所述处理器,具体用于根据所述第一数据块的引用计数确定第一引用计数区间,所述第一数据块的引用计数位于所述第一引用计数区间中。然后,根据所述第一数据块保存在所述闪存装置的时间长度确定第一时间区间,所述第一数据块保存在所述闪存装置的时间长度位于所述第一时间区间中;再根据所述第一引用计数区间,所述第一时间区间,以及所述引用计数区间,时间区间与稳定级别的对应关系确定所述第一数据块的稳定级别。本发明实施例第二方面提供了一种闪存装置,包括主控制器和闪存芯片,所述闪存芯片包括块,所述主控制器包括处理器。其中,所述处理器,用于获取目标逻辑地址对应的稳定级别,所述稳定级别用于表示数据块的稳定性;然后,根据所述目标逻辑地址对应的稳定级别,将所述目标逻辑地址对应的数据块写入所述稳定级别对应的块中。在第二方面的第一种实施方式中,所述处理器,还用于在所述闪存芯片中查找包含无效数据最多的块,所述包含无效数据最多的块包括所述目标逻辑地址对应的数据块。在第二方面的第二种实施方式中,所述处理器,还用于在所述闪存芯片中查找最长时间内未被擦除的块,所述最长时间内未被擦除的块包括所述目标逻辑地址对应的数据块。在第二方面的第三种实施方式中,所述主控制器还包括缓存;所述处理器,具体用于确定所述缓存中保存的逻辑地址的个数达到预设阈值时,获取所述目标逻辑地址对应的稳定级别,其中,所述逻辑地址对应的稳定级别与所述目标逻辑地址对应的稳定级别相同。本发明实施例第三方面提供了一种识别数据块的稳定性的方法,所述方法应用于存储系统中,所述存储系统包括控制器和闪存装置,所述存储系统支持重复数据删除,所述闪存装置中保存有第一数据块;所述控制器包括处理器、缓存和通信接口;所述通信接口,用于与所述闪存装置通信;所述缓存中保存有所述第一数据块的信息,所述第一数据块的信息包括所述第一数据块的引用计数,或所述第一数据块保存在所述闪存装置的时间长度,或所述第一数据块的引用计数和所述第一数据块保存在所述闪存装置的时间长度,其中所述第一数据块的引用计数等于所述控制器接收所述第一数据块的数量;所述方法由所述处理器执行。所述方法包括:从所述缓存中读取所述第一数据块的信息,然后,根据(1)所述第一数据块的引用计数,和数据块的引用计数与稳定级别的对应关系,或(2)所述第一数据块保存在所述闪存装置的时间长度,和数据块保存在闪存装置的时间长度与稳定级别的对应关系,或(3)所述第一数据块的引用计数和所述第一数据块保存在所述闪存装置的时间长度,和数据块的引用计数,数据块保存在闪存装置的时间长度与稳定级别的对应关系,确定所述第一数据块的稳定级别,所述稳定级别用于表示数据块的稳定性。再将所述第一数据块的逻辑地址以及所述第一数据块的稳定级别通过所述通信接口发送给所述闪存装置,所述闪存装置存储所述第一数据块的逻辑地址与所述第一数据块的稳定级别之间的对应关系;当数据搬移的任务触发时,所述闪存装置获取所述第一数据块的逻辑地址对应的所述第一数据块的稳定级别,将所述第一数据块写入所述第一数据块的稳定级别对应的块中。在第三方面的第一种实施方式中,所述数据块的引用计数与稳定级别的对应关系包括:引用计数区间与稳定级别的对应关系。所述根据(1)所述第一数据块的引用计数,和数据块的引用计数与稳定级别的对应关系,确定所述第一数据块的稳定级别包括:根据所述第一数据块的引用计数确定第一引用计数区间,所述第一数据块的引用计数位于所述第一引用计数区间中;以及根据所述第一引用计数区间,以及引用计数区间与稳定级别的对应关系确定所述第一数据块的稳定级别。在第三方面的第二种实施方式中,所述数据块保存在闪存装置的时间长度与稳定级别的对应关系包括:时间区间与稳定级别的对应关系。所述根据(2)所述第一数据块保存在所述闪存装置的时间长度,和数据块保存在闪存装置的时间长度与稳定级别的对应关系,确定所述第一数据块的稳定级别包括:根据所述第一数据块保存在所述闪存装置的时间长度确定第一时间区间,所述第一数据块保存在所述闪存装置的时间长度位于所述第一时间区间中,以及根据所述第一时间区间,以及时间区间与稳定级别的对应关系确定所述第一数据块的稳定级别。在第三方面的第三种实施方式中,所述数据块的引用计数,数据块保存在闪存装置的时间长度与稳定级别的对应关系包括:引用计数区间,时间区间与稳定级别的对应关系。所述根据(3)所述第一数据块的引用计数和所述第一数据块保存在所述闪存装置的时间长度,和数据块的引用计数,数据块保存在闪存装置的时间长度与稳定级别的对应关系,确定所述第一数据块的稳定级别包括:根据所述第一数据块的引用计数确定第一引用计数区间,所述第一数据块的引用计数位于所述第一引用计数区间中;然后,根据所述第一数据块保存在所述闪存装置的时间长度确定第一时间区间,所述第一数据块保存在所述闪存装置的时间长度位于所述第一时间区间中;再根据所述第一引用计数区间,所述第一时间区间,以及所述引用计数区间,时间区间与稳定级别的对应关系确定所述第一数据块的稳定级别。本发明实施例第四方面提供了一种在闪存装置中存储数据的方法,所述闪存装置包括主控制器和闪存芯片,所述闪存芯片包括块,所述主控制器包括处理器;所述方法由所述处理器执行。所述方法包括:获取目标逻辑地址对应的稳定级别,所述稳定级别用于表示数据块的稳定性。然后,根据所述目标逻辑地址对应的稳定级别,将所述目标逻辑地址对应的数据块写入所述稳定级别对应的块中。在第四方面的第一种实施方式中,所述方法还包括:在所述闪存芯片中查找包含无效数据最多的块,所述包含无效数据最多的块包括所述目标逻辑地址对应的数据块。在第四方面的第二种实施方式中,所述方法还包括:在所述闪存芯片中查找最长时间内未被擦除的块,所述最长时间内未被擦除的块包括所述目标逻辑地址对应的数据块。在第四方面的第三种实施方式中,所述主控制器还包括缓存;所述获取目标逻辑地址对应的稳定级别包括:确定所述缓存中保存的逻辑地址的个数达到预设阈值时,获取所述目标逻辑地址对应的稳定级别,其中,所述逻辑地址对应的稳定级别与所述目标逻辑地址对应的稳定级别相同。本发明实施例第五方面提供了一种识别数据块的稳定性的装置,所述装置位于控制器中,所述控制器位于支持重复数据删除的存储系统中,所述存储系统包括闪存装置,所述闪存装置中保存有第一数据块。所述装置包括:存储模块,用于保存所述第一数据块的信息,所述第一数据块的信息包括所述第一数据块的引用计数,或所述第一数据块保存在所述闪存装置的时间长度,或所述第一数据块的引用计数和所述第一数据块保存在所述闪存装置的时间长度,其中所述第一数据块的引用计数等于所述控制器接收所述第一数据块的数量。读取模块,用于从所述存储模块中读取所述第一数据块的信息。确定模块,用于根据(1)所述第一数据块的引用计数,和数据块的引用计数与稳定级别的对应关系,或(2)所述第一数据块保存在所述闪存装置的时间长度,和数据块保存在闪存装置的时间长度与稳定级别的对应关系,或(3)所述第一数据块的引用计数和所述第一数据块保存在所述闪存装置的时间长度,和数据块的引用计数,数据块保存在闪存装置的时间长度与稳定级别的对应关系,确定所述第一数据块的稳定级别。发送模块,用于将所述第一数据块的逻辑地址以及所述第一数据块的稳定级别发送给所述闪存装置。在第五方面的第一种实施方式中,所述数据块的引用计数与稳定级别的对应关系包括:引用计数区间与稳定级别的对应关系。所述确定模块,具体用于根据所述第一数据块的引用计数确定第一引用计数区间,所述第一数据块的引用计数位于所述第一引用计数区间中;根据所述第一引用计数区间,以及引用计数区间与稳定级别的对应关系确定所述第一数据块的稳定级别。在第五方面的第二种实施方式中,所述数据块保存在闪存装置的时间长度与稳定级别的对应关系包括:时间区间与稳定级别的对应关系。所述确定模块,具体用于根据所述第一数据块保存在所述闪存装置的时间长度确定第一时间区间,所述第一数据块保存在所述闪存装置的时间长度位于所述第一时间区间中;然后,根据所述第一时间区间,以及时间区间与稳定级别的对应关系确定所述第一数据块的稳定级别。在第五方面的第三种实施方式中,所述数据块的引用计数,数据块保存在闪存装置的时间长度与稳定级别的对应关系包括:引用计数区间,时间区间与稳定级别的对应关系。所述确定模块,具体用于根据所述第一数据块的引用计数确定第一引用计数区间,所述第一数据块的引用计数位于所述第一引用计数区间中,然后,根据所述第一数据块保存在所述闪存装置的时间长度确定第一时间区间,所述第一数据块保存在所述闪存装置的时间长度位于所述第一时间区间中;再根据所述第一引用计数区间,所述第一时间区间,以及所述引用计数区间,时间区间与稳定级别的对应关系确定所述第一数据块的稳定级别。本发明实施例第六方面提供了一种在闪存装置中存储数据的装置,所述装置位于所述闪存装置的主控制器中,所述闪存装置中存储有块。所述装置包括:获取模块,用于获取目标逻辑地址对应的稳定级别,所述稳定级别用于表示数据块的稳定性。迁移模块,用于根据所述目标逻辑地址对应的稳定级别,将所述目标逻辑地址对应的数据块写入所述稳定级别对应的块中。在第六方面的第一种实施方式中,所述获取模块,还用于在所述闪存芯片中查找包含无效数据最多的块,所述包含无效数据最多的块包括所述目标逻辑地址对应的数据块。在第六方面的第二种实施方式中,所述获取模块,还用于在所述闪存芯片中查找最长时间内未被擦除的块,所述最长时间内未被擦除的块包括所述目标逻辑地址对应的数据块。在第六方面的第三种实施方式中,所述装置还包括存储模块,所述存储模块中保存有逻辑地址,所述逻辑地址对应的稳定级别与所述目标逻辑地址对应的稳定级别相同。所述获取模块,具体用于确定所述缓存中保存的逻辑地址的个数达到预设阈值时,获取所述目标逻辑地址对应的稳定级别。本发明实施例第七方面提供了一种计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行如第三方面至第三方面的第三种实施方式中的任意一种所述的方法。本发明实施例第八方面提供了一种计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行如第四方面至第四方面的第三种实施方式中的任意一种所述的方法。本发明实施例提供的控制器,可以根据(1)所述第一数据块的引用计数,和数据块的引用计数与稳定级别的对应关系,或(2)所述第一数据块保存在所述闪存装置的时间长度,和数据块保存在闪存装置的时间长度与稳定级别的对应关系,或(3)所述第一数据块的引用计数和所述第一数据块保存在所述闪存装置的时间长度,和数据块的引用计数,数据块保存在闪存装置的时间长度与稳定级别的对应关系,确定所述第一数据块的稳定级别,所述稳定级别可以反映数据块的稳定性,并且将所述数据块的稳定级别和逻辑地址发送给闪存装置22,使得闪存装置22将相同稳定级别的数据块进行集中存储。本发明实施例提供的闪存装置,可以将相同稳定级别的数据块存储在一个block中。那么,对于存放稳定级别较高的数据块的block,其存储的数据块成为无效数据的可能性较小,整体来看,该block中不含无效数据或仅含少量的无效数据,这样的block属于利用率比较高的block,在对闪存装置22进行垃圾回收时不会回收这样的block;对于存放稳定级别较低的数据块的block,其存储的数据块成为无效数据的可能性较大,假设一个block中的大部分数据或者绝大部分数据都变成了无效数据,那么相应地,这个block中包含的有效数据较少,垃圾回收时需要迁移的数据也较少,减小了写放大。需要说明的是,本实施例的效果主要体现在之后的垃圾回收时搬移的有效数据会减少。由此可见,无论是存放稳定级别较高的数据块的block,还是存放稳定级别较低的数据块的block,都可以减小闪存装置22的写放大,因此在一定程度上延长了闪存装置22的寿命。附图说明为了更清楚地说明本发明实施例的技术方案,下面将对现有技术或实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例提供的存储系统的组成图;图2是本发明实施例提供的控制器的结构示意图;图3A是本发明实施例提供的闪存装置的存储介质的结构示意图;图3B是本发明实施例提供的闪存装置的主控制器的结构示意图;图4是本发明实施例提供的识别数据块稳定性的方法的流程示意图;图5是本发明实施例提供的一种在闪存装置中存储数据的方法的流程示意图;图6是本发明实施例提供的另一种在闪存装置中存储数据的方法的流程示意图;图7是本发明实施例提供的识别数据块稳定性的装置的结构示意图;图8是本发明实施例提供的在闪存装置中存储数据的装置的结构示意图。具体实施方式本发明实施例提出了一种存储系统、识别数据块稳定性的方法以及装置,能够将稳定级别相同的数据块集中存储,使得闪存装置在进行后续的垃圾回收操作时选择到的块所包含的有效数据尽可能得少,从而减小闪存装置的写放大。在描述本发明实施例之前,首先对下面将要出现的术语进行说明:数据对象是指包含实际数据的对象,可以是块数据,也可以是文件或者其他形式的数据。数据块是指由数据对象划分而成的数据单元。为了方便管理,一个数据对象可以被划分为若干个数据块,每个数据块的尺寸相同。数据块的元数据是指用于描述数据块的信息,例如数据块的逻辑地址、数据块的物理地址、逻辑地址与物理地址之间的对应关系、数据块的写入时间等等。稳定数据是指被修改的可能性相对较低的数据。逻辑块地址,又称逻辑地址(英文全称:LogicalBlockAddress,英文简称:LBA),是指数据块的存放地址,该地址并非数据块存储在SSD中的实际地址,而是SSD对外呈现的可访问的地址。物理块地址,又称物理地址(英文全称:PhysicalBlockAddress,英文简称:PBA)是指数据块存储在SSD中的实际地址。数据块的引用计数(referencecount或referencecounting),应用于支持重复数据删除功能的存储系统,用来表示数据块在存储系统中的重复数量。对于支持重复数据删除功能的存储系统来说,同一个数据块并不需要在存储系统中存储多次,所以数据块在存储系统中的重复数量等于控制器接收所述数据块的数量,而实际上只存储了一份。另外,数据块的引用计数也可以表示所述数据块的物理地址被引用的次数。SSD中的有效数据是指在SSD的block中有逻辑地址指向的数据块,也就是说其物理地址有对应的逻辑地址。SSD中的无效数据通常是指在SSD的block中保存的没有逻辑地址指向的数据块,也就是说其物理地址没有对应的逻辑地址。图1描绘了本发明实施例提供的存储系统的组成图,图1所示的存储系统包括控制器11和多个闪存装置22。其中,闪存装置22是以NANDFlash为存储介质的存储装置,可以包括固态硬盘(全称:SolidStateDevice,简称:SSD),又名固态驱动器(全称:SolidStateDrive,简称:SSD),还可能包括其他存储器。本实施例中,闪存装置22以SSD为例说明。图1仅是示例性说明,并不限定具体的组网方式,如:级联树形组网、环状组网都可以。只要控制器11和闪存装置22之间能够相互通信。控制器11可以包括当前技术已知的任何计算设备,如服务器、台式计算机等等。控制器11可以接收主机(图1中未示出)发送的数据对象,并且向闪存装置22发送写数据请求,使得闪存装置22将写数据请求中携带的数据对象写入其闪存芯片中。请参考图2,图2是本发明实施例控制器11的结构示意图。如图2所示,控制器11主要包括处理器(processor)118、缓存(cache)120、存储器(memory)122、通信总线(简称总线)126以及通信接口(CommunicationInterface)128。处理器118、缓存120、存储器122以及通信接口128通过通信总线126进行相互间的通信。处理器118可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecificIntegratedCircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。在本发明实施例中,处理器118用于接收来自主机的数据对象,将所述数据对象经过一定的处理后再发送给闪存装置22。通信接口128,用于与主机或闪存装置22通信。存储器122,用于存放程序124,存储器122可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。可以理解的是,存储器122可以为随机存储器(全称:Random-AccessMemory,简称:RAM)、磁碟、硬盘、光盘、固态硬盘(全称:SolidStateDisk,简称:SSD)或者非易失性存储器等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。缓存120(Cache)用于暂时存放从主机接收的数据对象或从闪存装置22读取的数据对象。另外,由于Cache读写数据的速度较快,为了方便读取也可以将一些经常使用的信息存放在Cache中,例如数据块的逻辑地址,写入时间等信息。缓存120可以是RAM、储存级内存(全称:Storage-ClassMemory,简称:SCM)、非易失存储(全称:Non-VolatileMemory,简称:NVM)、闪存(Flashmemory)或固态硬盘(全称:SolidStateDisk,简称:SSD)等各种可以存储数据的非短暂性的(non-transitory)机器可读介质,在此不做限定。缓存120和存储器122可以合设或者分开设置,本发明实施例对此不做限定。程序124可以包括程序代码,所述程序代码包括计算机操作指令。对于具有重复数据删除功能的存储系统,程序代码可以包括重复数据删除模块和稳定性判断模块。重复数据删除模块用于在将从主机接收的数据对象发送给闪存装置22之前进行重复数据删除。下面对重复数据删除功能进行简要地介绍:当控制器11接收主机发送的数据对象之后,可以将所述数据对象划分为尺寸相同的若干个数据块。为了描述方便,以每个数据块的尺寸为4KB为例来进行说明,可以理解的是,数据块的尺寸并不限于4KB。对于每个数据块,处理器118分别判断各个闪存装置22中是否保存有相同的数据块,如果没有,则将数据块写入闪存装置22,同时将数据块的引用计数设置为初始值(例如,等于1);如果有,则不需要将所述已保存的数据块再次写入闪存装置22,而是将数据块的引用计数加1。由此可见,引用计数在一定程度上反映了数据块的稳定性。引用计数越高的数据块,在相当长的时间内被使用的可能性就越高。数据块被删除的概率越小,数据块就越稳定。对于如何判断闪存装置22是否保存有相同的数据块,通常的做法是预先保存闪存装置22中存储的各个数据块的指纹信息,其中每个数据块的指纹信息是根据预设的哈希函数对每个数据块进行计算获得的。然后,根据所述哈希函数对待存储的数据块进行计算,获得该待存储的数据块的指纹信息;将所述指纹信息与预先保存的各个数据块的指纹信息进行匹配,如果有相同的指纹信息则说明闪存装置22已经保存有相同的数据块,否则说明没有保存所述待存储的数据块。所述各个数据块的指纹信息可以保存在缓存120中,也可以保存在闪存装置22中。除此之外,还可以采用其他方式判断闪存装置22是否保存有相同的数据块,这里不再一一列举。另外,对于第一次写入闪存装置22的数据块,控制器11可以保存所述数据块的指纹信息与所述数据块的LBA之间的对应关系。当控制器11需要将所述数据块的LBA发送给闪存装置22时,可以根据所述数据块的指纹信息和所述对应关系查找到所述LBA。具体的,所述数据块的LBA可以是闪存装置22存储所述数据块之后发送给控制器11的,也可以是控制器11为所述数据块分配的LBA,由于闪存装置22中保存有LBA与PBA之间的对应关系,因此闪存装置22可以根据分配的LBA将所述数据块写入PBA对应的存储空间中。然而,引用计数可以是决定数据块的稳定性的一个参考因素,另外一个可以影响数据块稳定性的参考因素是数据块保存在闪存装置22中的时间长度。所述数据块保存在闪存装置22中的时间长度可以等于所述系统当前时间减去所述数据块写入所述闪存装置的时间所得的差值。所述数据块写入所述闪存装置的时间可以是所述数据块的元数据的一部分,保存在缓存120或者闪存装置22中。可以理解的是,数据块保存在闪存装置22中的时间长度越长,所述数据块越稳定;反之,越不稳定。可以理解的是,所述时间长度也可以是一个反映数据块保存在闪存装置22中时间长短的数值,并不严格等于所述系统当前时间减去所述数据块写入所述闪存装置的时间所得的差值。所述稳定性判断模块的主要功能是,基于引用计数,或基于数据块保存在闪存装置22中的时间长度,或基于引用计数和数据块保存在闪存装置22中的时间长度,来判断所述数据块的稳定性,从而得到所述数据块的稳定级别。稳定级别是一个反映数据块稳定性的数值,数值越大稳定性越高,反之越低。或者,也可以将稳定级别定义为数值越小稳定性越高,反之越低。控制器11在通过所述稳定性判断模块获得数据块的稳定级别之后,可以将所述数据块的LBA与稳定级别发送给闪存装置22,使得闪存装置22将相同级别的数据块集中存储在一个或多个block中。下面介绍闪存装置22的结构与功能。请参考图3A,图3A是本发明实施例闪存装置22的结构示意图。本实施例中,闪存装置22以SSD为例说明。如图3A所示,闪存装置22包括主控制器220和存储介质221。其中,主控制器220用于接收控制器11发送给闪存装置22的I/O请求,或者其他信息,例如数据块的逻辑地址和稳定级别,并且主控制器220还用于执行接收到的I/O请求,例如将I/O请求中携带的数据块写入存储介质221,或者从存储介质221中读取数据块并返回给控制器11。这里的主控制器220是SSD的主控制器。存储介质221通常由若干个闪存(Flash)芯片组成。每个闪存芯片包括若干个块(block)。每个block包括若干个页(page),主控制器220在将数据块写入block中时是以page为单位写入的。由于NANDFlash具有擦除特性,保存在block中的数据不会像普通机械硬盘那样直接被修改。当需要对某个block中的数据进行修改时,需要查找一个空闲的block将修改后的数据写入该空闲的block,那么,原来的block中的数据则变为无效数据。随着SSD中存储的数据越来越多,可利用的空闲的block越来越少,因此有必要对SSD进行垃圾回收以便产生可供利用的空闲的block。本实施例中,在进行垃圾回收时通常会依次选择包含无效数据最多的块进行回收。而垃圾回收的触发条件是所述闪存芯片中包含的空闲的块的数量低于第一阈值,所述第一阈值可以是大于10并且小于100的整数。另外,在闪存装置22内部还需要定期进行巡检。巡检是指为防止闪存芯片中某些block较长时间内未被擦除导致数据丢失,周期性地对闪存芯片中存储的数据进行搬移的操作。对于NANDFlash来说,其保持数据的能力只能维持一定时间,因此需要定期将其中存储的数据搬移到其他block。本实施例中,在进行巡检时通常会依次选择最长时间内未被擦除的块,将所述块中的有效数据搬移到空闲的块中,再擦除原来的块。而巡检的触发条件可以是当预设的巡检周期到达。由于SSD的寿命与NANDFlash的擦除次数相关,所以尽量减少SSD内部的数据搬移有利于减小写放大,从而延长SSD的寿命。在本实施例中,SSD内部的数据搬移主要是指垃圾回收或者巡检时对block中有效数据的搬移。可以理解的是,对于待回收的block来说,如果其包含的有效数据越少,需要搬移的数据也越少。因此本发明的目的主要在于将SSD中的数据块按照稳定级别来进行集中存储,使得在进行以后的垃圾回收操作时搬移的有效数据尽可能得少。图3B是本发明实施例描述的闪存装置22中主控制器220的结构示意图。主控制器220主要包括处理器(processor)218、内存(cache)230、通信总线(简称总线)226以及通信接口(CommunicationInterface)228。处理器218、缓存230以及通信接口228通过通信总线226进行相互间的通信。处理器218可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecificIntegratedCircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。在本发明实施例中,处理器218可以用于接收来自控制器11的I/O请求、数据块的逻辑地址以及数据块的稳定级别等信息,另外,处理器218还用于执行I/O请求。通信接口228,用于与控制器11及存储介质221通信。缓存230(Cache)用于缓存从控制器11接收的信息,例如数据块的逻辑地址以及数据块的稳定级别等。缓存230可以是RAM、SCM、NVM等各种可以存储数据的非短暂性的(non-transitory)或者短暂性的(transitory)机器可读介质,在此不做限定。另外,在某些应用场景下,缓存230也可以置于主控制器220的外部。在本实施例中,可以在缓存230中保存一张映射表,用于保存从控制器11接收的数据块的LBA与数据块的稳定级别之间的对应关系。通常情况下,缓存230中还保存有一张记录LBA与PBA之间映射关系的映射表,在本发明实施例中,可以在这张映射表的基础上,增加LBA与稳定级别之间的对应关系。或者,在缓存230中保存多个数组,每个数组对应一个稳定级别,所述数组中可以保存对应所述稳定级别的多个数据块的逻辑地址。或者,缓存230中也可以不保存映射表,而是将稳定级别相同的数据块的逻辑地址集中存储到缓存230的一块缓存空间中。例如,控制器11可以事先发送给闪存装置22缓存区域划分信息,所述缓存区域划分信息包括不同的稳定级别(例如,分别为1-10的10个稳定级别),闪存装置22接收到所述缓存区域划分信息后,按照10个稳定级别将缓存230划分为10个缓存区域,每个缓存区域对应一个稳定级别,专门用于存储对应所述稳定级别的数据块的逻辑地址。或者,控制器11也可以不事先发送给闪存装置22缓存区域划分信息,而是直接将数据块的逻辑地址与数据块的稳定级别发送给闪存装置22。闪存装置22根据所述数据块的稳定级别在缓存230中划分出一段缓存区域,将所述缓存区域与所述稳定级别对应(保存所述缓存区域与所述稳定级别之间的对应关系),之后,所述划分出的缓存区域可以专门用于保存对应所述稳定级别的数据块的逻辑地址。以上两种方式都可以实现将稳定级别相同的数据块的逻辑地址集中存储到缓存230的一块缓存空间中。下面介绍本发明实施例一种识别数据块稳定性的方法,所述方法从控制器11的角度描述根据数据块的引用计数,或者时间长度,或者引用计数和时间长度获得该数据块的稳定级别,并发送给闪存装置22的过程。请参考图4,图4是所述识别数据块稳定性的方法的流程示意图,所述方法可以应用在图1所示的存储系统中以及图2所示的控制器11中,其执行主体是控制器11中的处理器118。所述方法包括:步骤S201:从缓存120中读取第一数据块的信息,所述第一数据块的信息包括所述第一数据块的引用计数,或所述第一数据块保存在所述闪存装置的时间长度,或所述第一数据块的引用计数和所述第一数据块保存在所述闪存装置的时间长度,其中所述第一数据块的引用计数等于所述控制器接收所述第一数据块的数量。需要说明的是,在本实施例中,所述第一数据块是闪存装置22中保存的多个数据块中的其中一个,这里是以第一数据块为例进行说明。并且,本实施例中的第一数据块是指有效数据包含的数据块,对于无效数据,其包含的数据块的引用计数为0,控制器11会将引用计数为0的数据块的信息从缓存120中删除。另外,步骤S201的触发条件可以设置为控制器11接收的所有数据块的大小超过预设的容量阈值,或者预设的时间间隔到达,或者上述两个触发条件的其中一个满足时。其中,所述预设的容量阈值可以等于图1所示的存储系统对用户呈现的可用容量,或者所述可用容量的整数倍。步骤S202:根据所述第一数据块的信息确定所述第一数据块的稳定级别。其中,控制器11可以预先设定稳定级别的个数。可选的,一种实施方式是:由于闪存装置22中保存的每个数据块都有一个引用计数,因此可以将这些引用计数划分为多个引用计数区间,其中,每个引用计数区间对应一个稳定级别。举例来说,假设预先设定10个稳定级别,那么引用计数区间和稳定级别之间的对应关系可以如表1所示:表1那么,相应地,根据所述第一数据块的信息确定所述第一数据块的稳定级别具体可以是:根据所述第一数据块的引用计数确定第一引用计数区间,所述第一数据块的引用计数位于所述第一引用计数区间中;根据所述第一引用计数区间,以及表1所示的对应关系确定所述第一数据块的稳定级别。例如,第一数据块的引用计数是3,那么其对应的稳定级别为9。可选的,另一种实施方式是:将多个数据块保存在闪存装置的时间长度划分为多个时间区间,其中,每个时间区间对应一个稳定级别。举例来说,假设预先设定10个稳定级别,那么时间区间和稳定级别之间的对应关系可以如表2所示:数据块保存在闪存装置中的时间长度(单位:天)稳定级别+∞>时间长度≥35135>时间长度≥30230>时间长度≥25325>时间长度≥20420>时间长度≥15520>时间长度≥15615>时间长度≥10710>时间长度≥585>时间长度≥29时间长度=110表2那么,相应地,根据所述第一数据块的信息确定所述第一数据块的稳定级别具体可以是:根据所述第一数据块保存在闪存装置中的时间长度确定第一时间区间,所述第一数据块保存在闪存装置中的时间长度位于所述第一时间区间中;根据所述第一时间区间,以及表2所示的对应关系确定所述第一数据块的稳定级别。例如,第一数据块保存在闪存装置中的时间长度是12,那么其对应的稳定级别为7。可选的,再一种实施方式是:将多个时间长度划分为至少两个时间区间,同时也将多个引用计数划分为至少两个引用计数区间;时间区间、引用计数区间和稳定级别三者之间存在一个对应关系。举例来说,可以以时间长度是否大于阈值T为判断标准划分为两个时间区间,一个时间区间是(0,T),另一个时间区间是[T,+∞)。时间长度属于[T,+∞)的数据块的稳定级别大于时间长度属于(0,T)的数据块的稳定级别,在每个时间区间内,进一步地将引用计数划分为多个引用计数区间,属于相同引用计数区间的数据块的稳定级别相同。对于属于不同引用计数区间的数据块,引用计数大的数据块的稳定级别大于引用计数小的数据块的稳定级别。假设预先设定10个稳定级别,那么时间区间、引用计数区间和稳定级别之间的对应关系可以如表3所示:表3或者,也可以将多个引用计数划分为两个引用计数区间,一个引用计数区间是(0,10),另一个引用计数区间是[10,+∞)。引用计数属于[10,+∞)的数据块的稳定级别大于引用计数属于(0,10)的数据块的稳定级别,在每个引用计数区间内,进一步地将多个时间长度划分为多个时间区间,属于相同时间区间的数据块的稳定级别相同。对于属于不同时间区间的数据块,时间长度大的数据块的稳定级别大于时间长度小的数据块的稳定级别。假设预先设定10个稳定级别,那么时间区间、引用计数区间和稳定级别之间的对应关系可以如表4所示:表4相应地,根据所述第一数据块的信息确定所述第一数据块的稳定级别具体可以是:根据所述第一数据块的引用计数确定第一引用计数区间,所述第一数据块的引用计数位于所述第一引用计数区间中;根据所述第一数据块保存在所述闪存装置的时间长度确定第一时间区间,所述第一数据块保存在所述闪存装置的时间长度位于所述第一时间区间中;根据所述第一引用计数区间,所述第一时间区间,以及所述引用计数区间,时间区间与稳定级别的对应关系确定所述第一数据块的稳定级别。可以理解的是,无论是利用表3所示的对应关系还是利用表4所示的对应关系,只要第一数据块保存在所述闪存装置的时间长度和引用计数确定,其稳定级别也可以确定。可选的,在上述两种实施方式中,当控制器11处理完缓存120中保存的每个数据块后,本次任务完成,可以将各个数据块的保存在闪存装置中的时间长度均减去一个固定值,使得下次任务开始时,时间长度可以以一个较小的基数开始递增。步骤S203:将所述第一数据块的逻辑地址以及所述第一数据块的稳定级别发送给闪存装置22。具体地,控制器11可以单独发送第一数据块的逻辑地址和稳定级别给闪存装置22,也可以将第一数据块的逻辑地址和稳定级别,与其他数据块的逻辑地址和稳定级别一起发送给闪存装置22。举例来说,逻辑地址和稳定级别可以携带在自定义的命令中发送给所述闪存装置22。在本实施例中,控制器11可以根据(1)所述第一数据块的引用计数,和数据块的引用计数与稳定级别的对应关系,或(2)所述第一数据块保存在所述闪存装置的时间长度,和数据块保存在闪存装置的时间长度与稳定级别的对应关系,或(3)所述第一数据块的引用计数和所述第一数据块保存在所述闪存装置的时间长度,和数据块的引用计数,数据块保存在闪存装置的时间长度与稳定级别的对应关系,确定所述第一数据块的稳定级别,所述稳定级别可以反映数据块的稳定性,并且将所述数据块的稳定级别和逻辑地址发送给闪存装置22,使得闪存装置22将相同稳定级别的数据块进行集中存储。下面介绍本发明实施例一种在闪存装置中存储数据的方法,所述方法从闪存装置22的角度描述将稳定级别相同的数据块集中存储的过程。请参考图5,图5是所述在闪存装置中存储数据的方法的流程示意图,所述方法可以应用在图1所示的存储系统中以及图3A,图3B所示的闪存装置22中,其执行主体是闪存装置22中的处理器218。所述方法包括:步骤S301:获取目标逻辑地址对应的稳定级别,所述稳定级别用于表示数据块的稳定性。具体地,闪存装置22在步骤S301之前接收控制器11发送的多个逻辑地址,和与所述逻辑地址对应的稳定级别,并且可以将所述多个逻辑地址及其对应的稳定级别存储在缓存230中。所述目标逻辑地址是缓存230中保存的多个逻辑地址的其中一个,当数据搬移的任务触发时,可以从缓存230中获取所述目标逻辑地址对应的稳定级别。步骤S302:根据所述目标逻辑地址对应的稳定级别,将所述目标逻辑地址对应的数据块写入所述稳定级别对应的块中。在本实施例中,为了将相同稳定级别的数据块搬移到同样的block中,可以建立闪存芯片中的block与稳定级别的对应关系。按照这种对应关系,可以将目标逻辑地址对应的数据块从原来的block中读取出来,写入与其稳定级别对应的block中。所述闪存芯片中的block与稳定级别的对应关系可以是预先建立的,也可以是第一次将一个数据块或者多个稳定级别相同的数据块写入一个block后便记录所述稳定级别与block之间的对应关系。对于将目标逻辑地址对应的数据块从原来的block中读取出来具体可以是:通常情况下,闪存装置22的缓存230或者闪存芯片中保存有一张映射表,所述映射表用于保存各个数据块的逻辑地址和物理地址之间的对应关系,所以可以根据步骤S301中接收到的逻辑地址和所述映射表,从对应的物理地址所在的存储空间中读取出所述数据块。采用本实施例提供的方式,可以将相同稳定级别的数据块存储在一个block中。那么,对于存放稳定级别较高的数据块的block,其存储的数据块成为无效数据的可能性较小,整体来看,该block中不含无效数据或仅含少量的无效数据,这样的block属于利用率比较高的block,在对闪存装置22进行垃圾回收时不会回收这样的block;对于存放稳定级别较低的数据块的block,其存储的数据块成为无效数据的可能性较大,假设一个block中的大部分数据或者绝大部分数据都变成了无效数据,那么相应地,这个block中包含的有效数据较少,垃圾回收时需要迁移的数据也较少,减小了写放大。需要说明的是,本实施例的效果主要体现在之后的垃圾回收时搬移的有效数据会减少。由此可见,无论是存放稳定级别较高的数据块的block,还是存放稳定级别较低的数据块的block,都可以减小闪存装置22的写放大,因此在一定程度上延长了闪存装置22的寿命。另外,一种较优的实施方式是:将上面描述的步骤S301-步骤S302与垃圾回收操作结合在一起,也就是说,当闪存装置22需要进行垃圾回收时,按照步骤S301-步骤S302描述的方式进行垃圾回收,具体的,确定所述闪存芯片中包含的空闲的块的数量低于第一阈值时,依次从闪存芯片中查找出包含无效数据最多的块,从这些块中获取待搬移的数据块的逻辑地址,然后根据所述逻辑地址,在所述逻辑地址与稳定级别的对应关系中查找,获取所述逻辑地址对应的稳定级别(结合图5所示的实施方式,所述逻辑地址即所述目标逻辑地址),再将所述逻辑地址对应的数据块写入对应的块中。另一种较优的实施方式是:将上面描述的步骤S301-步骤S302与巡检操作结合在一起,也就是说,当闪存装置22需要进行巡检时,按照步骤S301-步骤S302描述的方式进行巡检,具体的,当预设的巡检周期到达时,依次从闪存芯片中查找出最长时间内未被擦除的块,从这些块中获取待搬移的数据块的逻辑地址,然后根据所述逻辑地址,在所述逻辑地址与稳定级别的对应关系中查找,获取所述逻辑地址对应的稳定级别(结合图5所示的实施方式,所述逻辑地址即所述目标逻辑地址),再将所述逻辑地址对应的数据块写入对应的块中。本领域技术人员可以理解的是,无论是垃圾回收还是巡检,搬移的数据都是有效数据,无效数据由于不可能再被读取所以不用再做搬移,搬移完成之后以block为单位擦除所有的无效数据即可。在本实施例中,由于闪存装置22接收到的控制器11发送的逻辑地址均是有效数据包含的数据块的逻辑地址(可参见图4所示实施例中步骤S201的描述),因此闪存装置22接收到的控制器11发送的逻辑地址对应的数据块都需要进行搬移。按照上面提供的两种较优的实施方式,可以在闪存装置22进行垃圾回收或者巡检时实现将稳定级别相同的数据块集中存储,由于闪存装置22在进行垃圾回收或者巡检时原本会进行数据搬移,因此本实施例并没有额外的数据搬移操作,可以进一步减小写放大。下面介绍本发明实施例另一种在闪存装置中存储数据的方法,请参考图6,图6是所述在闪存装置中存储数据的方法的流程示意图,所述方法可以应用在图1所示的存储系统中。在本实施例中,步骤S101-步骤S104描述的是控制器11将接收到的数据块存储在闪存装置22的过程。步骤S101-步骤S104可以应用在图2所示的控制器11中,其执行主体是控制器11中的处理器118。在步骤S101中,控制器11接收主机发送的写数据请求,所述写数据请求中包括数据对象以及所述数据对象的地址信息,所述地址信息可以包括逻辑单元号(英文全称:LogicalUnitNumber,英文简称:LUN)的ID以及LUN的起始地址偏移量;或者文件的ID以及文件的起始地址偏移量等等;或者当存储系统具有多个文件系统时,所述地址信息可以包括文件系统的ID、文件的ID以及文件的起始地址偏移量等等。所述数据对象是待写入闪存装置22的块数据或者文件。在步骤S102中,控制器11将所述数据对象划分为尺寸相同的多个数据块。在步骤S103中,控制器11从所述多个数据块中确定一个目标数据块,判断所述目标数据块是否已经保存在闪存装置22中。具体地,控制器11在将拆分后的数据块发送给闪存装置22存储之前,需要依次判断每个数据块是否已经保存在闪存装置22,如果是,则不需要再次进行保存。其判断方式可参考前面对重复数据删除模块功能的描述,这里不再赘述。在步骤S104中,若所述闪存装置22中没有保存与所述目标数据块相同的数据块,控制器11将所述目标数据块发送给闪存装置22进行存储,所述目标数据块的引用计数为初始值,并且将所述目标数据块的引用计数以及所述目标数据块写入闪存装置22的逻辑地址写入缓存120中;若所述闪存装置22中保存有与所述目标数据块相同的数据块,则增加所述与所述目标数据块相同的数据块的引用计数。具体地,所述目标数据块写入闪存装置22的逻辑地址可以是控制器11为所述目标数据块分配的逻辑地址,控制器11分配之后,将所述逻辑地址发送给闪存装置22,闪存装置22根据所述逻辑地址与物理地址之间的对应关系查找到所述逻辑地址对应的物理地址,将所述目标数据块写入所述物理地址对应的存储空间中;或者,也可以是闪存装置22存储所述数据块之后,反馈给控制器11的逻辑地址。按照步骤S101-步骤S104描述的方式,控制器11可以将接收到数据对象拆分成若干个数据块存储在闪存装置22中。可以理解的是,由于控制器11具有重复数据删除的功能,保存在闪存装置22中的数据块都是不同的数据块。这些多个不同的数据块的信息可以保存在缓存120中。步骤S105-步骤S107描述的是控制器11识别闪存装置22中存储的每个数据块的稳定级别,并发送给闪存装置22的过程。步骤S105-步骤S107可以应用在图2所示的控制器11中,其执行主体是控制器11中的处理器118。需要说明的是,所述稳定级别的识别过程与步骤S101-步骤S104描述的将接收到的数据块存储在闪存装置22的过程没有先后顺序之分。在步骤S105中,任务触发时,控制器11从缓存120中读取所述目标数据块的信息。这里的任务是指控制器11识别闪存装置22中每个数据块的稳定级别的任务。具体地,控制器11可以对所述多个数据块的信息进行扫描,依次读取每个数据块的信息。为了方便描述,在下面的步骤中仍以目标数据块的处理方式为例来进行说明,可以理解的是,其他数据块的处理方式和目标数据块类似。所述目标数据块的信息包括所述目标数据块的引用计数,或所述目标数据块保存在所述闪存装置的时间长度,或所述目标数据块的引用计数和所述目标数据块保存在所述闪存装置的时间长度。在步骤S106中,控制器11根据所述目标数据块的信息确定所述目标数据块的稳定级别。步骤S106与图5所示实施例中的步骤S202类似,请参考步骤S202的描述。在步骤S107中,控制器11将所述目标数据块的逻辑地址以及所述目标数据块的稳定级别发送给闪存装置22。按照步骤S105-步骤S107描述的方式,控制器11可以将多个数据块的逻辑地址以及稳定级别发送给闪存装置22。步骤S108-步骤S110描述的是闪存装置22接收控制器11发送的数据块的稳定级别之后,将稳定级别相同的数据块集中存储的过程。步骤S108-步骤S110可以应用在图3A、图3B所示的闪存装置(例如,SSD)中,其执行主体是闪存装置22中的处理器218。在步骤S108中,闪存装置22保存所述多个数据块的逻辑地址,以及与所述逻辑地址对应的稳定级别。可选的,一种保存方式是在闪存装置22的缓存230中建立一张映射表,用于保存从控制器11接收的数据块的逻辑地址与数据块的稳定级别之间的对应关系。可选的,另一种保存方式是在缓存230中保存多个数组,每个数组对应一个稳定级别。所述多个数据块的逻辑地址分别保存在其对应的数组中。可选的,再一种保存方式是预先将缓存230划分为若干个缓存区域,每个缓存区域对应一个稳定级别。将所述多个数据块的逻辑地址分别记录在其对应的缓存区域中。在步骤S109中,闪存装置22判断是否有相同稳定级别对应的逻辑地址的个数达到预设阈值,如果是,则根据所述相同稳定级别对应的逻辑地址读取数据块。所述相同稳定级别对应的逻辑地址可以包括步骤S105-步骤S107中的目标数据块的逻辑地址。需要说明的是,在图6所示的实施方式中,可以不和垃圾回收或者巡检操作结合,也就是说,在这种实施方式中,进行数据块搬移的触发条件和图5所示的实施方式有所不同,其触发条件是缓存中保存的相同稳定级别对应的逻辑地址的个数达到预设阈值。那么,对于如何判断是否有相同稳定级别对应的逻辑地址的个数达到预设阈值,可以有如下三种实施方式:第一种实施方式是,根据缓存230中保存的映射表确定是否有相同稳定级别的逻辑地址的个数达到预设阈值。第二种实施方式是判断缓存230中是否有一个数组中保存的逻辑地址的个数达到预设阈值。第三种实施方式是判断缓存230中是否有一个缓存区域中保存的逻辑地址的个数达到预设阈值。其中,可以将所述预设阈值设置成块的容量与数据块的尺寸之间的比值,按照这种实施方式,当逻辑地址的个数达到所述阈值后,所述多个逻辑地址对应的数据块正好将一个空闲的block填满。在步骤S110中,闪存装置22查找一个空闲的块,将所述读取出的数据块写入一个空闲的块中。依次类推,按照步骤S109-步骤S110描述的方式,可以依次将稳定级别相同的数据块存储在一个或多个空闲的块中。另外,所述预设阈值也可以设置成大于2,但小于块的容量与数据块的尺寸之间的比值的一个数值,此时,在步骤S110中,则可以查找一个未被写满的块,将稳定级别相同的数据块存储到所述未被写满的块中。在图6所示的实施例中,闪存装置22将稳定级别相同的数据块集中在一个或多个空闲的block中,使得在进行之后的垃圾回收操作时搬移的有效数据减少,从而减小写放大,在一定程度上延长闪存装置22的寿命。本发明实施例还提供了一种识别数据块的稳定性的装置40,所述装置40位于控制器11中,所述控制器位于图1所示的存储系统中,所述存储系统包括闪存装置22,所述闪存装置22中保存有第一数据块;如图7所示,所述装置40包括:存储模块401,用于保存所述第一数据块的信息,所述第一数据块的信息包括所述第一数据块的引用计数,或所述第一数据块保存在所述闪存装置的时间长度,或所述第一数据块的引用计数和所述第一数据块保存在所述闪存装置的时间长度,其中所述第一数据块的引用计数等于所述控制器接收所述第一数据块的数量;读取模块402,用于从所述存储模块中读取所述第一数据块的信息;确定模块403,用于根据(1)所述第一数据块的引用计数,和数据块的引用计数与稳定级别的对应关系,或(2)所述第一数据块保存在所述闪存装置的时间长度,和数据块保存在闪存装置的时间长度与稳定级别的对应关系,或(3)所述第一数据块的引用计数和所述第一数据块保存在所述闪存装置的时间长度,和数据块的引用计数,数据块保存在闪存装置的时间长度与稳定级别的对应关系,确定所述第一数据块的稳定级别;发送模块404,用于将所述第一数据块的逻辑地址以及所述第一数据块的稳定级别发送给所述闪存装置22。在本实施例中,识别数据块的稳定性的装置40可以根据(1)所述第一数据块的引用计数,和数据块的引用计数与稳定级别的对应关系,或(2)所述第一数据块保存在所述闪存装置的时间长度,和数据块保存在闪存装置的时间长度与稳定级别的对应关系,或(3)所述第一数据块的引用计数和所述第一数据块保存在所述闪存装置的时间长度,和数据块的引用计数,数据块保存在闪存装置的时间长度与稳定级别的对应关系,确定所述第一数据块的稳定级别,所述稳定级别可以反映数据块的稳定性,并且将所述数据块的稳定级别和逻辑地址发送给闪存装置22,使得闪存装置22将相同稳定级别的数据块进行集中存储。可选的,在图7所示的实施方式中,所述数据块的引用计数与稳定级别的对应关系包括:引用计数区间与稳定级别的对应关系;那么,所述确定模块403,具体用于根据所述第一数据块的引用计数确定第一引用计数区间,所述第一数据块的引用计数位于所述第一引用计数区间中;根据所述第一引用计数区间,以及引用计数区间与稳定级别的对应关系确定所述第一数据块的稳定级别。可选的,在图7所示的实施方式中,所述数据块保存在闪存装置的时间长度与稳定级别的对应关系包括:时间区间与稳定级别的对应关系;那么,所述确定模块403,具体用于根据所述第一数据块保存在所述闪存装置的时间长度确定第一时间区间,所述第一数据块保存在所述闪存装置的时间长度位于所述第一时间区间中;根据所述第一时间区间,以及时间区间与稳定级别的对应关系确定所述第一数据块的稳定级别。可选的,在图7所示的实施方式中,所述数据块的引用计数,数据块保存在闪存装置的时间长度与稳定级别的对应关系包括:引用计数区间,时间区间与稳定级别的对应关系;那么,所述确定模块403,具体用于根据所述第一数据块的引用计数确定第一引用计数区间,所述第一数据块的引用计数位于所述第一引用计数区间中;根据所述第一数据块保存在所述闪存装置的时间长度确定第一时间区间,所述第一数据块保存在所述闪存装置的时间长度位于所述第一时间区间中;根据所述第一引用计数区间,所述第一时间区间,以及所述引用计数区间,时间区间与稳定级别的对应关系确定所述第一数据块的稳定级别。另外,装置40各个模块的具体实现方式可参考图5或图7所示的方法实施例,这里不再赘述。本发明实施例还提供了一种在闪存装置中存储数据的装置50,装置50位于所述闪存装置22的主控制器中,所述闪存装置22中存储有块,所述装置50包括:获取模块501,用于获取目标逻辑地址对应的稳定级别,所述稳定级别用于表示数据块的稳定性;迁移模块502,用于根据所述目标逻辑地址对应的稳定级别,将所述目标逻辑地址对应的数据块写入所述稳定级别对应的块中。采用本实施例提供的装置50,可以将相同稳定级别的数据块存储在一个block中。可选的,所述获取模块501,还用于在所述闪存芯片中查找包含无效数据最多的块,所述包含无效数据最多的块包括所述目标逻辑地址对应的数据块。可选的,所述获取模块501,还用于在所述闪存芯片中查找最长时间内未被擦除的块,所述最长时间内未被擦除的块包括所述目标逻辑地址对应的数据块。可选的,所述装置50还包括存储模块503,所述存储模块503中保存有逻辑地址,所述逻辑地址对应的稳定级别与所述目标逻辑地址对应的稳定级别相同;所述获取模块501,具体用于确定所述缓存中保存的逻辑地址的个数达到预设阈值时,获取所述目标逻辑地址对应的稳定级别。其中,所述预设阈值等于块的容量除以数据块的尺寸所得的商。另外,装置50各个模块的具体实现方式可参考图6或图7所示的方法实施例,这里不再赘述。本发明实施例还提供一种数据处理的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行前述任意一个方法实施例所述的方法流程。本领域普通技术人员可以理解,前述的存储介质包括:U盘、移动硬盘、磁碟、光盘、随机存储器(Random-AccessMemory,RAM)、固态硬盘(SolidStateDisk,SSD)或者非易失性存储器(non-volatilememory)等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1