存储设备、存储系统和计算设备的制作方法

文档序号:14257179阅读:205来源:国知局

相关申请的交叉引用

本申请基于并要求于2016年10月18日提交的美国非临时专利申请15/296,841的优先权;其全部内容通过引用并入在此。

本公开总体上涉及存储设备、存储系统以及计算设备。



背景技术:

存储系统通常包括主机和一个或多个存储设备,存储设备中的每个可以包括一个或多个非易失性存储器芯片,诸如nand闪存芯片。为了使用数据的标识符或数据的逻辑地址来确定存储数据的物理位置,将映射数据存储在存储设备中的每一个存储设备中或主机中,并且数据的物理位置通过参考映射数据来确定。具体地,在一种类型的存储系统中,这种映射数据存储在存储设备中的每个存储设备中,并且通过逻辑地址指定在主机和存储设备之间通信的数据的位置。在另一类型的存储系统中,映射数据存储在主机中,并且在主机和存储设备之间通信的数据的位置是例如由非易失性存储器芯片的物理地址指定的数据的物理位置。

在后一种类型的存储系统,即其中主机存储映射数据的系统中,通常不在存储设备中存储映射数据(更具体地是,与存储在主机中的映射数据相同的映射表)。其原因是主机主动确定要访问的存储设备的位置,并且期望存储设备以更被动的方式操作。此外,主机通常至少将最新的映射数据存储在易失性存储器中,以使得主机可以快速访问映射数据(尽管可以将未更新(non-updated)的映射数据存储在主机的非易失性存储器中)。然而,在这种系统中,当存储在主机的易失性存储器中的映射数据由于一些原因(例如,主机的突然断电)而变得不可用或丢失时,主机可能部分地失去对存储在存储设备中的数据的访问。期望以确保更可靠的对其访问的方式在存储设备中存储数据。



技术实现要素:

根据实施例,一种存储设备包括:非易失性存储器,其包括多个物理块;可连接到主机的通信接口;以及控制器。控制器被配置为生成主机数据的元数据,所述主机数据包括用户数据和用户数据的元数据,并且当与写入命令相关联地通过通信接口接收到主机数据时,在非易失性存储器的物理块中以主机数据的元数据、用户数据的元数据以及用户数据的顺序连续地写入主机数据的元数据、用户数据的元数据以及用户数据。

根据另一实施例,一种存储系统包括:存储设备以及主机。该存储设备包括非易失性存储器、通信接口以及控制器。该非易失性存储器包括多个物理块。该主机连接到存储设备的通信接口并且包括处理器和易失性存储器,在该易失性存储器中存储用户数据的逻辑地址或标识符与非易失性存储器的物理位置之间的映射。控制器被配置为生成主机数据的元数据,所述主机数据包括用户数据和用户数据的元数据,并且当与写入命令相关联地通过通信接口从主机接收到主机数据时,在非易失性存储器的物理块中以主机数据的元数据、用户数据的元数据以及用户数据的顺序连续地写入主机数据的元数据、用户数据的元数据以及用户数据。

根据另一实施例,一种可连接到非易失性存储设备的计算设备包括易失性存储器和处理器。处理器被配置为与由其发出的写入命令相关联地发送包括用户数据和用户数据的元数据的主机数据,在易失性存储器中存储用户数据的逻辑地址或标识符与写入用户数据的非易失性存储设备的物理位置之间的映射,当映射从易失性存储器丢失时或当易失性存储器中的映射不可访问时向非易失性存储设备发出扫描命令,以及响应于扫描命令基于从非易失性存储设备返回的主机数据的元数据和用户数据的元数据来重构映射。

根据实施例,可以提供更可靠的数据存储系统。

附图说明

图1示出根据实施例的包括主机和至少一个存储设备的存储系统的配置。

图2示出根据实施例的存储系统的物理配置。

图3示出根据实施例的主机的软件层结构和在主机与存储设备之间的通信架构。

图4示出存储设备中的闪存芯片的配置。

图5示出闪存芯片中的存储器单元阵列的详细电路结构。

图6示出存储在四电平nand单元类型的存储器单元中的2位四电平数据(数据“11”、“01”、“10”以及“00”)与每个电平的阈值电压分布之间的关系。

图7示出根据实施例的物理地址的地址结构的示例。

