数据存储的方法、装置及固态硬盘与流程

文档序号:12718542阅读:155来源:国知局
数据存储的方法、装置及固态硬盘与流程

本公开涉及计算机技术领域,具体地,涉及一种数据存储的方法、装置及固态硬盘。



背景技术:

随着数据存储技术的高速发展,越来越多的数据存储装置出现在人们使用的电子设备中,例如:SSD(Solid State Drives,固态硬盘)等。SSD因具有读写速度快、抗震动、低功耗、无噪音、低热量、以及质量轻等特点,已被广泛应用于军事、车载、工业、医疗、和航空等领域。

SSD分为多个区块(Block),每个区块分为多个页面(pages)。SSD可以直接以页面为单位进行数据写入操作,且以块为单位进行数据删除操作。也就是说,SSD将待写入数据写入某一区块的某一页面,待该页面被写满后,SSD再将待写入数据写入该区块的另一页面,且SSD只能删除一整个区块中存储的全部数据。为了防止写入SSD中的数据发生错误,在将数据写入SSD之前,需要对其进行编码,相应地,在读取SSD中的数据之前,需要对其进行解码。为了提高SSD的使用寿命,当SSD的某一页面中的已存数据变为无用数据时,SSD将无用数据所占的存储单元标记为无效,以提高SSD的使用寿命。

随着SSD的使用时长的增加,SSD中被标记为无效的存储单元越来越多,为了提高SSD的利用率,SSD中设置有缓存区,以便于进行垃圾回收。相关技术中的垃圾回收方案如下:

首先,获取用于读取待回收数据的命令,从无用数据所占的区块中读取待回收数据,并对其进行解码,将解码后的数据存储到缓存区;然后,对缓存区中存储的数据进行编码,将编码后的数据存储到该缓存区,获取用于写入待回收数据的命令,并将编码后的数据写入空闲区块中;最后,以区块为单位,删除无用数据所占的区块中的全部数据。

然而,垃圾回收方案所包括的编解码过程会导致SSD的功耗较大;此外,对用于写入待回收数据的命令的获取,会影响SSD与外部设备之间正在进行的数据传输。可见,相关技术中的垃圾回收方案有待改善。



技术实现要素:

本公开的目的是提供一种数据存储方法、装置及固态硬盘,以减小SSD进行垃圾回收的功耗。

本公开第一方面提供一种数据存储的方法,应用于固态硬盘SSD,所述方法包括:

根据第一命令,读取所述SSD的第一存储单元中的数据;

将所述数据发送给所述SSD的解码器,并接收所述解码器返回的与所述数据对应的第一数据信息以及第二数据信息;

将所述第一数据信息以及所述第二数据信息写入所述SSD的第二存储单元中,所述第二存储单元不同于所述第一存储单元。

可选地,所述第二数据信息包括校验信息。

可选地,所述方法还包括:

从多个命令中分离出用于写入待回收数据的写命令;

将所述用于写入待回收数据的写命令添加到第一队列中,并将所述多个命令中的其他命令添加到第二队列中,所述多个命令中的其他命令不同于所述用于写入待回收数据的写命令;

从所述第二队列中获取所述第一命令。

可选地,将所述第一数据信息以及所述第二数据信息写入所述SSD的第二存储单元中,包括:

在接收到所述第一数据信息以及所述第二数据信息时,获取与所述第一命令匹配的第二命令;

根据所述第二命令,将所述第一数据信息以及所述第二数据信息写入所述SSD的第二存储单元中。

可选地,所述方法还包括:

根据所述SSD的空闲存储单元的存储地址,建立空地址指针队列;

将所述空地址指针队列中的各个空地址指针分别指向的存储单元分配给所述第一队列。

可选地,获取与所述第一命令匹配的第二命令,包括:

根据所述第一命令携带的第一标记信息,确定与所述第一标记信息匹配的第二标记信息;

获取携带所述第二标记信息的命令;

其中,针对同一待回收数据的多个命令携带有相互匹配的标记信息。

本公开第二方面提供一种数据存储的装置,应用于固态硬盘SSD,所述装置包括:

