存储设备、存储系统和计算设备
相关申请的交叉引用
本申请基于并要求于2016年10月18日提交的美国非临时专利申请15/296,812的优先权;其全部内容通过引用并入在此。
技术领域
本公开总体上涉及存储设备、存储系统以及计算设备。
背景技术
存储系统通常包括主机和一个或多个存储设备,存储设备中的每个可以包括一个或多个非易失性存储器芯片,诸如NAND闪存芯片。为了使用数据的标识符或数据的逻辑地址来确定存储数据的物理位置,将映射数据存储在存储设备中的每一个存储设备中或主机中,并且数据的物理位置通过参考映射数据来确定。具体地,在一种类型的存储系统中,这种映射数据存储在存储设备中的每个存储设备中,并且通过逻辑地址指定在主机和存储设备之间通信的数据的位置。在另一类型的存储系统中,映射数据存储在主机中,并且在主机和存储设备之间通信的数据的位置是例如由非易失性存储器芯片的物理地址指定的数据的物理位置。
当数据被写入包括非易失性存储器芯片的存储设备中时,通常花费一定量的时间直到存储设备准备好读取数据。这是因为直到电荷稳定地保持在非易失性存储器芯片的存储器单元(memory cell)中需要花费一定量的时间。因此,当主机发出读取命令以在数据写入之后立即读取数据时,可能不能从非易失性存储器芯片正确地读取数据。当在主机和存储设备之间通信的数据的位置是物理位置时,这种问题是特别显著的,因为存储设备将需要从相同的物理位置读取数据。另一方面,当在主机和存储设备之间通信的数据的位置是数据的标识符或逻辑地址时,存储设备可以能够从与对应于标识符或逻辑地址的物理位置不同的位置读取所请求的数据,例如,在输入的写入数据最初存储的易失性存储器中配置的缓冲器。
发明内容
根据实施例,一种存储设备包括非易失性存储器、可连接到主机的通信接口,以及控制器。控制器被配置为当通过通信接口接收到与数据相关联的写入命令时,执行在非易失性存储器的物理位置处通过通信接口接收的数据的写入,在确定已经完成在非易失性存储器的物理位置处的数据的写入时控制通信接口返回第一通知,并且在已经返回第一通知之后的预定时间段时控制通信接口返回第二通知。
根据另一实施例,一种存储系统包括存储设备,该存储设备包括非易失性存储器、通信接口以及控制器;以及主机,其连接到存储设备的通信接口,并且包括写入缓冲存储器和处理器。控制器被配置为当通过通信接口从主机接收到与数据相关联的写入命令时,执行在非易失性存储器的物理位置处通过通信接口从主机接收的数据的写入,在确定已经完成在非易失性存储器的物理位置处的数据的写入时,控制通信接口向主机返回第一通知,并且在已经返回第一通知之后的预定时间段时控制通信接口向主机返回第二通知。
根据另一实施例,一种可连接到非易失性存储设备的计算设备包括存储器部件(memory unit)、可通过非易失性存储设备的通信接口与非易失性存储设备通信的控制器,以及处理器。处理器被配置为将数据临时存储在存储器部件中,控制控制器向非易失性存储设备发送与数据相关联的写入命令,当从非易失性存储设备返回指示写入数据完成的第一通知时,在存储器部件中存储数据的标识符或逻辑地址与写入数据的非易失性存储器的物理位置之间的映射,以及当在第一通知之后从存储设备返回指示存储在非易失性存储器的物理位置处的数据准备好被读取的第二通知时,擦除或修整(trim)存储在存储器单元中的数据。
根据实施例,可以抑制主机和存储设备之间的数据流量的增加。
附图说明
图1示出根据实施例的包括主机和至少一个存储设备的存储系统的配置。
图2示出根据实施例的存储系统的物理配置。
图3示出根据实施例的主机的软件层结构和在主机与存储设备之间的通信架构。
图4示出存储设备中的闪存芯片的配置。
图5示出闪存芯片中的存储器单元阵列的详细电路结构。
图6示出存储在四电平NAND单元类型的存储器单元中的2位四电平数据(数据“11”、“01”、“10”以及“00”)与每个电平的阈值电压分布之间的关系。
图7示出根据实施例的物理地址的地址结构的示例。
图8示出实施例中基于块池的物理块的映射的概况。
图9示出根据实施例的块映射表(BMT)的示例。
图10示出根据实施例的存储系统中的数据流和块映射转换(transition)的架构概述。
图11示出根据实施例执行的写入操作的流程。
具体实施方式
下面参考附图描述本公开的细节。
[存储系统]
图1示出根据实施例的存储系统1的配置。存储系统1包括主机3、一个或多个存储设备2,以及被配置为连接主机3和存储设备2中每个存储设备的接口10。在本实施例中,存储系统1是如图2所示的2U存储装置。也就是说,主机3和一个或多个存储设备2被容纳在具有2U存储装置的大小的壳体中。存储设备2中的每个存储设备是非易失性存储设备,诸如2.5英寸形状因子(facotr)、3.5英寸形状因子,M.2形状因子或附加卡(AIC)形状因子。此外,在本实施例中,接口10采用PCI Express(外围组件互连高速,PCIe)接口。可替代地,接口10可以采用任何其它技术上可行的协议,诸如SAS(串行连接SCSI)协议、USB(通用串行总线)、SATA(串行高级技术附件)、雷电(
)、以太网(
)、光纤通道等。
存储设备2包括控制器14、随机存取存储器(RAM)15、诸如NAND闪存16(以下称为闪存16)的非易失性半导体存储器以及接口控制器(IFC)18。IFC 18被配置为经由接口10执行向主机3发送信号和从主机3接收信号。控制器14被配置为管理并控制闪存16、RAM 15和IFC18。
RAM 15例如是诸如DRAM(动态随机存取存储器)和SRAM(静态随机存取存储器)的易失性RAM,或诸如FeRAM(铁电随机存取存储器)、MRAM(磁阻随机存取存储器)、PRAM(相变随机存取存储器)和ReRAM(电阻随机存取存储器)的非易失性RAM。RAM 15可以嵌入在控制器14中。闪存16包括一个或多个闪存芯片17,并且将由主机3指定的用户数据存储在一个或多个闪存芯片17中。控制器14和闪存16经由诸如Toggle和ONFI的闪存接口21(参见图4)连接。
主机3包括CPU(中央处理器)4、存储器5、控制器6和网络接口控制器(NIC)7。CPU 4是主机3中的中央处理器,并且执行主机3的各种计算和控制操作。CPU 4和控制器6通过使用诸如PCI Express的协议的接口连接。CPU 4经由控制器6执行对存储设备2的控制。在本实施例中,控制器6是PCIe交换机(switch)和PCIe扩展器,但是SAS扩展器、RAID控制器、JBOD控制器、JBOF控制器等可以被用作控制器6。
CPU 4同样执行对存储器5的控制。存储器5例如是DRAM(动态随机存取存储器)、MRAM(磁阻随机存取存储器)、ReRAM(电阻随机存取存储器)以及FeRAM(铁电随机存取存储器)。
CPU 4是被配置为控制主机3的操作的处理器。CPU 4执行例如从存储设备2中的一个存储设备加载到存储器5的操作系统(OS)11。CPU 4连接到NIC 7,NIC 7经由网络接口连接到外部网络。网络接口利用例如以太网、无限带宽(InfiniBand)、光纤通道、PCI ExpressFabric、WiFi等的协议。
存储器5临时存储程序和数据,并且用作CPU 4的工作存储器。存储器5包括用于存储OS 11、应用软件13、查找表(LUT)8、提交队列50,以及完成队列51的存储器区域,并且同样包括写入缓冲器(WB)54和读取缓冲器(RB)55。众所周知,OS 11表示用于管理主机3的系统软件,并且可以是诸如
或可从VMware公司获得的虚拟化软件的商品OS。OS 11被执行以管理对主机3、存储设备2和存储器5的输入和从主机3、存储设备2和存储器5的输出。也就是说,OS 11使软件能够使用在包括存储设备2的存储系统1中的元件(component)。此外,OS 11用于控制向存储设备2写入数据和从存储设备2读取数据的方式。
写入缓冲器54临时存储要写入存储设备2中的数据,即写入数据。读取缓冲器(RB)55临时存储从存储设备2读取的数据,即读取数据。LUT 8用于管理在数据的文件ID(对象ID或逻辑地址)与闪存16和写入缓冲存储器54的物理地址之间的映射,其中数据被存储用于写入或将要被存储用于读取。提交队列50包含例如关于存储设备2的命令和请求。完成队列51包含指示命令和请求的完成的信息以及与完成相关的信息,在完成存储设备2的命令和请求时向主机3发送该信息。
主机3经由相应的接口10向存储设备2发送用于向存储设备2写入数据和从存储设备2读取数据的多个命令。如下面详细描述的,命令包括读取命令90、写入命令91、无效命令(invalidate command)、复制命令等。
此外,应用软件13的一个或多个单元分别被加载到存储器5中。图3示出根据本实施例的主机3的软件层结构和主机3与存储设备2之间的通信架构。通常,加载在存储器5中的应用软件13不直接与存储设备2通信,而是经由文件接口和对象接口通过加载在存储器5中的OS 11与存储设备2通信。
OS 11操作以经由接口10向存储设备2发送包括读取命令90、写入命令91、无效命令和复制命令的命令以及物理地址56。物理地址56用于指定要被访问以用于数据读取或数据写入的闪存16的物理位置。根据这些命令和物理地址(如果有的话),闪存16,更具体地是闪存芯片17执行数据访问处理。
应用软件13包括例如客户端软件、数据库软件(例如,Cassandra DB、Mongo DB、HBASE等)、分布式存储系统(Ceph等)、虚拟机(VM)、客户OS(guest OS)和分析软件(例如,Hadoop、R等)。
[闪存芯片]
图4示出闪存芯片17的配置。闪存芯片17包括存储器单元阵列22和NAND控制器(NANDC)23。如下面详细描述的,存储器单元阵列22包括以矩阵配置来布置的多个存储器单元,存储器单元中的每个存储器单元存储数据。NANDC 23是被配置为控制对存储器单元阵列22的访问的控制器。具体地,NANDC 23包括控制信号输入引脚24、数据输入/输出引脚25、字线控制电路26、控制电路27、数据输入/输出缓冲器28、位线控制电路29和列解码器30。控制电路27连接到控制信号输入引脚24、字线控制电路26、数据输入/输出缓冲器28、位线控制电路29以及列解码器30,并且控制NANDC 23的电路元件的整体操作。此外,存储器单元阵列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以外的电路的电路部分被称为NANDC 23。
图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连接到MS 34的两端。选择门S1连接到位线BL 31,并且选择门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位数据包括低页(lower page)数据和高页(upper page)数据。根据单独的写入操作,即两个写入操作,将低页数据和高页数据写入存储器单元33。在此,当数据表示为“XY”时,“X”表示高页数据,并且“Y”表示低页数据。
存储器单元33中的每个存储器单元包括存储器单元晶体管,例如,具有形成在半导体衬底上的叠栅结构的MOSFET(金属氧化物半导体场效应晶体管)。叠栅结构包括经由栅极绝缘膜形成在半导体衬底上的电荷存储层(浮置栅电极)和经由栅极间绝缘膜(inter-gate insulating film)形成在浮置栅电极上的控制栅电极。存储器单元晶体管的阈值电压根据在浮置栅电极中积累的电子数而变化。存储器单元晶体管通过改变其阈值电压来存储数据。
在本实施例中,存储器单元33中的每个存储器单元采用使用高页和低页的用于2位/单元(MLC)的四电平存储方法的写入系统。可替代地,存储器单元33可以采用使用单页的1位/单元(SLC)的两电平存储方法的写入系统,使用高页、中间页和低页的用于3位/单元(TLC)的八电平存储方法,或者用于4位/单元(QLC)或更多位/单元的多电平存储方法,或它们的混合。存储器单元晶体管不限于包括浮置栅电极的结构,并且可以是诸如MONOS(金属氧化物-氮化物-氧化物-硅)类型的结构,其可以通过在作为电荷存储层的氮化物界面上捕获电子来调节阈值电压。类似地,MONOS类型的存储器单元晶体管可以被配置为存储一位的数据,或者可以被配置为存储多位的数据。存储器单元晶体管可以是作为非易失性存储介质的半导体存储介质,其中存储器单元被三维排列,如美国专利8,189,391、公开号为No.2010/0207195的美国专利申请以及公开号为No.2010/0254191的美国专利申请中所述,这两个申请的全部内容通过引用并入在此。
[地址结构]
图7示出根据本实施例的物理地址56的地址结构的示例。当OS 11根据物理访问的过程操作时,以图7中所示的地址结构的形式经由接口10发送物理地址56。物理地址56的地址结构包括芯片地址57、块地址58和页地址59。在本实施例中,如图7中所示,芯片地址57位于地址结构的MSB(最高有效位)侧,并且页地址59位于地址结构的LSB(最低有效位)侧。然而,可以任意确定物理地址56中的芯片地址57、块地址58和页地址59的位置。
[块映射]
图8示出本实施例中基于块池的物理块的映射的概况。如上所述,使用存储在RAM15中的BMT 46来管理映射。块池包括输入块池420、活动块池430、空闲块池440和坏块池450。物理块的映射由存储设备2的控制器14来管理,并且当将物理块重新映射到不同的块池中时,控制器14更新BMT 46中的映射。控制器14在BMT 46中将闪存16的物理块中的每个物理块映射到块池中的一个块池。
输入块池420包括至少一个输入块42。输入块42是其中写入数据的块。输入块42可以不存储数据,或者包括已写入区域和可以写入数据的未写入区域两者。
活动块池430可以包括一个或多个活动块43。活动块43是不再具有可写入区域(即,变得写满数据)的物理块。此外,活动块43中的已写入的数据中的至少一些是有效数据。
空闲块440包括一个或多个空闲块44。空闲块44包括先前未存储任何数据的物理块和没有存储有效数据的物理块。也就是说,存储在空闲块44中的所有数据(如果有的话)已经被无效。
坏块池450包括一个或多个坏块45。坏块45是例如由于缺陷而不能用于数据写入的块。
图9示出根据本实施例的存储设备2中使用的块映射表(BMT)46的示例。BMT 46包括空闲块表461、活动块表462、坏块表463以及输入块表464。在BMT 46的表461-464中的每个表中,每个条目(entry)指示块地址与擦除计数之间的对应,该擦除计数指示块地址中的数据已被擦除的次数。同样可以在BMT 46中管理不同类型的块池的其它配置。
输入块表464同样指示将写入下一个写入数据的物理页地址(PPA)。当控制器14重新映射空闲块池440中的空闲块44作为输入块42时,控制器14从空闲块表461中移除该空闲块44的块地址,并且添加包括该块地址和PPA=0的新条目到输入块表464。
因为在本实施例中,由控制器14使用BMT 46的坏块表463来管理闪存16的坏块45,所以主机3的CPU 4不必管理坏块45,并且不必监视闪存16的不可靠的物理块和缺陷。如果存储设备2的控制器14确定物理块不可靠,则控制器14通过从输入块表464、活动块表462和空闲块表461中的包括对应块地址的条目的一个块表删除该条目并且通过添加该条目到坏块表463来防止数据被写入物理块中。例如,当在访问物理块期间发生编程错误、擦除错误或者不可校正ECC错误时,控制器14确定将物理块重新映射为坏块45。在本实施例中,要写入数据的物理地址可以由主机2确定或由控制器14确定。当物理地址由控制器14确定时,主机3不需要执行这种坏块管理。
此外,因为每个物理块的擦除计数由存储设备2的控制器14使用BMT46来管理,所以当将数据写入闪存16时,控制器14可以执行动态平均抹写(dynamic wear leveling)。例如,在本实施例中,当控制器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。
[写入操作]
图10示意性地示出根据本实施例的存储设备2中执行的写入操作的示例。在写入操作期间,控制器14将存储在写入缓冲器54中的写入数据(用户数据)写入闪存16中。图10中的输入块池420、活动块池430、空闲块池440和坏块池450中的每一个块池包括一个或多个物理块。
控制器14经由接口10从写入缓冲器54接收写入数据,并且使用控制器14的ECC编码器48从写入数据生成ECC码。此外,控制器14在下面描述的读取操作期间使用控制器14中的ECC解码器49解码包括用户数据和ECC码的读取数据。
当控制器14将写入数据从写入缓冲器54写入闪存16时,控制器14通过参考BMT 46来指定写入数据将要被写入的输入块池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的写入命令包括流ID。当主机3操作以将指定流ID的写入命令发布到提交队列50时,控制器14从写入缓冲器54接收写入数据,并将写入数据写入与该流ID相关联的输入块42。如果主机3操作以将没有指定流ID的写入命令发布到提交队列50,则控制器14从写入缓冲器54接收写入数据,并将写入数据写入没有与流ID相关联的输入块42。通过根据流ID将写入数据存储到不同的输入块42中,可以使存储在每个输入块42中的数据类型(或数据寿命)更加均匀,并且因此,在执行垃圾收集操作时物理块中的整个数据可被删除而不必将数据部分地转移到另一物理块,即,垃圾收集操作变得更有效。
图11示出写入操作的流程图,其中存储设备2确定写入数据将要被写入的存储器单元阵列22的物理地址,并且主机3不指定物理地址。当写入操作开始时,在步骤1101中,主机3将要写入存储设备2的闪存16中的数据(以下称为“写入数据”)写入主机3的写入缓冲器(WB)54。此外,主机3更新存储在主机3的存储器5中的LUT 8,以使得在其中存储写入数据的文件ID(对象ID或逻辑地址)和WB 54的地址之间的映射。然后,在步骤1102中,主机3向主机3的提交队列50发布包括写入数据的大小信息但不包括地址信息的写入命令。写入命令同样包括唯一命令标识符(UCID)和流ID。
在步骤1103中,存储设备2的控制器14从提交队列50获取写入命令并从WB 54写入数据。在接收到写入数据时,在步骤1104中,控制器14参考BMT 46确定写入数据将要被写入的闪存16的物理位置(物理地址56)。具体地,控制器14确定与流ID对应的输入块42的下一可用页作为物理位置。然后,在步骤1105中,控制器14的ECC编码器48(参见图10)从写入数据生成ECC码。在步骤1106中,控制器14向闪存16发出写入命令,以将写入数据和ECC码写入闪存16的确定的物理位置中。
当在闪存16(即,输入块42)的确定的物理位置中发出写入数据的命令时,如果没有从闪存16返回编程错误(写入错误),则在步骤1107中控制器14向主机3发送包括写入数据被写入的物理地址56和UCID的写入完成通知,以使得写入完成通知被发布在主机3的完成队列51上。在步骤1108中,主机3从完成队列51取出写入完成通知。然后,在步骤1109中,主机3更新存储在主机3的存储器5中的LUT 8,以使得将用于连同UCID一起发布写入命令的写入数据的文件ID(对象ID或逻辑地址)与连同同一UCID返回的输入块42的物理地址56之间的映射存储在其中。
在步骤1107中发送写入完成通知之后,控制器14在步骤1110中计数出预定时间段。当经过预定时间段时,处理进行到下一步骤1111。在此,预定时间段是被认为足以使闪存16准备好读取写入数据的时间量。通常,在写入数据被写入闪存16之后,直到闪存16准备好读取写入数据为止需要一定量的时间(例如,100-1000毫秒)。这是因为即使没有返回编程错误,但是存储器单元的浮置栅电极中的电子可能尚未处于稳定状态,且这种存储器单元的阈值电压仍可能处于指示不同数据的值(例如,在图6中是“10”而不是“00”,是“01”而不是“10”)。此外,随着存储在每个存储器单元中的位数变大,该预定时间段可以被设置为更大,因为阈值的精确性变得更加关键。例如,针对在TLC型存储器单元中写入的预定时间段大于针对在MLC型存储器单元中写入的预定时间段。
在经过预定时间段之后,在步骤1111中,控制器14从闪存16读取数据(写入数据和ECC码)。具体地,控制器14的ECC解码器49(参见图10)解码从闪存读取的数据,并且根据需要使用ECC码来执行写入数据的错误校正。然后,在步骤1112中,控制器14确定是否已校正读取数据中的任何错误。如果确定是肯定的(在步骤1112中为是),则处理进行到步骤1113,否则(在步骤1112中为否),处理进行到步骤1116。
在步骤1113中,控制器14向主机3发送连同包括在写入命令中的UCID一起的通知(读取就绪通知)。在步骤1114中,主机3接收到读取就绪通知,并且因此主机3识别出闪存16现在准备好读取写入数据。在此,由于读取就绪通知包括UCID,所以主机3可以识别哪个写入数据或哪个写入命令对应于读取就绪通知。在获取读取就绪通知时,在步骤1115中,主机3重新映射LUT 8,以使得从写入数据的文件ID(对象ID或逻辑地址)解除WB 54的地址的映射,即,写入数据在WB 54中被修整(无效)。可替代地,主机3可以擦除在WB 54中缓冲的写入数据。通过这些处理,写入操作结束。
另一方面,如果在步骤1112中的确定是否定的(在步骤1112中为否),即,不能校正读取数据中的所有错误,则在步骤1116中,控制器14向主机3发送连同UCID一起的通知(读取未就绪通知),其可与读取就绪通知区分开。在步骤1117中,主机3接收到读取未就绪通知,并且因此主机3识别出闪存16没有准备好读取写入数据。为了确保写入数据以可读的方式写入闪存16中,处理返回到步骤1102,并且主机3使用存储在WB 54中的写入数据再次执行步骤1102和后续步骤。
在上述实施例中,在步骤1102和其后的第二次或随后的操作(写入尝试)期间,数据被写入闪存16的另一物理位置,因为不可读的(不可校正的)数据已经写入在第一次操作(第一次尝试)期间访问的闪存16的物理位置中。此外,在上述实施例中,在第二次或随后的操作期间,在步骤1110中计数出的预定时段可以增加预定量(一次或重复),以使得可以经过使闪存16准备好读取写入数据的足够时间。在替代方案中,可以计数出与第一次写入尝试相同的预定时间段。
此外,在上述实施例中,如果应用软件13(参见图1和图3)在主机3接收到读取就绪通知之前发出对写入数据的读取请求,则主机3(CPU 4)从WB 54读取写入数据并将写入数据返回到应用软件13。由于写入数据存储在WB 54中直到闪存16准备好读取写入数据,因此可以防止在写入操作期间数据不可访问。
此外,在上述实施例中,存储设备2的控制器14可以被配置为当控制器14在发送读取就绪通知之前接收到针对写入数据的读取命令90时返回警告。尽管主机3应当被设计为在接收到读取就绪通知之前不发出针对写入数据的读取命令90,但是主机3的不当设计可能导致这种情况。根据该配置,即使从主机3接收到这种读取命令90,也不执行将导致不成功读取的读取操作。
此外,在另一实施例中,可以不执行步骤1111和1112,并且存储设备2的控制器14可以在步骤1111中经过预定时间段时发送读取就绪通知。在该情况下,同样不执行步骤1116和1117,并且不执行步骤1112和后续步骤的重复操作。
在另一实施例中,如果步骤1112中的确定结果是否定的,即包括在写入数据中的错误未被校正,则该过程可以返回到步骤1110。在该情况下,重复读取同一写入数据,直到可以读取写入数据或者可以成功地校正写入数据中的错误。
在另一实施例中,写入操作以主机3而不是存储设备2的控制器14确定写入数据要被写入的存储器单元阵列22的物理地址的方式执行。在该情况下,在步骤1102中,主机3将所确定的物理地址连同写入命令、大小信息、UCID和流ID一起发布到提交队列50。此外,由于控制器14不确定物理地址,所以可以省略步骤1104。此外,由于主机3已经识别写入数据要被写入的物理地址,所以从存储设备2发送的写入完成通知不需要包含物理地址。
如上所述,根据上述实施例,存储设备2的控制器14在向主机3发送写入完成通知之后向主机3发送诸如读取就绪通知和读取未就绪通知的二次通知(secondarynotification)。根据该配置,主机3可以基于写入完成通知来识别写入数据是否被写入闪存16中并且获得了成功读取的状态。此外,主机3可以基于二次通知识别已写入写入数据的闪存16是否准备好读取写入数据。也就是说,主机3可以分别管理写入数据被写入闪存16中的时间和闪存16准备好读取写入数据的时间。此外,由于写入数据被保存在写入缓冲器54中直到接收到读取就绪通知,因此主机3可以更可靠地处理写入数据,并防止写入数据在写入操作之后从闪存16丢失或不可读取。
另外,根据上述实施例,由于不需要与写入操作不同的附加操作(例如,写入后读取操作)以确保写入数据以可读的方式写入闪存,因此,可以抑制主机3和存储设备2之间的数据流量的增加,以及由这种添加操作引起的存储设备2的等待时间(latency)的增加。
虽然已经描述了某些实施例,但是这些实施例仅通过示例的方式给出,并且不旨在限制本发明的范围。实际上,在此描述的新颖实施例可以以各种其它形式实施;此外,在不脱离本发明的精神的情况下,可以对在此描述的实施例的形式进行各种省略、替换和改变。所附权利要求及其等同物旨在覆盖落入本发明的范围和精神内的这些形式或修改。