图8示出根据实施例的指示地址对应关系的查找表(lut)的示例。

图9示出实施例中基于块池的物理块的映射的概况。

图10示出根据实施例的块映射表(bmt)的示例。

图11a和11b示意性地示出根据本实施例的在写入操作期间写入闪存16的物理块中的数据内容。

图12示出根据实施例的根据在存储设备中执行的写入操作的数据流和块映射转换的架构概述。

图13示出根据实施例执行的写入操作的流程。

图14示出根据实施例执行的扫描操作的流程。

具体实施方式

下面参考附图描述本公开的细节。

[存储系统]

图1示出根据实施例的存储系统1的配置。存储系统1包括主机3、一个或多个存储设备2,以及被配置为连接主机3和存储设备2中每个存储设备的接口10。在本实施例中,存储系统1是如图2所示的2u存储装置。也就是说,主机3和一个或多个存储设备2被容纳在具有2u存储装置的大小的壳体中。存储设备2中的每个存储设备是非易失性存储设备,诸如2.5英寸形状因子(facotr)、3.5英寸形状因子,m.2形状因子或附加卡(aic)形状因子。此外,在本实施例中,接口10采用pciexpress(外围组件互连高速,pcie)接口。可替代地,接口10可以采用任何其它技术上可行的协议,诸如sas(串行连接scsi)协议、usb(通用串行总线)、sata(串行高级技术附件)、雷电以太网光纤通道等。

存储设备2包括控制器14、随机存取存储器(ram)15、诸如nand闪存16(以下称为闪存16)的非易失性半导体存储器以及接口控制器(ifc)18。ifc18被配置为经由接口10执行向主机3发送信号和从主机3接收信号。控制器14被配置为管理并控制闪存16、ram15和ifc18。

ram15例如是诸如dram(动态随机存取存储器)和sram(静态随机存取存储器)的易失性ram,或诸如feram(铁电随机存取存储器)、mram(磁阻随机存取存储器)、pram(相变随机存取存储器)和reram(电阻随机存取存储器)的非易失性ram。ram15可以嵌入在控制器14中。闪存16包括一个或多个闪存芯片17,并且将由主机3指定的用户数据60(参见图11)存储在一个或多个闪存芯片17中。控制器14和闪存16经由诸如toggle和onfi的闪存接口21(参见图4)连接。

主机3包括cpu(中央处理器)4、存储器5、控制器6和网络接口控制器(nic)7。cpu4是主机3中的中央处理器,并且执行主机3的各种计算和控制操作。cpu4和控制器6通过使用诸如pciexpress的协议的接口连接。cpu4经由控制器6执行对存储设备2的控制。在本实施例中,控制器6是pcie交换机(switch)和pcie扩展器,但是sas扩展器、raid控制器、jbod控制器、jbof控制器等可以被用作控制器6。

cpu4同样执行对存储器5的控制。在本实施例中的存储器5是诸如dram(动态随机存取存储器)、mram(磁阻随机存取存储器)、reram(电阻随机存取存储器)以及feram(铁电随机存取存储器)的易失性存储器。

cpu4是被配置为控制主机3的操作的处理器。cpu4执行例如从存储设备2中的一个存储设备加载到存储器5的操作系统(os)11。cpu4连接到nic7,nic7经由网络接口连接到外部网络。网络接口利用例如以太网、无限带宽(infiniband)、光纤通道、pciexpressfabric、wifi等的协议。

存储器5临时存储程序和数据,并且用作cpu4的工作存储器。存储器5包括用于存储os11、应用软件13、查找表(lut)8、提交队列50,以及完成队列51的存储器区域,并且同样包括写入缓冲器(wb)54和读取缓冲器(rb)55。众所周知,os11表示用于管理主机3的系统软件,并且可以是诸如或可从vmware公司获得的虚拟化软件的商品os。os11被执行以管理对主机3、存储设备2和存储器5的输入和从主机3、存储设备2和存储器5的输出。也就是说,os11使软件能够使用在包括存储设备2的存储系统1中的元件。此外,os11用于控制向存储设备2写入数据和从存储设备2读取数据的方式。