读取模块,用于根据第一命令,读取所述SSD的第一存储单元中的数据;

收发模块,用于将所述数据发送给所述SSD的解码器,并接收所述解码器返回的与所述数据对应的第一数据信息以及第二数据信息;

存储模块,用于将所述第一数据信息以及所述第二数据信息写入所述SSD的第二存储单元中,所述第二存储单元不同于所述第一存储单元。

可选地,所述第二数据信息包括校验信息。

可选地,所述装置还包括:

提取模块,用于从多个命令中分离出用于写入待回收数据的写命令;

分类模块,用于将所述用于写入待回收数据的写命令添加到第一队列中,并将所述多个命令中的其他命令添加到第二队列中,所述多个命令中的其他命令不同于所述用于写入待回收数据的写命令;

获取模块,用于从所述第二队列中获取所述第一命令。

可选地,所述存储模块包括:

第一获取子模块,用于在接收到所述第一数据信息以及所述第二数据信息时,获取与所述第一命令匹配的第二命令;

存储子模块,用于根据所述第二命令,将所述第一数据信息以及所述第二数据信息写入所述SSD的第二存储单元中。

可选地,所述装置还包括:

建立模块,用于根据所述SSD的空闲存储单元的存储地址,建立空地址指针队列;

分配模块,用于将所述空地址指针队列中的各个空地址指针分别指向的存储单元分配给所述第一队列。

可选地,所述获取模块包括:

确定子模块,用于根据所述第一命令携带的第一标记信息,确定与所述第一标记信息匹配的第二标记信息;

第二获取子模块,用于获取携带所述第二标记信息的命令;

其中,针对同一待回收数据的多个命令携带有相互匹配的标记信息。

本公开第三方面提供一种固态硬盘,包括:控制器、解码器以及多个存储单元;

所述控制器用于:根据第一命令,读取所述SSD的第一存储单元中的数据;以及将所述数据发送给所述SSD的解码器;

所述解码器用于对所述数据进行解码,并向所述中央处理器返回与所述数据对应的第一数据信息以及第二数据信息;

所述控制器还用于:接收所述解码器返回的与所述数据对应的第一数据信息以及第二数据信息;以及将所述第一数据信息以及所述第二数据信息写入所述SSD的第二存储单元中,所述第二存储单元不同于所述第一存储单元。

可选地,所述控制器还用于:

从多个命令中分离出用于写入待回收数据的写命令;

将所述用于写入待回收数据的写命令添加到第一队列中,并将所述多个命令中的其他命令添加到第二队列中,所述多个命令中的其他命令不同于所述用于写入待回收数据的写命令;

从所述第二队列中获取所述第一命令。

可选地,所述控制器还用于:

在接收到所述第一数据信息以及所述第二数据信息时,获取与所述第一命令匹配的第二命令;

根据所述第二命令,将所述第一数据信息以及所述第二数据信息写入所述SSD的第二存储单元中。

可选地,所述控制器还用于:

根据所述SSD的空闲存储单元的存储地址,建立空地址指针队列;

将所述空地址指针队列中的各个空地址指针分别指向的存储单元分配给所述第一队列。

可选地,所述控制器还用于:

根据所述第一命令携带的第一标记信息,确定与所述第一标记信息匹配的第二标记信息;

获取携带所述第二标记信息的命令;

其中,针对同一待回收数据的多个命令携带有相互匹配的标记信息。

本公开中,SSD在从第一存储单元中读取数据后,将SSD所读取的数据发送给SSD的解码器,以使解码器对SSD所读取的数据进行解码。在解码器完成对SSD所读取的数据的解码后,将与SSD所读取的数据对应的第一数据信息以及第二数据信息返回给SSD。

由于SSD接收到与SSD所读取的数据对应的第一数据信息以及第二数据信息,而不是解码器对SSD所读取的数据进行解码后的数据。所以对SSD的编码器来说,在SSD采用本公开提供的数据存储方法进行垃圾回收的过程中,没有需要进行编码的数据,因而SSD无需执行对待回收数据进行编码的步骤,SSD可以直接将第一数据信息和第二数据信息写入SSD的第二存储单元,进而减小SSD进行垃圾回收的功耗。并且,由于SSD无需执行对待回收数据进行编码的步骤,所以在SSD中设置的缓存区的容量也可相应减小,因为无需存储编码后的数据。