写入缓冲器54临时存储要写入存储设备2中的数据,即用户数据。读取缓冲器(rb)55临时存储从存储设备2读取的数据,即读取数据。lut8用于管理在数据的文件id(对象id或逻辑地址)与闪存16和写入缓冲存储器54的物理地址之间的映射,其中数据被存储用于写入或将要被存储用于读取。提交队列50包含例如关于存储设备2的命令和请求。完成队列51包含指示命令和请求的完成的信息以及与完成相关的信息,在完成存储设备2的命令和请求时向主机3发送该信息。

主机3经由相应的接口10向存储设备2发送用于访问存储设备2的多个命令。如下面详细描述的,命令包括读取命令90、写入命令91、扫描命令92、无效命令(invalidatecommand)、复制命令等。

此外,应用软件13的一个或多个单元分别被加载到存储器5中。图3示出根据本实施例的主机3的软件层结构和主机3与存储设备2之间的通信架构。通常,加载在存储器5中的应用软件13不直接与存储设备2通信,而是经由文件接口和对象接口通过加载在存储器5中的os11与存储设备2通信。

os11操作以经由接口10向存储设备2发送包括读取命令90、写入命令91、扫描命令92、无效命令和复制命令的命令以及物理地址56。物理地址56用于指定要被访问以用于数据读取或数据写入的闪存16的物理位置。根据这些命令和物理地址(如果有的话),闪存16(更具体地闪存芯片17)执行数据访问处理。

应用软件13包括例如客户端软件、数据库软件(例如,cassandradb、mongodb、hbase等)、分布式存储系统(ceph等)、虚拟机(vm)、客户os(guestos)和分析软件(例如,hadoop、r等)。

[闪存芯片]

图4示出闪存芯片17的配置。闪存芯片17包括存储器单元阵列22和nand控制器(nandc)23。如下面详细描述的,存储器单元阵列22包括以矩阵配置来布置的多个存储器单元,存储器单元中的每个存储器单元存储数据。nandc23是被配置为控制对存储器单元阵列22的访问的控制器。具体地,nandc23包括控制信号输入引脚24、数据输入/输出引脚25、字线控制电路26、控制电路27、数据输入/输出缓冲器28、位线控制电路29和列解码器30。控制电路27连接到控制信号输入引脚24、字线控制电路26、数据输入/输出缓冲器28、位线控制电路29以及列解码器30,并且控制nandc23的电路元件的整体操作。此外,存储器单元阵列22连接到字线控制电路26和控制电路27。此外,控制信号输入引脚24和数据输入/输出引脚25通过闪存接口21连接到存储设备2的控制器14。

当从闪存芯片17读取数据时,存储器单元阵列22中的数据被输出到位线控制电路29,并且然后被临时存储在数据输入/输出缓冲器28中。然后,将读取的数据通过闪存接口21从数据输入/输出引脚25发送到存储设备2的控制器14。当将数据写入闪存芯片17时,将要写入的数据(写入数据)通过数据输入/输出引脚25输入到数据输入/输出缓冲器28。然后,将写入数据通过控制电路27发送到列解码器30,并由列解码器30输入到位线控制电路29。将写入数据以由字线控制电路26和位线控制电路29控制的时序写入到存储器单元阵列22的存储器单元。当通过闪存接口21从存储设备2的控制器14向闪存芯片17输入控制信号时,控制信号通过控制信号输入引脚24被输入到控制电路27中。然后,控制电路27根据来自控制器14的控制信号生成控制信号,并控制用于控制存储器单元阵列22、位线控制电路29、列解码器30、数据输入/输出缓冲器28和字线控制电路26的电压。在此,在闪存芯片17中包括除了存储器单元阵列22以外的电路的电路部分被称为nandc23。

图5示出存储器单元阵列22的详细电路结构。存储器单元阵列22包括一个或多个面(plane)37(在图5中仅示出其中一个)。每个面37包括多个物理块36,并且每个物理块36包括多个存储器串34。此外,存储器串(ms)34中的每一个存储器串包括多个存储器单元33。

存储器单元阵列22进一步包括多个位线31、多个字线32和公共源极线。可电气地数据重写的存储器单元33以矩阵配置布置在位线31和字线的交叉处。位线控制电路29连接到位线31,并且字线控制电路26连接到字线32,以便控制关于存储器单元33的数据写入和读取。也就是说,位线控制电路29经由位线31读取存储器单元33中存储的数据,并且经由位线31将写入控制电压施加到存储器单元33,以及将数据写入由字线32选择的存储器单元33中。