本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:

图1是根据一示例性实施例示出的一种数据存储的方法的流程图。

图2是根据一示例性实施例示出的一种数据存储的方法的另一流程图。

图3是根据一示例性实施例示出的一种空地址指针队列与第一队列的示意图。

图4是根据一示例性实施例示出的适用于本公开的SSD的结构示意图。

图5是根据一示例性实施例示出的一种数据存储的装置的框图。

具体实施方式

以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。

在对本公开提供的数据存储的方法进行说明之前,首先对本公开涉及的相关技术进行说明。如在背景技术中所阐述的,相关技术适用于设置有缓存区的SSD,因而相关技术所适用的SSD包括:CPU(Central Process Unit,中央处理器)、读写控制器、编码器、解码器、多个区块以及缓存区。其中,编码器和解码器可以集成为编解码器。

其中,CPU用于接收外部设备发送的读数据命令以及写数据命令,以完成与外部设备之间的数据传输;CPU还用于生成垃圾回收命令:用于读取待回收数据的命令,以及用于写入待回收数据的命令;CPU还用于将所有命令添加到同一命令队列中。读写控制器用于检测上述命令队列中是否有待执行的命令,当检测到该命令队列中有待执行命令时,从该命令队列中依次逐一读取待执行命令,并执行所读取的待执行命令。如在背景技术中所阐述的,缓存区用于存储解码后的数据。解码器用于对待读取数据进行解码,编码器用于对待写入数据进行编码。多个区块用于存储已编码数据。

然而,相关技术所适用的SSD中的解码器与编码器分别进行相互独立的解码过程以及编码过程,也就是说,解码器对待回收数据的解码过程,与编码器对缓存区中存储的数据的编码过程,两者是相对独立的。由此导致SSD进行垃圾回收的功耗较大。

此外,相关技术所适用的SSD中的CPU将所有命令添加到同一命令队列中,该命令队列中的各个命令被读写控制器顺序逐一读取并执行,如果CPU在编码器对缓存区中存储的数据编码完成之前,将用于写入待回收数据的命令添加到该命令队列中,则该用于写入待回收数据的命令会被读写控制器搁置,直至编码完成为止,因而延迟该命令队列中的其他命令执行。在编码完成之后,通过编码器对CPU的中断使其能够将用于写入待回收数据的命令发送给读写控制器,进而完成对待回收数据的写入。然而,该中断会影响CPU与外部设备之间正在进行的数据传输。

为了减小SSD进行垃圾回收的功耗,本公开提供一种数据存储的方法。请参考图1,图1是根据一示例性实施例示出的一种数据存储的方法的流程图。如图1所示,该方法包括以下步骤:

步骤S11:根据第一命令,读取所述SSD的第一存储单元中的数据;

步骤S12:将所述数据发送给所述SSD的解码器,并接收所述解码器返回的与所述数据对应的第一数据信息以及第二数据信息;

步骤S13:将所述第一数据信息以及所述第二数据信息写入所述SSD的第二存储单元中,所述第二存储单元不同于所述第一存储单元。

如前所述,SSD进行垃圾回收主要包括对待回收数据进行解码的步骤,以及对待回收数据进行编码的步骤。本公开提供的数据存储方法供SSD进行垃圾回收,以跳过对待回收数据进行编码的步骤,也就是说,SSD采用本公开提供的数据存储方法进行垃圾回收,无需执行对待回收数据进行编码的步骤,进而减小SSD进行垃圾回收的功耗。并且,由于SSD无需执行对待回收数据进行编码的步骤,所以在SSD中设置的缓存区的容量也可相应减小,因为无需存储编码后的数据。