在每个存储器串(ms)34中,存储器单元33串联连接,并且选择门(gate)s1和s2连接到ms34的两端。选择门s1连接到位线bl31,并且选择门s2连接到源极线src。布置在同一行中的存储器单元33的控制栅极共同连接到字线32wl0到wlm-1中的一个。第一选择门s1共同连接到选择线sgd,并且第二选择门s2共同连接到选择线sgs。

连接到一个字线32的多个存储器单元33配置一个物理扇区35。针对每个物理扇区35写入和读取数据。在一个物理扇区35中,当采用2位/单元写入系统(mlc,四电平)时存储相当于两个物理页(两页)的数据,并且当采用1位/单元写入系统(slc,两电平)时存储相当于一个物理页(一页)的数据。此外,当采用3位/单元写入系统(tlc,八电平)时,在一个物理扇区35中存储相当于三个物理页(三页)的数据。此外,以物理块36为单元擦除数据。

在写入操作(同样称为编程操作)、读取操作和编程验证操作期间,根据从控制器14接收的诸如行地址的物理地址来选择一个字线wl,并且因此,选择一个物理扇区35。根据物理地址中的物理页地址来执行所选物理扇区35中的页的切换。物理地址包括物理块地址58和物理页地址59(参见图7)。将物理页地址分配给物理页中的每个物理页,并且将物理块地址分配给物理块36中的每个物理块。

2位/单元的四电平nand存储器被配置为使得一个存储器单元中的阈值电压可具有四种分布。图6示出存储在四电平nand单元类型的存储器单元33中的2位四电平数据(数据“11”、“01”、“10”和“00”)与每个电平的阈值电压分布之间的关系。一个存储器单元33的2位数据包括低页(lowerpage)数据和高页(upperpage)数据。根据单独的写入操作,即两个写入操作,将低页数据和高页数据写入存储器单元33。在此,当数据表示为“xy”时,“x”表示高页数据,并且“y”表示低页数据。

存储器单元33中的每个存储器单元包括存储器单元晶体管,例如,具有形成在半导体衬底上的叠栅结构的mosfet(金属氧化物半导体场效应晶体管)。叠栅结构包括经由栅极绝缘膜形成在半导体衬底上的电荷存储层(浮置栅电极)和经由栅极间绝缘膜(inter-gateinsulatingfilm)形成在浮置栅电极上的控制栅电极。存储器单元晶体管的阈值电压根据在浮置栅电极中积累的电子数而变化。存储器单元晶体管通过改变其阈值电压来存储数据。

例如,存储器单元33中的每个存储器单元可采用使用高页和低页的用于2位/单元(mlc)的四电平存储方法的写入系统。可替代地,存储器单元33可以采用使用单页的1位/单元(slc)的两电平存储方法的写入系统,使用高页、中间页和低页的用于3位/单元(tlc)的八电平存储方法,或者用于4位/单元(qlc)或更多位/单元的多电平存储方法,或它们的混合。存储器单元晶体管不限于包括浮置栅电极的结构,并且可以是诸如monos(金属氧化物-氮化物-氧化物-硅)类型的结构,其可以通过在作为电荷存储层的氮化物界面上捕获电子来调节阈值电压。类似地,monos类型的存储器单元晶体管可以被配置为存储一位的数据,或者可以被配置为存储多位的数据。存储器单元晶体管可以是作为非易失性存储介质的半导体存储介质,其中存储器单元被三维排列,如美国专利8,189,391、公开号为no.2010/0207195的美国专利申请以及公开号为no.2010/0254191的美国专利申请中所述,这两个申请的全部内容通过引用并入在此。

[地址结构]

图7示出根据本实施例的物理地址56的地址结构的示例。当os11根据物理访问的过程操作时,以图7中所示的地址结构的形式经由在主机3与存储设备2之间的接口10发送物理地址56。物理地址56的地址结构包括芯片地址57、块地址58和页地址59。在本实施例中,如图7中所示,芯片地址57位于地址结构的msb(最高有效位)侧,并且页地址59位于地址结构的lsb(最低有效位)侧。然而,可以任意确定物理地址56中的芯片地址57、块地址58和页地址59的位置。