SSD采用本公开提供的数据存储方法进行垃圾回收,是由第一命令触发的。第一命令是用于读取待回收数据的命令。SSD根据第一命令,读取第一存储单元中的数据。第一存储单元是无用数据所占的存储单元,属于SSD的某一个区块。由于SSD是进行垃圾回收,所以SSD所读取的数据是待回收数据,也即SSD所读取的数据所占的存储单元未被标记为无效。

SSD在从第一存储单元中读取数据后,将SSD所读取的数据发送给SSD的解码器,以使解码器对SSD所读取的数据进行解码。在解码器完成对SSD所读取的数据的解码后,将与SSD所读取的数据对应的第一数据信息以及第二数据信息返回给SSD。由于SSD接收到与SSD所读取的数据对应的第一数据信息以及第二数据信息,而不是解码器对SSD所读取的数据进行解码后的数据。所以对SSD的编码器来说,在SSD采用本公开提供的数据存储方法进行垃圾回收的过程中,没有需要进行编码的数据,因而SSD无需执行对待回收数据进行编码的步骤,SSD可以直接将第一数据信息和第二数据信息写入SSD的第二存储单元,进而减小SSD进行垃圾回收的功耗。

可选地,所述第二数据信息包括校验信息。

本公开对SSD的解码器进行改进,使其具备两种工作模式:通用工作模式以及垃圾回收工作模式。在通用工作模式下,SSD的解码器对待读取数据进行解码,以输出解码后的数据。也就是说,SSD的解码器所输出的仅仅是数据信息,而不输出用于纠错校验的校验信息。在垃圾回收工作模式下,SSD的解码器对待回收数据进行解码,以输出第一数据信息以及第二数据信息,且第二数据信息包括校验信息。也就是说,SSD的解码器不仅输出数据信息,还输出用于纠错校验的校验信息,因而无需利用SSD的编码器生成校验信息。SSD可以直接将第一数据信息和第二数据信息写入SSD的第二存储单元。

可选地,请参考图2,图2是根据一示例性实施例示出的一种数据存储的方法的另一流程图。如图2所示,该方法除包括步骤S11、步骤S12以及步骤S13外,还包括以下步骤:

步骤S10a:从多个命令中分离出用于写入待回收数据的写命令;

步骤S10b:将所述用于写入待回收数据的写命令添加到第一队列中,并将所述多个命令中的其他命令添加到第二队列中,所述多个命令中的其他命令不同于所述用于写入待回收数据的写命令;

步骤S10c:从所述第二队列中获取所述第一命令。

如前所述,对用于写入待回收数据的命令的获取,会影响SSD的CPU与外部设备之间正在进行的数据传输。为避免该问题,本公开提出对不同命令进行分类,将用于写入待回收数据的命令添加到专用队列中,将其他命令添加到通用队列中。其中,专用队列中的各个命令可以被乱序执行,通用队列中的各个命令仍然被顺序执行。

步骤S10a中的多个命令包括:外部设备向SSD的CPU发送的读数据命令以及写数据命令,用于读取待回收数据的命令,以及用于写入待回收数据的命令。因此,SSD的CPU将用于写入待回收数据的命令从多个命令中分离出来,然后将用于写入待回收数据的命令添加到第一队列中,第一队列即为上述专用队列;并将其他命令添加到第二队列中,第二队列即为上述通用队列。

SSD的读写控制器检测第二队列中是否有待执行命令,如果SSD的读写控制器检测到第二队列中有待执行命令,则从中获取并执行。一种可能的情况是:SSD的控制从第二队列中检测到第一命令,则从第二队列中获取第一命令,接着,SSD根据第一命令,执行步骤S11至步骤S13。

可选地,步骤S13包括:

在接收到所述第一数据信息以及所述第二数据信息时,获取与所述第一命令匹配的第二命令;

根据所述第二命令,将所述第一数据信息以及所述第二数据信息写入所述SSD的第二存储单元中。

在SSD执行步骤S12的过程中,SSD接收到SSD的编码器返回的第一数据信息和第二数据信息。SSD在接收到SSD的编码器返回的第一数据信息和第二数据信息时,获取与第一命令匹配的第二命令。一种可能的实施方式是:SSD在接收到SSD的编码器返回的第一数据信息和第二数据信息时,SSD的读写控制器从第一队列中获取第二命令,也即从上述专用队列中获取第二命令。因而,无需通过对SSD的CPU的中断,即可获取用于写入待回收数据的命令,SSD进行垃圾回收,不会影响SSD的CPU与外部设备之间正在进行的数据传输,垃圾回收以及与外部设备之间的数据传输,两者可以并行,互不影响。

可选地,获取与所述第一命令匹配的第二命令,包括:

根据所述第一命令携带的第一标记信息,确定与所述第一标记信息匹配的第二标记信息;

获取携带所述第二标记信息的命令;

其中,针对同一待回收数据的多个命令携带有相互匹配的标记信息。

第一命令与第二命令匹配,是指第一命令与第二命令分别是针对同一待回收数据的读命令以及写命令,因而第一命令与第二命令是成对的。为了便于SSD的读写控制器从第一队列中获取第二命令,SSD的CPU可以在生成第一命令和第二命令后,对第一命令和第二命令分别标记相互匹配的标记信息。示例地,对第一命令和第二命令均标记同一tag值。

由于SSD的CPU对第一命令和第二命令进行了标记,所以SSD的读写控制器在读取第一命令后,可以获得第一命令携带的标记信息。SSD在接收到SSD的编码器返回的第一数据信息和第二数据信息时,SSD的读写控制器可以根据第一命令携带的标记信息,从第一队列中获取携带有与第一命令携带的标记信息匹配的命令。示例地,SSD的读写控制器从第一队列中获取与第一命令携带的tag值相同的命令。

可选地,所述方法还包括:

根据所述SSD的空闲存储单元的存储地址,建立空地址指针队列;

将所述空地址指针队列中的各个空地址指针分别指向的存储单元分配给所述第一队列。

由于第一队列中的各个命令可以被乱序执行,第一队列中的第二命令何时被执行,取决于SSD何时接收到解码器返回的与该第二命令对应的第一数据信息和第二数据信息。为了提高SSD的利用率,在第一队列中的某一命令被SSD的读写控制器读取并执行后,该命令所占的存储单元可以被释放,以使得该命令所占的存储单元变为空闲存储单元。

为了充分利用多个空闲存储单元,本公开提出利用空地址指针队列管理各个空闲存储单元的存储地址,也就是说,空地址指针队列中存储有多个空地址指针,一个空地址指针指向一个空闲存储单元的存储地址。当第一队列中的一个命令被SSD的读写控制器读取并执行,该命令所占的存储单元变为空闲存储单元,被标记为空;当SSD的CPU生成一个用于写入待回收数据的命令时,可以从空地址指针队列中读取一个空地址指针,然后将所生成的命令存储到该空地址指针所指向的存储单元,接着将该空地址指针所指向的存储单元标记为非空,并且将该空地址指针从空地址指针队列中移除。

示例地,请参考图3,图3是根据一示例性实施例示出的一种空地址指针队列与第一队列的示意图。如图3所示,1代表第一队列,第一队列中有4个命令:分别被标记为tag0、tag1、tag2、tag3。2代表空地址指针队列,空地址指针队列中有两个空地址指针:tag1_ptr和tag2_ptr。

当标记为tag1和标记为tag2的命令被SSD的读写控制器读取并执行时,标记为tag1和标记为tag2的命令各自所占的存储单元被标记为空,且标记为tag1和标记为tag2的命令各自所占的存储单元的存储地址对应的空地址指针被添加到空地址指针队列。当SSD的CPU生成一个用于写入待回收数据的命令时,可以从空地址指针队列中读取一个空地址指针,假设为tag1_ptr,则SSD的CPU将该命令写入tag1_ptr指向的存储单元(如图3中的4所示),将tag1_ptr从空地址指针队列中移除(如图3中的3所示)。图3中,以有填充示意空,以无填充示意非空。