[地址映射]

图8示出本实施例中的物理地址的映射的概况。如上所述,使用存储在主机3的存储器5中的lut8来管理地址映射。在lut8中,每一个条目指示在由主机3使用的数据的文件id(对象id或逻辑地址)与存储数据的闪存16的物理地址之间的对应关系。例如,当主机3从闪存16读取某些文件id的数据时,主机3的cpu4通过参考lut8获得与文件id相对应的物理地址,并将获得的物理地址包括在读取命令90中以便读取数据。

由于lut8存储在作为易失性存储器的存储器5中,所以在不对lut8的数据执行任何数据备份过程的情况下,lut8的电源被切断时,lut8的数据可能丢失。在没有lut8的情况下,主机3不能定位存储在闪存16中的数据,并且因此不能访问数据。根据本实施例,在写入操作期间写入闪存的写入数据包含用户数据的元数据,以使得可以在如下所述的扫描操作期间使用元数据重建lut8。

[块映射]

图9示出基于本实施例中块池的物理块的映射的概况。如上所述,使用存储在ram15中的bmt46来管理块映射。块池包括输入块池420、活动块池430、空闲块池440和坏块池450。物理块的映射由存储设备2的控制器14来管理,并且当将物理块重新映射到不同的块池中时,控制器14更新bmt46中的映射。控制器14在bmt46中将闪存16的物理块中的每个物理块映射到块池中的一个块池。

输入块池420包括至少一个输入块42。输入块42是其中写入数据的块。输入块42可以不存储数据,或者包括已写入区域和可以写入数据的未写入区域两者。

活动块池430可以包括一个或多个活动块43。活动块43是不再具有可写入区域(即,变得写满数据)的物理块。此外,活动块43中的已写入的数据中的至少一些是有效数据。

空闲块440包括一个或多个空闲块44。空闲块44包括先前未存储任何数据的物理块和没有存储有效数据的物理块。也就是说,存储在空闲块44中的所有数据(如果有的话)已经被无效。

坏块池450包括一个或多个坏块45。坏块45是例如由于缺陷而不能用于数据写入的块。

图10示出根据本实施例的存储设备2中使用的块映射表(bmt)46的示例。bmt46包括空闲块表461、活动块表462、坏块表463以及输入块表464。在bmt46的表461-464中的每个表中,每个条目指示块地址与擦除计数之间的对应,该擦除计数指示块地址中的数据已被擦除的次数。同样可以在bmt46中管理不同类型的块池的其它配置。

输入块表464同样指示将写入下一个写入数据的物理页地址(ppa)。当控制器14重新映射空闲块池440中的空闲块44作为输入块42时,控制器14从空闲块表461中移除该空闲块44的块地址,并且添加包括该块地址和ppa=0的新条目到输入块表464。

因为在本实施例中,由控制器14使用bmt46的坏块表463来管理闪存16的坏块45,所以主机3的cpu4不必管理坏块45,并且不必监视闪存16的不可靠的物理块和缺陷。如果存储设备2的控制器14确定物理块不可靠,则控制器14通过从输入块表464、活动块表462和空闲块表461中的包括对应块地址的条目的一个块表删除该条目并且通过添加该条目到坏块表463来防止数据被写入物理块中。例如,当在访问物理块期间发生编程错误、擦除错误或者不可校正ecc错误时,控制器14确定将物理块重新映射为坏块45。在本实施例中,要写入数据的物理地址可以由主机2确定或由控制器14确定。当物理地址由控制器14确定时,主机3不需要执行这种坏块管理。

此外,因为每个物理块的擦除计数由存储设备2的控制器14使用bmt46来管理,所以当将数据写入闪存16时,控制器14可以执行动态平均抹写(dynamicwearleveling)。例如,在本实施例中,当控制器14重新映射空闲块池440中的空闲块44作为输入块42时,控制器14选择具有最小擦除计数的空闲块44。如果空闲块44位于处于忙碌状态的通道或存储体(bank)中,则控制器14可以从空闲块池440中选择具有第二最小擦除计数并且处于空闲状态的另一空闲块44。