下面以一个实施例说明本公开提供的数据存储的方法。本公开所适用的SSD除包括CPU、读写控制器、编码器、解码器、多个区块以及缓存区外,还包括垃圾回收加速器。其中,编码器和解码器可以集成为编解码器。垃圾回收加速器可以独立于本公开所适用的SSD中的其他组件,也可以集成于本公开所适用的SSD中的某一组件,例如:垃圾回收加速器可以集成在SSD的CPU上,或者垃圾回收加速器可以集成在SSD的读写控制器上,或者垃圾回收加速器可以集成在SSD的解码器上。请参考图4,图4是根据一示例性实施例示出的适用于本公开的SSD的结构示意图。图4以垃圾回收加速器独立于本公开所适用的SSD中的其他组件,且缓存区设置在垃圾回收加速器内为例。

下面对本公开提供的数据存储的方法由图4所示的SSD执行的过程进行说明。

步骤1:SSD的CPU将用于写入待回收数据的命令添加到第一队列中,并将多个命令中的其他命令添加到第二队列中;并且将每一对针对同一待回收数据的读命令和写命令分别标记相同的tag值,以便SSD的读写控制器根据tag值,从第一队列中获取用于写入待回收数据的命令。

步骤2:SSD的读写控制器检测到第二队列中有第一命令之后,读取并执行第一命令。

步骤3:SSD的读写控制器把所读取的数据存放到垃圾回收加速器的缓存中。

步骤4:垃圾回收加速器把缓存中的数据发送给解码器,以便于解码器对其进行解码,并通知解码器切换到垃圾回收工作模式。

步骤5:解码器将解码后所得的第一数据信息和第二数据信息存放到垃圾回收加速器的缓存。

步骤6:垃圾回收加速器在接收到第一数据信息和第二数据信息后,通知SSD的读写控制器可以对第一数据信息和第二数据信息进行写入操作。

步骤7:SSD的读写控制器根据tag值,从第一队列中获取用于写入待回收数据的命令并执行。

以上为本公开提供的数据存储的方法。基于同一发明构思,本公开还提供了一种数据存储的装置,应用于SSD。请参考图5,图5是根据一示例性实施例示出的一种数据存储的装置的框图。如图5所示,该装置500包括:

读取模块501,用于根据第一命令,读取所述SSD的第一存储单元中的数据;

收发模块502,用于将所述数据发送给所述SSD的解码器,并接收所述解码器返回的与所述数据对应的第一数据信息以及第二数据信息;

存储模块503,用于将所述第一数据信息以及所述第二数据信息写入所述SSD的第二存储单元中,所述第二存储单元不同于所述第一存储单元。

可选地,所述第二数据信息包括校验信息。

可选地,所述装置还包括:

提取模块,用于从多个命令中分离出用于写入待回收数据的写命令;

分类模块,用于将所述用于写入待回收数据的写命令添加到第一队列中,并将所述多个命令中的其他命令添加到第二队列中,所述多个命令中的其他命令不同于所述用于写入待回收数据的写命令;

获取模块,用于从所述第二队列中获取所述第一命令。

可选地,所述存储模块包括:

第一获取子模块,用于在接收到所述第一数据信息以及所述第二数据信息时,获取与所述第一命令匹配的第二命令;

存储子模块,用于根据所述第二命令,将所述第一数据信息以及所述第二数据信息写入所述SSD的第二存储单元中。

可选地,所述装置还包括:

建立模块,用于根据所述SSD的空闲存储单元的存储地址,建立空地址指针队列;

分配模块,用于将所述空地址指针队列中的各个空地址指针分别指向的存储单元分配给所述第一队列。

可选地,所述获取模块包括:

确定子模块,用于根据所述第一命令携带的第一标记信息,确定与所述第一标记信息匹配的第二标记信息;

第二获取子模块,用于获取携带所述第二标记信息的命令;

其中,针对同一待回收数据的多个命令携带有相互匹配的标记信息。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

基于同一发明构思,本公开还提供一种固态硬盘,包括:控制器、解码器以及多个存储单元;所述控制器用于执行本公开提供的数据存储的方法。请参考图4,图4是该固态硬盘的一种可能的示意图。图4中的CPU、读写控制器、以及垃圾回收加速器共同组成固态硬盘中的控制器,以完成本公开提供的数据存储的方法。

以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。

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