当控制器14处理关于输入块42的写入操作时,控制器14通过参考输入块表464指定物理页地址(ppa),将数据写入输入块42的物理页地址,以及递增输入块表464中的ppa((新)ppa=(旧)ppa+写入数据大小)。当(新)ppa超过输入块42的最大页地址时,控制器14将输入块42重新映射为活动块池430中的活动块43。

[写入操作]

图11a和11b示意性地示出根据本实施例的在写入操作期间写入闪存16的物理块中的数据内容。在本实施例中,如图11a中所示,主机3将主机元数据61附加到用于写入存储设备2的闪存16中的用户数据60。用户数据60是例如在将用户数据60发送到存储设备2之前,由在主机3中执行的应用软件13请求写入并存储在写入缓冲器54中的数据。主机元数据61用于当lut8由于一些原因(诸如主机3的意外电源关闭)丢失时在存储器5中重建lut8。具体地,主机元数据61包含主机元数据61的数据大小、主机元数据61所附加的用户数据60的数据大小,用户数据60的文件id(对象id或逻辑地址),用于用户数据60的crc(循环冗余校验)码,标识触发该写入操作的写入命令91的唯一命令标识符(ucid),以及发出写入命令91时的时间戳。与写入命令91一起或者在通过接口10将写入命令91从主机3发送到存储设备2之后,将存储在写入缓冲器54中的用户数据60和主机元数据61发送到存储设备2。

在存储设备2中,存储设备2的控制器14进一步将设备元数据62附加到用于写入闪存16的用户数据60,该设备元数据62是一对的用户数据60和主机元数据61的元数据。设备元数据62用于定位与其对应的主机元数据61以及在随后的写入操作期间写入相同块或不同块的其它设备元数据的位置。具体地,设备元数据62包含设备元数据62的数据大小,与其对应的主机元数据61的数据大小,以及与其对应的用户数据60的数据大小。

当用户数据60的大小太大而不能容纳在一个物理块中,或者物理块(输入块)的剩余空间小于用户数据60的大小时,用户数据60被分割为多份(piece),并且将主机元数据61和设备元数据62附加到用户数据60中的每一份。在该情况下,每一个设备元数据包含用户数据的相应份的大小,以及同样包括对于每一份的标识符的偏移值。例如,当设备元数据62附加到用户数据60的第一部分时,偏移值为0,当设备元数据62附加到用户数据60的第二部分时,偏移值为1,并且对于以下部分中的每一个部分递增1。

图11b示出存储在闪存16的多个物理块(物理块1和2)中的数据。如图11b所示,每一组的设备元数据、主机元数据以及用户数据以该顺序被写入物理块,以使得每一个物理块的开始部分(第一页)存储设备元数据。更具体地,第一组(#1)的设备元数据#1、主机元数据#1以及用户数据#1被写入物理块1的头部,并且第二组(#2)的设备元数据#2、主机元数据#2以及用户数据#2被存储在物理块2的后续空间中。由于没有足够的空间用于第三组(#3),所以用户数据#3被分割为用户数据#3-0和用户数据#3-1,并被分别写入物理块1和2。此外,将包含偏移值0的设备元数据#3-0和主机元数据#3-0写在用户数据#3-0的前面,并且将包含偏移值1的设备元数据#3-1和主机元数据#3-1(可以与主机元数据#3-0相同)写入用户数据#3-1的前面。以类似的方式,将用户数据#4、#5,...#n、主机元数据#4、#5,...#n和设备元数据#4、#5,...#n写入闪存16的物理块。

图12示意性地示出根据基于块映射表46的块管理而在根据本实施例的存储设备2中执行的写入操作的示例。在写入操作期间,控制器14将存储在写入缓冲器54中的用户数据以及用于用户数据的主机元数据和设备元数据写入闪存16中。图12中的输入块池420、活动块池430、空闲块池440和坏块池450中的每一个块池包括一个或多个物理块。

控制器14经由接口10从写入缓冲器54接收用户数据,并且使用控制器14的ecc编码器48从用户数据生成ecc码。此外,控制器14在下面描述的读取操作期间使用控制器14中的ecc解码器49解码包括用户数据和ecc码的读取数据。

当控制器14将来自写入缓冲器54的用户数据以及该用户数据的主机元数据和设备元数据(统称写入数据)写入闪存16时,控制器14通过参考bmt46来确定写入数据将要被写入的输入块池420的输入块42中的页的物理地址。如果在闪存16中没有可用的输入块42,则控制器14通过重新映射空闲块池440中的空闲块44来分配新的输入块42。

此外,如果输入块42中没有物理页可用于数据写入而不擦除其中的数据,即,变得写满写入的数据,则控制器14将该块重新映射为活动块池430中的活动块43。控制器14同样可以将活动块池430中的活动块43重新映射(解除分配)为空闲块池440中的空闲块44。

在多个输入块池420中准备多个输入块42,该输入块42中的每个输入块专用于关于相应流id的数据写入,并且与流id相关联的用户数据被写入与流id相关联的输入块42。在该示例中,来自主机3的写入命令91包括流id。当主机3操作以将指定流id的写入命令发布到提交队列50时,控制器14从写入缓冲器54接收用户数据,并将写入数据(包括主机和设备元数据)写入与该流id相关联的输入块42。如果主机3操作以将没有指定流id的写入命令发布到提交队列50,则控制器14从写入缓冲器54接收用户数据,并将写入数据(包括主机和设备元数据)写入没有与流id相关联的输入块42。通过根据流id将用户数据存储到不同的输入块42中,可以使存储在每个输入块42中的用户数据的类型(或数据寿命)更加均匀,并且因此,在执行垃圾收集操作时物理块中的整个数据可被删除而不必将数据部分地转移到另一物理块,即,垃圾收集操作变得更有效。

图13示出写入操作的流程图。在该示例的写入操作中,存储设备2确定用户数据将要被写入的存储器单元阵列22的物理地址,并且主机3不指定物理地址或逻辑地址。当写入操作开始时,在步骤1301中,主机3将用户数据写入主机3的写入缓冲器(wb)54。此外,主机3更新存储在主机3的存储器5中的lut8,以使得在其中存储用户数据的文件id(对象id或逻辑地址)和wb54的地址之间的映射。然后,在步骤1302中,主机3向主机3的提交队列50发布包括用户数据和主机元数据的大小信息但不包括地址信息的写入命令。写入命令同样包括唯一命令标识符(ucid)和流id。

在步骤1303中,存储设备2的控制器14从提交队列50获取写入命令。然后,在步骤1304中,控制器14参考bmt46确定用户数据将要被写入的闪存16的物理位置(物理地址56)。具体地,控制器14确定与流id对应的输入块42的第一未写入页作为物理位置。

在存储设备2获取写入命令时,在步骤1305中,主机3通过接口10将存储在wb54中的用户数据连同附加到其的主机元数据一起发送到存储设备2。在此,步骤1304和1305的顺序不限于该顺序,并且这两个步骤可以以相反的顺序执行或同时执行。在步骤1306中,存储设备2的控制器14将设备元数据附加到从主机3接收的用户数据(和主机元数据)。

在步骤1307中,控制器14的ecc编码器48(参见图10)从用户数据生成ecc码。在步骤1308中,控制器14在闪存16的确定的物理位置(输入块42)中写入该组用户数据、主机元数据和设备元数据(即,写入数据)以及ecc码。

在写入数据被写入输入块42中时,在步骤1309中,控制器14将写入完成通知发送到主机3,该写入完成通知包括写入数据被写入的物理地址56和在写入命令中包括的ucid。然后,将写入完成通知发布在主机3的完成队列51上。在步骤1310中,主机3从完成队列51获取写入完成通知。在步骤1311中,主机3更新在主机3的存储器5中存储的lut8,以使得在其中存储用户数据的文件id(对象id或逻辑地址)与输入块42的物理地址56之间的映射。通过这些处理,写入操作结束。

在另一实施例中,写入操作以主机3而不是存储设备2的控制器14确定用户数据将要被写入的存储器单元阵列22的物理地址的方式执行。在该情况下,在步骤1302中,主机3将所确定的物理地址连同写入命令、大小信息、ucid和流id一起发布到提交队列50。此外,由于控制器14不确定物理地址,所以可以省略步骤1304。此外,由于主机3已经识别出用户数据被写入的物理地址,所以从存储设备2发送的写入完成通知不需要包含物理地址。

[扫描操作]

图14示出了扫描操作的流程图,在扫描操作期间,扫描所有活动块和所有输入块,并且从扫描的块中读取所有设备元数据和主机元数据,并且从包括在读取的主机元数据中的映射数据重建lut8。通常,当存储在存储器5中的lut8由于诸如主机3的突然断电的一些原因丢失时,由主机3启动扫描操作。当扫描操作开始时,在步骤1401中,主机3向提交队列50发布扫描命令(扫描元数据命令)92。

在步骤1402中,存储设备2的控制器14从提交队列50获取扫描命令,并开始在存储设备2侧的扫描操作。在步骤1403中,控制器14确定是否已经对存储与有效用户数据绑定的设备元数据和主机元数据的所有块(即,所有活动块和所有输入块)执行扫描操作。如果确定是肯定的(在步骤1403中为是),则处理进行到步骤1411。如果确定是否定的(在步骤1403中为否),则处理进入步骤1404。

在步骤1404中,控制器14从活动块池430或输入块池420中选择扫描目标块。在步骤1405中,控制器14读取从扫描目标块的第一页开始的第一元数据(设备元数据和主机元数据)并将读取的元数据临时存储在ram15的存储器区域中。在此,控制器14可以通过读取第一设备元数据的大小来确定第一设备元数据扩展多少长度(即,设备元数据的最后一页),并且定位随后的主机元数据的起始页。此外,控制器14可以通过读取第一主机元数据的大小来确定第一主机元数据扩展多少长度(即,主机元数据的最后一页)。然后,在步骤1406中,控制器14通过读取包含在第一设备元数据和第一主机元数据中的第一用户数据的大小来搜索下一元数据(设备元数据)(的起始页)。在步骤1407中,控制器14确定扫描目标块中是否存在下一元数据。在此,控制器14通过从读取的设备元数据(或读取的主机元数据)读取用户数据的大小来定位下一元数据(的起始页)。也就是说,控制器14跳过而不读取跟随主机元数据的用户数据。

如果确定是肯定的(在步骤1407中为是),则控制器14读取下一元数据(设备元数据和主机元数据),并以与步骤1406类似的方式将读取的元数据存储在ram15中。然后,处理返回到步骤1406以在扫描目标块中寻找另一元数据。如果确定是否定的(在步骤1407中为否),则在步骤1409中,控制器14通过接口10将扫描目标块的存储在ram15中的所有元数据和物理地址发送到主机3。然后,处理返回到步骤1403。在步骤1410中,主机3接收扫描目标块的所有元数据和物理地址,并将接收到的数据临时存储在存储器5的存储器区域(例如,读取缓冲器55)中。

在步骤1411中,即当在步骤1403中确定要扫描所有活动块和输入块时,存储设备2的控制器14向主机3发送扫描完成通知,以使得扫描完成通知被发布在完成队列50上。在步骤1412中,主机3从完成队列51获取扫描完成通知。在步骤1413中,主机3使用映射相关数据(逻辑地址,和用户数据的大小、主机元数据和设备元数据)和物理地址来执行lut8的修复。通过这些处理,扫描操作结束。

如上所述,根据上述实施例,在写入操作期间,主机3除了向存储设备2发送用户数据之外,还发送主机元数据,该主机元数据包括主机元数据的大小、用户数据的大小、文件id等。然后,存储设备2的控制器14将设备元数据附加到用户数据,并且将设备元数据、主机元数据和用户数据以该顺序写入闪存16的物理块(输入块)中。在闪存16的每个物理块(活动块和输入块)中,在其第一页中写入设备元数据。在扫描操作期间,从所有活动块和所有输入块读取所有设备元数据和所有主机元数据,并且基于读取元数据重建lut8。因此,根据上述实施例,即使由于一些原因(例如,主机3的突然断电)lut8变得不可用或丢失,也可以重建lut8,并且主机3可以使用lut8映射存储在闪存16中的数据。因此,可以提供更可靠的数据存储系统。

虽然已经描述了某些实施例,但是这些实施例仅通过示例的方式给出,并且不旨在限制本发明的范围。实际上,在此描述的新颖实施例可以以各种其它形式实施;此外,在不脱离本发明的精神的情况下,可以对在此描述的实施例的形式进行各种省略、替换和改变。所附权利要求及其等同物旨在覆盖落入本发明的范围和精神内的这些形式或修改。

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