贮存操作中断的制作方法

文档序号:18089963发布日期:2019-07-06 10:43阅读:142来源:国知局
贮存操作中断的制作方法

本申请要求于2015年1月16日提交的、Jea Hyun等人的名称为“贮存操作中断”的美国临时专利申请号62/104,579的权益,其通过引用被结合于此。

技术领域

本公开,在各种实施例中,涉及中断贮存操作,并且更具体地涉及周期性地中断在贮存元件处的贮存操作。



背景技术:

固态贮存——诸如NAND闪速存储器——在贮存单元的阵列中贮存数据,在闪速存储器的情况中,该贮存单元由浮置栅极晶体管形成。NAND闪速存储器装置通过从在阵列中的单元读取一组位来返回之前贮存的数据。从单元擦除数据所需要的时间通常比将数据写入到单元所需要的时间更长,并且通常比从单元读取数据所需要的时间长得多。由于存储器元件的大小继续减小,所以擦除次数和写入次数继续以比读取次数更快的速率增加。

读取操作通常对小组存储器单元发生,编程操作通常对相同的或比读取操作更大组的存储器单元发生,并且擦除操作通常对甚至是更大组的存储器单元发生。许多闪速存储器装置被设计为将读取时间保持为尽可能低,以允许对贮存在存储器单元处的数据更快的访问。写入/编程时间通常比读取时间更长,但是比擦除时间更短。

存储器装置可以包括一个或多个芯片,并且芯片可以包括存储器单元的一个或多个阵列。当对给定组的单元进行贮存操作时,可以阻止对所述单元位于其上的芯片的其它访问,包括读取贮存在相同芯片上的其它单元中的数据或者将数据写入到相同芯片上的单元的块。作为结果,如果在所述给定的单元所位于的芯片处正在进行擦除或编程操作时,请求访问给定的单元或单元组以进行读取操作的应用可能在一段时间中无法进行读取操作。



技术实现要素:

呈现了一种用于中断贮存操作的方法。在一个实施例中,方法包括:在贮存元件处接收贮存操作多频繁将会被中断的频率的指示符。在其他实施例中,方法包括基于指示符一次或多次地中断对贮存元件的贮存操作的执行。在某些实施例中,方法包括在贮存操作被中断时对贮存元件执行一个或多个其它贮存操作。

呈现了一种中断贮存操作的设备。在一个实施例中,频率模块被配置为确定用于暂停贮存操作的频率。在某些实施例中,中断模块被配置为根据确定的频率暂停贮存操作的执行。在其他实施例中,恢复模块被配置为响应于触发而继续暂停的贮存操作。

呈现了一种中断贮存操作的系统。在一个实施例中,系统包括多个数据记录元件。在某些实施例中,用于多个数据记录元件的控制器监控用于数据记录元件的贮存请求的工作量。在其他实施例中,控制器基于监控的工作量在检查可插入的贮存操作之前确定将执行的贮存操作的分段的数量。在一个实施例中,控制器基于确定数量的分段检查用于一个或多个数据记录元件的可插入的贮存操作。

附图说明

参照在附图中示出的特定实施例在下面包括了更加详细的描述。应理解的是,这些附图仅描述了本公开的某些实施例并且从而不应被认为是其范围的限制,本公开通过使用附图以额外的特征和细节被描述和说明,其中:

图1是包含用于中断贮存操作的贮存操作中断模块的系统的一个实施例的示意性框图;

图2是示出用于中断贮存操作的非易失性存储器控制器的一个实施例的示意性框图;

图3是贮存操作中断模块的一个实施例的示意性框图;

图4是贮存操作中断模块的另一个实施例的示意性框图;

图5是示出贮存操作的一个实施例的框图;

图6是示出中断贮存操作的方法的一个实施例的示意性流程图;以及

图7是示出中断贮存操作的方法的其他实施例的示意性流程图。

具体实施方式

本公开的方面可以实现为设备、系统、方法或计算机程序产品。相应地,本发明的可以采用以下形式:完全的硬件实施例、完全的软件实施例(包括固件、驻留软件、微代码等)或组合硬件和软件方面的实施例,这里可以统称为“电路”、“模块”、“设备”或“系统”。此外,本发明的方面还可以采用实现在一个或多个非瞬时性计算机可读介质中的计算机程序产品的形式,该计算机可读介质中贮存计算机可读的和/或可执行的程序代码。

在本说明书中所述的许多功能性单元已被标记为模块,以便于更加特定地强调它们的实现方式的独立性。例如,模块可以被实现为硬件电路,所述硬件电路包含定制的VLSI电路或门阵列,诸如逻辑芯片、晶体管或其它分立组件的现成的半导体。模块也可以被实现为可编程硬件装置,诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑装置等。

模块还可以至少部分被实现为由各种类型的处理器执行的软件。可执行的代码的识别的模块例如可以,包括计算机指令的一个或多个物理或逻辑的块,所述计算机指令例如可以被组织为对象、过程或功能。然而,识别的模块的可执行物件不需要物理地处于一处,而是可以包括贮存在不同的位置中的不同的指令,其当被逻辑地联合在一起时,包括模块并且实现模块的所述用途。

事实上,可执行的代码的模块可以包括单个指令或许多指令,并且甚至可以分布在几个不同的代码分段之上、在不同的程序之中、在几个存储器装置上等。在模块或模块的一部分以软件实现的情况中,软件部分可以贮存在一个或多个计算机可读的和/或可执行的贮存介质上。可以使用一个或多个计算机可读的贮存介质的任何组合。计算机可读的贮存介质例如可以包括、但不限于,电子的、磁的、光的、电磁的、红外的或半导体系统、设备或装置或者前述的任何合适的组合,但是不包括传播信号。在该文件的上下文中,计算机可读的和/或可执行的贮存介质可以是任何有形的和/或非瞬时性的介质,所述贮存介质可以包含或贮存由指令执行系统、设备、处理器或装置使用的或与指令执行系统、设备、处理器或装置有关的程序。

可以以一种或多种编程语言的任意组合来编写用于执行本发明的方面的操作的计算机程序代码,所述编程语言包括面向对象的编程语言—诸如Python、Java、Smalltalk、C++、C#、Objective C等,还包括常规的过程式编程语言—诸如“C”编程语言、脚本编程语言和/或其它类似的编程语言。程序代码可以完全地或者部分地在一个或多个用户的计算机上执行、和/或通过数据网络等在远程计算机或服务器上执行。

组件——如这里所使用的——包括有形的、物理的、非瞬时性装置。例如,组件可以被实现为包括定制的VLSI电路、门阵列或其它集成电路的硬件逻辑电路;诸如逻辑芯片、晶体管或其它分立装置的现成的半导体;和/或其它机械的或电装置。组件还可以被实现为可编程硬件装置——诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑装置等。组件可以包括一个或多个硅集成电路装置(例如,芯片、裸芯、裸芯平面、封装)或其它分立电装置,其通过印刷电路板(PCB)的电线等与一个或多个其它组件电通信。在某些实施例中,这里所述的每个模块,可以可替换地由组件体现或实现。

在该说明书中对“一个实施例”、“实施例”或类似语言的引用意味着关于实施例描述的特定的特征、结构或特性被包括在本公开的至少一个实施例中。因此,术语“在一个实施例中”、“在实施例中”和类似语言在贯穿本公开中的出现可能,但不一定全指相同的实施例,而是意味着“一个或多个而不是所有实施例”,除非明确地另有说明。术语“包括”、“包含”、“具有”及其变型意味着“包括但不限于”,除非明确地另有说明。项目的枚举列表并不暗示任何或所有的项目彼此排除和/或彼此包括:除非明确地另有说明。术语“一”、“一个”和“所述”还指“一个或多个”,除非明确地另有说明。

本公开的方面在下面参照根据本公开的实施例的方法、设备、系统和计算机程序产品的示意性流程图和/或示意性框图描述。应理解的是,示意性流程图和/或示意性框图的每个块以及示意性流程图和/或示意性框图中的块的结合,可以由计算机程序指令实现。这些计算机程序指令可以被提供到计算机的处理器或其它可编程数据处理设备以产生机器,使得通过处理器或其它可编程数据处理设备执行的指令,创建用于实现在示意性流程图和/或示意性框图的一个或多个块中指定的功能和/或动作的构件。

应注意的是,在一些可替换实现方式中,在所述块中注释的功能可以以不同于附图中注释的次序发生。例如,取决于所涉及的功能,被示出为连续的两个块事实上可以基本上同时被执行,或者所述块可以有时以相反的次序被执行。可以构思功能上、逻辑上或者效果上与附图的一个或多个块或其部分等同的其它步骤和方法。尽管在流程图和/或框图中可以采用各种箭头类型和线类型,应理解的是,它们不应限制相应实施例的范围。例如,箭头可以指示所述实施例的列举的步骤之间的未指定持续时间的等待或监控期间。

在下面的详细说明中,参考所作为说明书的一部分的附图。前述发明内容仅是示意性的并且不意欲以任何方式是限制性的。除了上述示意性的方面、实施例和特征以外,通过参考附图和下面的具体说明,进一步的方面、实施例和特征将变得清晰。在每个附图中的对元件的描述可以指前述附图中的元件。相似的标号在附图中可以指相似的元件,包括相似元件的可替换实施例。

图1是包括贮存操作中断模块150的系统100的一个实施例的框图。贮存操作中断模块150可以是非易失性存储器控制器124、非易失性存储器介质控制器126、装置驱动器或贮存管理层(SML)130等中的一个或多个的一部分,且/或与非易失性存储器控制器124、非易失性存储器介质控制器126、装置驱动器或贮存管理层(SML)130等中的一个或多个通信。贮存操作中断模块150可以在计算装置110的非易失性存储器系统102上操作,所述计算装置110可以包括处理器111、易失性存储器112和通信接口113。处理器111可以包括一个或多个中央处理单元、一个或多个通用处理器、一个或多个专用处理器、一个或多个虚拟处理器(例如,计算装置110可以是在主机中操作的虚拟机)、一个或多个处理器核等。通信接口113可以包括一个或多个网络接口,该网络接口被配置为可通信地将计算装置110和/或非易失性存储器控制器124耦接到通信网络115,该通信网络115诸如因特网协议网络、贮存区域网络等。

计算装置110还可以包括非瞬时性、计算机可读的贮存介质114。计算机可读的贮存介质114可以包括可执行的指令,该可执行的指令被配置为使得计算装置110(例如,处理器111)进行这里所公开的一个或多个方法的步骤。可替换地或者此外,贮存操作中断模块150可以被实现为贮存在非瞬时性贮存介质114上的一个或多个计算机可读指令。

在所示的实施例中,非易失性存储器系统102包括贮存操作中断模块150。在一个实施例中,贮存操作中断模块150被配置为确定用于中断贮存操作(例如,擦除操作、编程操作等)的频率,根据该确定的频率中断贮存操作的执行,并且响应于触发(trigger)恢复该被中断的贮存操作。在一个实施例中,贮存操作中断模块150在另外的贮存操作被中断时检查可插入的贮存操作(例如,读取操作),并且在贮存操作被中断时对与该被中断的贮存操作相同的贮存元件123执行一个或多个可插入的贮存操作,并且如果在操作队列中不存在可插入的贮存操作,自动地恢复被中断的贮存操作。

因此,在某些实施例中,贮存操作中断模块150允许在与其中正执行较长持续时间的贮存操作(例如,擦除操作、编程操作等)的擦除块相同的裸芯上发生较短持续时间的搁置的(pending)操作(例如,读取操作)。贮存操作中断模块150可以通过打断或中断更长的贮存操作、并且允许在更长的贮存操作的分段之间在擦除块的相同的裸芯上进行其它贮存操作来实现此。在一个实施例中,将更长的贮存操作划分为可以在已知的时间框(timeframe)中完成的分段允许操作的延迟是可预测和可控制的。

在一个实施例中,贮存操作中断模块150包括非易失性存储器介质122的存储器元件123(例如,集成电路、芯片、裸芯、裸芯平面、封装)的逻辑(例如,电子电路、可编程逻辑、可执行的代码、状态机、嵌入的控制器),使得贮存操作中断模块150可以从存储器元件123中中断贮存操作,而不需要从外部控制器124、126等接收中止命令。在某些实施例中,将贮存操作中断模块150集成在存储器元件123自身上,可以允许中断贮存操作而不需要外部控制器124、126跟踪贮存操作的时间和/或状态信息。贮存操作中断模块150可以允许控制器124、126定义贮存操作将被中断的频率(例如,中断之间的脉冲或分段的数量),而不需要明确的中止(suspend)命令。在其他实施例中,贮存操作中断模块150是控制器124、126的一部分,或者与控制器124、126集成,并且可以使用一个或多个供应商提供的中止/恢复命令(例如,CMD FFh用以中止、CMD 27h用以恢复等)中断贮存操作。

在某些实施例中,取代执行单个、连续的贮存操作(例如,擦除操作、写入/编程操作等),贮存操作中断模块150可以被配置为中断、暂停、中止、打断、和/或另外将贮存操作分为多个阶段(phase)或分段(segment)。如这里所使用的,贮存操作的“阶段”或“分段”包括部分操作、一个贮存操作的一个或多个脉冲、和/或一个贮存操作的另一部分,在“阶段”或“分段”之间可以执行另外的操作。贮存操作中断模块150可以在中断的或划分的贮存操作的不同的阶段或分段之间执行对非易失性存储器元件123的一个或多个其它贮存操作(例如,读取、写入/编程和/或擦除贮存操作)。

通过中断、暂停、中止、打断和/或将贮存操作划分为多个阶段、分区、分段和/或部分,在一个实施例中,当相比于默认的贮存操作时,贮存操作中断模块150可以降低其它共同搁置的贮存操作的延迟,可以减少非易失性存储器介质122上的压力和损耗,等等。在某些实施例中,贮存操作中断模块150可以基于从控制器124、126、从贮存客户端116等接收的指示中断贮存操作的频率的参数,在贮存元件123中内部地中断、暂停、中止、打断或划分贮存操作或过程(procedure)。

在一个实施例中,贮存操作中断模块150可以以预定周期性间隔打断或者另外地调节执行的操作。预定周期性间隔可以与如下操作有关,其中,从该操作自身等的开始时计数。例如,贮存操作中断模块150可以周期性地每5个脉冲、每500微秒等中断操作(诸如擦除操作),将该操作分段为多个阶段使得可以在各阶段之间执行搁置的操作。在某些实施例中,贮存操作中断模块150可以周期性地中断操作,而不管具有更高执行优先级的任何搁置的操作。在另一实施例中,贮存操作中断模块150可以周期性地检查具有更高优先级的搁置的操作,并且可以响应于具有更高优先级的搁置的操作(例如,可插入的贮存操作)而中断贮存操作。

在一个实施例中,贮存操作中断模块150可以包括可执行的软件代码——诸如装置驱动器、SML 130等——其贮存在计算机可读的贮存介质114上以用于在处理器111上执行。在另一实施例中,贮存操作中断模块150可以包括一个或多个非易失性存储器装置120的逻辑硬件——诸如非易失性存储器介质控制器126、非易失性存储器控制器124、装置控制器、现场可编程门阵列(FPGA)或其它可编程逻辑、用于FPGA或其它可编程逻辑的固件、在微控制器上执行的微代码、专用集成电路(ASIC)等。在其他实施例中,贮存操作中断模块150可以包括可执行的软件代码和逻辑硬件两者的组合。

在一个实施例中,贮存操作中断模块150被配置为经由总线125等从SML 130接收贮存请求。贮存操作中断模块150还可以被配置为经由总线125将数据传输到SML 130和/或贮存客户端116、且/或从SML 130和/或贮存客户端116传输数据。相应地,在一些实施例中,贮存操作中断模块150可以包括直接存储器存取(DMA)模块、远程DMA模块、总线控制器、网桥、缓冲器等等中的一个或多个,且/或与上述一个或多个通信,以促进贮存请求和相关数据的传输。在另一实施例中,贮存操作中断模块150可以从贮存客户端116接收贮存请求作为API调用、作为IO-CTL命令等。在下面关于图3和4更加详细地描述贮存操作中断模块150。

根据各种实施例,包括贮存操作中断模块150的非易失性存储器控制器124可以管理一个或多个非易失性存储器装置120。一个或多个非易失性存储器装置120可以包括记录、存储器、和/或贮存装置——诸如布置在和/或分区为多个可编制的介质贮存位置的一个或多个固态贮存装置。如这里所使用的,介质贮存位置指存储器的任何物理单元(例如,对非易失性存储器装置120的任何数量的物理贮存介质)。存储器单元可以包括、但不限于:页、存储器分区、擦除块、扇区、块、物理贮存位置(例如,下述的逻辑页、逻辑的擦除块)的集合或组等。

非易失性存储器控制器124可以包括SML 130,该SML 130可以将逻辑地址空间134呈现给一个或多个贮存客户端116。SML的一个示例是加利福尼亚的苗比达的SanDisk公司的虚拟贮存层(Virtual Storage)。可替换地,每个非易失性存储器装置120可以包括非易失性存储器介质控制器126,该非易失性存储器介质控制器126可以将逻辑地址空间134呈现给贮存客户端116。如这里所使用的,逻辑地址空间134指存储器资源的逻辑表示。逻辑地址空间134可以包括多个(例如,范围)的逻辑地址。如这里所使用的,逻辑地址指用于引用存储器资源(例如,数据)的任何标识符,包括、但不限于:逻辑块地址(LBA)、柱面/磁头/扇区(CHS)地址、文件名称、对象标识符、i节点(inode)、通用唯一标识符(UUID)、全局唯一的标识符(GUID)、散列码、签名、索引项、范围、程度(extent)等。

SML 130可以保持元数据135——诸如正向索引——以将逻辑地址空间134的逻辑地址映射到在一个或多个非易失性存储器装置120上的介质贮存位置。SML 130可以提供用于从逻辑地址到物理贮存资源的任意的、任何到任何(any-to-any)的映射。如这里所使用的,“任何到任何”映射将任何逻辑地址映射到任何物理贮存资源。相应地,在逻辑地址和特定的、介质贮存位置和/或介质地址之间可能不存在预定和/或预置的映射。如这里所使用的,介质地址指的是向管理多个存储器资源的控制器唯一地标识各个存储器资源的存储器资源的地址。以示例的方式,介质地址包括、但不限于:介质贮存位置、物理存储器单元、物理存储器单元的集合(例如,逻辑存储器单元)、存储器单元的一部分(例如,逻辑存储器单元地址和偏移、范围和/或程度)等的地址。相应地,SML 130可以将逻辑地址映射到任何大小和/或粒度的物理数据资源,该任何大小和/或粒度的物理数据资源可能可以或不能对应于一个或多个非易失性存储器装置120的可能的数据分区方案。例如,在一些实施例中,非易失性存储器控制器124被配置为在通过逻辑地组合多个物理存储器单元而形成的逻辑存储器单元中贮存数据,该物理存储器单元可以允许非易失性存储器控制器124支持许多不同的虚拟存储器单元的大小和/或粒度。

如这里所使用的,逻辑存储器元件指(例如,通过I/O和/或控制总线)被并行管理或者能够被并行管理的两个或多个非易失性存储器元件的组。逻辑存储器元件可以包括多个逻辑存储器单元——诸如逻辑页、逻辑存储器分区(例如,逻辑的擦除块)等等。如这里所使用的,逻辑存储器单元指组合两个或多个物理存储器单元的逻辑构造,每个物理存储器单元在各自的逻辑存储器元件中的各自的非易失性存储器元件上(例如,每个非易失性存储器元件可以被并行地访问)。如这里所使用的,逻辑存储器分区指两个或多个的物理存储器分区的组,每个物理存储器分区在各自的逻辑存储器元件中的各自的非易失性存储器元件上。

由SML 130呈现的逻辑地址空间134可以具有逻辑容量,该容量可以对应于在逻辑地址空间134中的可用的逻辑地址的数量以及由逻辑地址引用的数据的大小和/或粒度。例如,逻辑地址空间134的逻辑容量包括2^32个唯一的逻辑地址,每一个引用2048字节(2KiB)的数据可以是2^43字节。如这里所使用的,千位字节(KiB)指1024字节。在一些实施例中,可能稀疏地供应逻辑地址空间134。如这里所使用的,“稀疏地供应的”逻辑地址空间134指逻辑地址空间134具有超过潜在的一个或多个非易失性存储器装置120的物理容量的逻辑容量。例如,SML 130可以将64-位逻辑地址空间134(例如,由64-位逻辑地址引用的逻辑地址空间134)呈现给贮存客户端116,其可能超过潜在的(underlying)非易失性存储器装置120的物理容量。大逻辑地址空间134可以允许贮存客户端116分配和/或引用逻辑地址的连续范围,同时减少命名冲突的几率。SML 130可以利用(leverage)逻辑地址和物理贮存资源之间的任何到任何的映射,以独立于潜在的物理贮存装置120而管理逻辑地址空间134。例如,SML 130可以按需要无缝地增加和/或移除物理贮存资源,并且不需要改变贮存客户端116所使用的逻辑地址。

非易失性存储器控制器124可以被配置为以上下文的(contextual)格式贮存数据。如这里所使用的,上下文的格式指自描述的(self-describing)数据格式,其中持久性上下文的元数据与数据一起被贮存在物理贮存介质122上。持久性上下文的元数据提供与其一起贮存的数据的上下文。在某些实施例中,持久性上下文的元数据唯一地识别与持久性上下文的元数据一起贮存的数据。例如,持久性上下文的元数据可以唯一地标识贮存客户端116所拥有的数据的扇区或块与贮存客户端116拥有的数据的其它扇区或块。在其他实施例中,持久性上下文的元数据识别对数据进行的操作。在其他实施例中,持久性上下文的元数据识别对数据进行的一序列的操作。在其他实施例中,持久性上下文的元数据识别安全控制、数据类型或数据的其它属性。在某些实施例中,持久性上下文的元数据识别多个方面中的至少一个,包括数据类型、唯一的数据标识符、操作、和对数据进行的一序列的操作。

持久性上下文的元数据可以包括、但不限于:数据的逻辑地址、数据的标识符(例如,文件名称、对象id、标签、唯一的标识符等)、对其它数据的一个或多个引用(例如,该数据与其它数据相关联的指示符)、该数据关于其它数据的相对位置或偏移(例如,文件偏移等)、数据大小和/或范围等。上下文的数据格式可以包括分组格式,该分组格式包含数据分段和一个或多个标头(header)。可替换地,上下文的数据格式可以以其它方式(例如,以非易失性存储器介质122上的专用索引,存储器划分索引等的方式)将数据与上下文信息相关联。

在一些实施例中,上下文的数据格式可以允许基于非易失性存储器介质122的内容并且独立于其它元数据、诸如上述任意的、任何到任何的映射来确定和/或重新构造数据上下文。由于数据的介质位置独立于数据的逻辑地址,所以完全基于数据的介质位置或介质地址,可能低效地或者不能够确定数据的上下文。以上下文的格式在非易失性存储器介质122上贮存数据可以允许不需要参考其它元数据来确定数据上下文。例如,上下文的数据格式可以允许仅基于非易失性存储器介质122的内容而重新构造元数据(例如,重新构造逻辑地址和介质位置之间的任何到任何的映射)。

在一些实施例中,非易失性存储器控制器124可以被配置为将数据贮存在一个或多个非对称的、写入一次的介质122、诸如固态贮存介质上。如这里所使用的,“写入一次的”贮存介质指每次新的数据被写入或编程到其上时被重新初始化的(例如,擦除的)贮存介质。如这里所使用的,“非对称的”贮存介质指对于不同的贮存操作具有不同的延迟的贮存介质122。许多类型的固态贮存介质是非对称的;例如,读取操作可以比写入/编程操作快得多,并且写入/编程操作可以比擦除操作快得多(例如,读取介质可以比擦除快几百倍,并且比编程该介质快几十倍)。

存储器介质122可以被分区为可以被作为一组而擦除的存储器分区(例如,擦除块),以便于尤其(inter alia)导致(account for)介质122的非对称的特性等。同样地,就地(in-place)修改单个数据分段可能需要擦除包含数据的整个擦除块,并且连同原始的未改变的数据一起将修改的数据重新写入到擦除块。这可能导致低效的“写入放大”,其可能过度地损耗介质122。因此,在一些实施例中,非易失性存储器控制器124可以被配置为不在原来的地方写入数据。如这里所使用的,“不在原来的地方”写入数据指将数据写入到不同的一个或多个介质贮存位置,而不是“就地”覆盖数据(例如,覆盖数据的原始的物理位置)。不在原来的地方修改数据可以避免写入放大,因为在具有需要被修改的数据的擦除块上的现有的有效数据不需要被擦除和重新复制。此外,不在原来的地方写入数据可以去除从许多贮存操作的延迟路径的擦除(例如,擦除延迟不再是写入操作的关键路径的一部分)。

非易失性存储器控制器124可以包括在用于服务于贮存操作的常规路径(例如,用于进行贮存操作和/或服务于贮存请求的“路径”)以外操作的一个或多个处理。如这里所使用的,“用于服务于贮存请求的路径”或“用于服务于贮存操作的路径”(也被称为“关键路径”)指服务于贮存操作或请求所需要的一序列处理操作,诸如读取、写入、修改等。用于服务于贮存请求的路径可以包括从贮存客户端116接收请求、识别请求的逻辑地址、对非易失性存储器介质122进行一个或多个贮存操作以及返回结果,该结果诸如应答(acknowledgement)或数据。发生在用于服务于贮存请求的路径以外的处理可以包括、但不限于:清扫器(groomer)、去重复(duplication)等等。这些处理可以自主地并且在后台实现,使得它们不干涉或者影响其它贮存操作和/或请求的性能。相应地,这些处理可以独立于服务于贮存请求而操作。

在某些实施例中,由于非易失性存储器介质控制器124通过将各种编程和擦除电压施加到贮存单元的浮置栅极而使得非易失性存储器介质122被编程和擦除,电子的电荷可能变为陷在贮存单元的隧道氧化层中,并且该电荷可能随时间而累积。取决于所使用的编程和/或擦除过程的配置,被陷入的电子的量可能变化。

如这里所使用的,贮存操作(例如,擦除过程、编程/写入过程、读取过程)可以包括一起满足预定目标和/或结果(例如,从贮存单元擦除数据、将数据编程到贮存单元、从贮存单元读取数据等)的一个或多个阶段、分段、步骤、脉冲和/或其它部分。通过默认的,在某些实施例中,贮存操作可以通过连续地(例如,不中断)执行阶段、分段、步骤、脉冲和/或其它部分的贮存操作而完成。从计算装置110、贮存客户端116、SML 130、非易失性存储器介质控制器126和/或非易失性存储器控制器124的角度来说,贮存操作可以响应于单个命令或请求来实现或完成,即使从非易失性存储器介质122或从非易失性存储器元件123的角度来说,贮存操作使用多个单独的、独立的阶段、分段、步骤、脉冲或其它部分。

例如,贮存客户端116可以发送写入请求以将数据贮存在非易失性存储器装置120中、或者删减请求以将数据从非易失性存储器装置120中擦除,非易失性存储器控制器124可以选择非易失性存储器介质122的一个或多个擦除块来擦除,以用于作为贮存容量复原操作的一部分的垃圾收集等。用于非易失性存储器介质122的编程过程可以包括使用用于与请求相关联的各自的存储器元件123(和/或对于在阵列中的几个存储器元件123)的单个编程命令(例如,包括地址信息、写入请求的数据等)来执行的单个编程操作,这可能使得一个或多个非易失性存储器元件123进行如下编程操作直到单个编程操作成功或者失败为止,该编程操作包括变化的电压电平的多个电脉冲。

类似地,用于非易失性存储器介质122的擦除块的擦除过程可以包括对将被擦除的各自的存储器元件123(和/或对在阵列中的几个存储器元件123)使用单个擦除命令(例如,包括擦除块的地址等)执行的单个擦除操作,这可能使得(一个或多个)非易失性存储器元件123进行如下擦除操作直到单个擦除操作成功或者失败为止,该擦除操作包括变化的电压电平的多个电脉冲。

擦除和/或编程操作可以包括N个数量的脉冲(例如,最大循环计数16等)。在某些实施例中,非易失性存储器介质122的循环计数N可以被设置得足够高以确保成功地完成操作,并且贮存操作中断模块150可以周期性地中断、暂停和/或中止操作,以为其它操作提供一致的延迟。施加增加的电压以擦除或编程单元的每个迭代可以被称为循环(loop)(例如,擦除循环、编程循环等)。在每个迭代上,擦除块、页或其它组的贮存单元接收具有预定电压的电脉冲。对于擦除操作,每个脉冲可以被配置为将电子推出浮置栅极,而编程操作的脉冲可以将电子推进浮置栅极中等。每个迭代或脉冲可以被施加固定的时间段或预定持续时间(例如,600-700微秒等)。在操作期间施加的电压可以被配置为在操作的第一脉冲期间逐渐地升高(例如,斜升)。可以通过缓慢地将更高的电压施加到单元等进行斜升电压,以减轻对氧化物的损坏。高电压可能导致对将浮置栅极从其它层隔离开的氧化层的损坏。

在一些实施例中,非易失性存储器控制器124包括清扫器,该清扫器被配置为使用垃圾收集或其它贮存容量复原处理来回收存储器分区(例如,逻辑的或物理的擦除块)以用于重新使用。由非易失性存储器控制器124实现的不在原来的地方写入的范例可能导致废弃的或无效的数据遗留在非易失性存储器介质122上。例如,用数据Y覆盖数据X可能导致将Y贮存在新的存储器分区上(例如,而不是就地覆盖X),并且更新元数据的任何到任何的映射以将Y识别为有效的、最近版本的数据。数据X的废弃的版本可以被标记为无效的,但是可能不会被立即移除(例如,被擦除),因为如上所述,擦除X可以涉及擦除整个存储器分区,这是耗时的操作并且可能导致写入放大。类似地,不再使用的数据(例如,删除的或删减的数据)可能不会被立即移除。非易失性存储器介质122可能累积大量的无效数据。

清扫器处理可以在用于服务于贮存操作的关键路径以外操作。清扫器处理可以回收存储器分区,使得它们可以被重新用于其它贮存操作。如这里所使用的,回收存储器分区指擦除存储器分区,使得新的数据可以被贮存/编程到其上。回收存储器分区可以包括将在存储器分区上的有效数据迁移到新的位置。清扫器可以基于一个或多个因素来识别用于回收的存储器分区,该一个或多个因素可以包括、但不限于:在存储器分区中的无效数据的量、在存储器分区中的有效数据的量、对存储器分区的损耗(例如,擦除周期的数量)、自存储器分区被编程或刷新起的时间等等。

非易失性存储器控制器124还可以被配置为以日志格式贮存数据。如上所述,日志格式指定义在非易失性存储器介质122上进行的有次序的一序列贮存操作的数据格式。在一些实施例中,日志格式包括在预定的一序列非易失性存储器介质122的介质地址中贮存数据(例如,在介质122的顺序的页和/或擦除块中)。日志格式还可以包括将数据(例如,每个分组或数据分段)与各自的序列指示符相关联。序列指示符可以被单独施加到数据(例如,施加到每个数据分组)和/或施加到数据组(例如,顺序地贮存在诸如擦除块的存储器分区上的分组)。在一些实施例中,如上所述,当存储器分区被回收(例如,被擦除)时和/或当存储器分区第一次被用于贮存数据时,序列指示符可以被施加到存储器分区。

在一些实施例中,日志格式可以包括以“仅添加(append only)”的范例来贮存数据。非易失性存储器控制器124使用下述日志贮存模块137等可以在非易失性存储器装置120的介质地址处保持当前的添加点。添加点可以是当前的存储器分区和/或在存储器分区中的偏移。然后,可以从添加点顺序地添加数据。数据的序列次序因此可以基于数据的存储器分区的序列指示符结合在存储器分区中的数据的序列而确定。当达到存储器分区的结尾时,非易失性存储器控制器124可以识别“下一个”可用的存储器分区(例如,被初始化的并且准备好贮存数据的下一个存储器分区)。清扫器可以回收包含无效的、陈旧的和/或删除的数据的存储器分区,以确保数据可以继续被添加到介质日志。

这里所述的日志格式可以允许基于非易失性存储器介质122的内容并且独立于其它元数据来将有效数据与无效数据区分开。如上所述,直到包含数据的存储器分区被回收为止,可能不从非易失性存储器介质122移除无效的数据。因此,具有相同内容的多个“版本”的数据可能存在于非易失性存储器介质122上(例如,具有相同的逻辑地址的多个版本的数据)。与数据相关联的序列指示符可以被用于将数据的无效的版本与当前的、最新的版本的数据区分开;在日志中的最新的数据是当前的版本,并且之前的版本可以被识别为无效的。

贮存管理层(SML)130可以被配置为向一个或多个贮存客户端116提供贮存服务。贮存客户端116可以包括操作在计算装置110上的本地贮存客户端116、和/或可经由网络115和/或网络接口113访问的远程的、贮存客户端116。贮存客户端116可以包括、但不限于:操作系统、文件系统、数据库应用、服务器应用、内核级处理、用户级处理、应用等。

贮存管理层(SML)130包括一个或多个非易失性存储器装置120、且/或可通信地耦接到一个或多个非易失性存储器装置120。一个或多个非易失性存储器装置120可以包括不同类型的非易失性存储器装置,该非易失性存储器装置包括、但不限于:固态贮存装置、硬驱动、SAN贮存资源等。一个或多个非易失性存储器装置120可以包括一个或多个各自的非易失性存储器介质控制器126和非易失性存储器介质122。如图1中所示,SML 130可以通过传统的块I/O接口131提供对一个或多个非易失性存储器装置120的访问。此外,SML 130可以通过ML接口132提供对增加的功能(例如,大虚拟地址空间134)的访问。元数据135可以被用于管理和/或跟踪通过块I/O接口131、SML接口132、缓存接口133或其它相关接口中的任何一个而进行的贮存操作。

缓存接口133可以显露通过SML 130可访问的缓存特定的(cache-specific)特征。此外,在一些实施例中,呈现给贮存客户端116的SML接口132提供对由一个或多个非易失性存储器装置120和/或一个或多个非易失性存储器介质控制器126实现的数据转换的访问。

SML 130可以通过一个或多个接口提供贮存服务,该一个或多个接口可以包括、但不限于:块I/O接口、扩展的贮存管理层接口、缓存接口等。SML 130可以通过一个或多个接口将逻辑地址空间134呈现给贮存客户端116。如上所述,逻辑地址空间134可以包括多个逻辑地址,每一个逻辑地址对应于在一个或多个非易失性存储器装置120上的各自的介质位置。如上所述,SML 130可以保持包括逻辑地址和介质位置之间的任何到任何的映射的元数据135。

SML 130还可以包括日志贮存模块137,该日志贮存模块137被配置为以上下文的、日志格式贮存数据。上下文的、日志数据格式可以包括将数据与持久性上下文的元数据、诸如数据的逻辑地址等相关联。上下文的、日志格式还可以包括将数据与非易失性存储器介质122上的各自的序列标识符相关联,如上所述,其定义在一个或多个非易失性存储器装置120上进行的有次序的一序列的贮存操作。

SML 130还可以包括非易失性存储器装置接口139,该非易失性存储器装置接口139被配置为经由总线125将数据、命令和/或查询传输到一个或多个非易失性存储器装置120,该总线125可以包括、但不限于:外围组件快速互连(PCI快速或PCIe)总线、串行高级连接技术(ATA)总线、并行ATA总线、小型计算机系统接口(SCSI)、火线(FireWire)、光纤通道、通用串行总线(USB)、PCIe高级交换(PCIe-AS)总线、网络115、无线宽带技术(Infiniband)、SCSI RDMA等。非易失性存储器装置接口139可以使用一个或多个输入-输出控制(IO-CTL)命令、一个或多个IO-CTL命令扩展、远程直接存储器存取等与一个或多个非易失性存储器装置120通信。

通信接口113可以包括一个或多个网络接口,该网络接口被配置为将计算装置110和/或非易失性存储器控制器124可通信地耦接到网络115和/或到一个或多个远程的、可访问网络的贮存客户端116。贮存客户端116可以包括操作在计算装置110的本地贮存客户端116和/或经由网络115和/或网络接口113可访问的远程的贮存客户端116。非易失性存储器控制器124包括一个或多个非易失性存储器装置120。尽管图1描述了单个非易失性存储器装置120,但是本公开在此方面不受限制,并且可以适应于合并任何数量的非易失性存储器装置120。

非易失性存储器装置120可以包括非易失性存储器介质122,非易失性存储器介质122可以包括但不限于:NAND闪速存储器、NOR闪速存储器,微型(nano)随机存取存储器(微型RAM或NRAM)、纳米晶体基于有线的存储器、基于氧化硅的小于10纳米的处理存储器、石墨烯存储器、硅-氧化物-氮化物-氧化物-硅(SONOS)、电阻式RAM(RRAM)、可编程金属化单元(PMC)、导电桥RAM(CBRAM)、磁阻式RAM(MRAM)、动态RAM(DRAM)、相变RAM(PRAM或PCM)、磁贮存介质(例如,硬盘、磁带)、光贮存介质等。尽管非易失性存储器介质122在这里被称为“存储器介质”,但是,在各种实施例中,非易失性存储器介质122可以更一般地包括能够记录数据的非易失性记录介质,其可以被成为非易失性存储器介质、非易失性贮存介质等。此外,在各种实施例中,非易失性存储器装置120可以包括非易失性记录装置、非易失性存储器装置、非易失性贮存装置等。

非易失性存储器介质122可以包括一个或多个非易失性存储器元件123,该非易失性存储器元件123可以包括、但不限于:芯片、封装、平面、裸芯等。非易失性存储器介质控制器126可以被配置为管理在非易失性存储器介质122上的贮存操作,并且可以包括一个或多个处理器、可编程处理器(例如,现场可编程门阵列)等。在一些实施例中,非易失性存储器介质控制器126被配置为以上述上下文的、日志格式将数据贮存在非易失性存储器介质122上和/或从非易失性存储器介质122读取数据,并且将数据传输到非易失性存储器装置120和/从非易失性存储器装置120传输数据等等。

非易失性存储器介质控制器126可以经由总线127的方式可操作性地耦接到非易失性存储器介质122。总线127可以包括用于将数据传送到非易失性存储器元件123/从非易失性存储器元件123传送数据的I/O总线。总线127还可以包括用于将地址和其它命令和控制信息传送到非易失性存储器元件123的控制总线。在一些实施例中,总线127可以并行地将非易失性存储器元件123可通信地耦接到非易失性存储器介质控制器126。该并行访问可以允许非易失性存储器元件123作为一组而被管理,形成逻辑存储器元件129。如上所述,逻辑存储器元件可以被分区为各自的逻辑存储器单元(例如,逻辑页)和/或逻辑存储器分区(例如,逻辑的擦除块)。逻辑存储器单元可以通过逻辑地组合非易失性存储器元件的每一个的物理存储器单元而形成。例如,如果非易失性存储器介质122包含二十五(25)个非易失性存储器元件,则每个逻辑存储器单元可以包括二十五(25)页(例如,非易失性存储器介质122的每个元件的页)。

非易失性存储器控制器124可以包括SML 130和非易失性存储器介质控制器126。SML 130可以通过一个或多个接口131、132和/或133将贮存服务提供到贮存客户端116。在一些实施例中,SML 130提供块-装置I/O接口131,其中,贮存客户端116通过该接口131进行块-级别I/O操作。可替换地或者此外,SML 130可以提供贮存管理层(SML)接口132,该接口132可以提供其它贮存服务给贮存客户端116。在一些实施例中,SML接口132可以包括到块装置接口131的扩展(例如,贮存客户端116可以通过到块装置接口131的扩展访问SML接口132)。可替换地或者此外,SML接口132可以被提供为单独的API、服务和/或函数库。SML 130还可以被配置为提供缓存接口133以用于使用非易失性存储器系统102缓存数据。

如上所述,SML 130可以将逻辑地址空间134呈现给贮存客户端116(例如,通过接口131、132和/或133)。SML 130可以保持包含了在逻辑地址空间134中的逻辑地址和非易失性存储器装置120上的介质位置之间的任何到任何的映射的元数据135的元数据135。元数据135可以包括逻辑到物理的映射结构,其具有映射逻辑地址空间134中的逻辑地址和非易失性存储器装置120上的介质位置的项目。在一个实施例中,元数据135的逻辑到物理的映射结构稀疏地分布,其具有非易失性存储器装置120用来贮存数据的逻辑地址的项目,并且不具有非易失性存储器装置120目前未贮存数据的逻辑地址的项目。在某些实施例中,元数据135以块级来跟踪数据,其中SML 130管理作为块的数据。

非易失性存储器系统102还可以包括日志贮存模块137,如上所述,该日志贮存模块137可以被配置为以上下文的、日志格式对非易失性存储器装置120贮存数据。上下文的、日志数据格式可以包括将数据与非易失性存储器介质122上的逻辑地址相关联。上下文的、日志格式还可以包括将数据与非易失性存储器介质122上的各自的序列标识符相关联,如上所述,其定义在非易失性存储器介质122上进行的有次序的一序列的贮存操作。非易失性存储器控制器124还可以包括非易失性存储器装置接口139,如上所述,该非易失性存储器装置接口139被配置为经由总线125将数据、命令和/或查询传输到非易失性存储器介质控制器126。

图2示出了被配置为服务于贮存请求的非易失性存储器控制器124的另一个实施例。非易失性存储器装置120可以包括非易失性存储器介质控制器126和非易失性存储器介质122。非易失性存储器介质122可以包括多个非易失性存储器元件123,如上所述,该非易失性存储器元件123可以经由总线127可操作性地耦接到非易失性存储器介质控制器126。

非易失性存储器介质控制器126可以包括写入管线(pipeline)240,该写入管线240被配置为响应于通过贮存操作中断模块150接收的请求而以上下文的格式将数据贮存在非易失性存储器介质122上。请求可以包括且/或引用将被贮存在非易失性存储器介质122上的数据,可以包括数据的(一个或多个)逻辑地址等等。如上所述,上下文的格式可以包括贮存在非易失性存储器介质122上的、与数据相关联的数据的逻辑地址。例如,写入管线240可以被配置为将数据格式化为分组,并且可以包括在分组标头或其它分组字段中的数据的逻辑地址。写入管线240可以被配置为缓冲数据,以用于贮存在非易失性存储器介质122上。在一些实施例中,写入管线240可以包括一个或多个同步缓冲器,以将非易失性存储器介质控制器126的时钟域与非易失性存储器介质122和/或总线127的时钟域同步。

日志贮存模块248可以被配置为选择用于数据的一个或多个介质位置,并且可以经由总线127将地址和/或控制信息提供到非易失性存储器元件123。在一些实施例中,日志贮存模块248被配置为在非易失性存储器介质中以日志格式顺序地贮存数据。日志贮存模块248还可以被配置为清扫非易失性存储器介质,如上所述。在某些实施例中,日志贮存模块248基本上类似于如上所述的日志贮存模块137。日志贮存模块248可以由SML 130和/或由非易失性存储器介质控制器126执行。

响应于将数据写入到非易失性存储器介质,非易失性存储器介质控制器126可以被配置为更新元数据135(例如,正向索引),以将数据的一个或多个逻辑地址与在非易失性存储器介质122上的数据的一个或多个介质地址相关联。在一些实施例中,元数据135可以被保持在非易失性存储器介质控制器126上;例如,元数据135可以被贮存在非易失性存储器介质122上、易失性存储器(未示出)等上。可替换地或者此外,元数据135可以被保持在SML 130中(例如,在图1的计算装置110的易失性存储器112上)。在一些实施例中,元数据135可以由SML 130保持在易失性存储器中,并且可以周期性地被贮存在非易失性存储器介质122上。

非易失性存储器介质控制器126还可以包括读取管线241,该读取管线241被配置为响应于通过贮存操作中断模块150接收的请求从非易失性存储器介质122读取上下文的数据。请求可以包括请求的逻辑地址的数据、请求的数据的介质地址等等。读取管线241可以被配置为从非易失性存储器介质122读取以上下文的格式贮存的数据,并且将数据提供到SML 130和/或贮存客户端116。读取管线241可以被配置为使用数据的逻辑地址和元数据135来确定数据的介质地址。可替换地或者此外,SML 130可以确定数据的介质地址,并且可以将介质地址包括在请求中。日志贮存模块248可以将介质地址提供到非易失性存储器元件123,并且数据可以通过缓冲器流入读取管线241。如上所述,读取管线241可以包括一个或多个读取同步缓冲器以用于时钟域同步。

非易失性存储器介质控制器126还可以包括复用器(multiplexer)249,该复用器249被配置为选择性地将数据和/或命令路由到写入管线240和读取管线241/从写入管线240和读取管线241路由数据。在一些实施例中,非易失性存储器介质控制器126可以被配置为在填充写入管线240的缓冲器的同时读取数据,且/或可以在一个或多个条(bank)的非易失性存储器元件123(未示出)上交织一个或多个贮存操作。

图3示出了贮存操作中断模块150的一个实施例。贮存操作中断模块150可以基本上类似于上述关于图1的贮存操作中断模块150。一般来说,如上所述,贮存操作中断模块150在贮存元件处接收贮存操作多频繁将会被中断的频率(how often a storage operation is to be interrupted)的指示符,基于该指示符一次或多次地中断对该贮存元件的该贮存操作的执行,并且在该贮存操作被中断时对该贮存元件执行一个或多个其它贮存操作。在所示的实施例中,贮存操作中断模块150包括频率模块302、和中断模块304以及恢复模块306。在一个实施例中,模块302-306可以例如通过数据通信总线可通信地相互耦接。

在一个实施例中,频率模块302被配置为确定用于暂停贮存操作的频率。如这里所使用的,“用于暂停贮存操作的频率”指贮存操作多频繁将被或可能被中断、暂停、分开、中止等的指示符。在某些实施例中,用于暂停贮存操作的频率可以是贮存操作被中断而不管其它的搁置的操作或其它的因素的强制频率或间隔。在其他实施例中,用于暂停贮存操作的频率可以是可选的频率、最大频率等,其许可或允许贮存操作的中断达到标识的频率或处于标识的间隔、而不是必须这样。例如,用于暂停贮存操作的频率可以标识间隔或频率,下述中断模块304可以以该间隔或频率检查搁置的贮存操作,并且如果识别到搁置的贮存操作,则选择性地中断执行的贮存操作,但是中断模块304可以另外允许继续该正执行的贮存操作、而不中断。

在一个实施例中,用于暂停贮存操作的频率可以由贮存操作步骤、周期和/或脉冲的数量来测量或指示。在另一实施例中,可以以每秒或者以其分数(诸如毫秒(ms)、微秒、纳秒等)在中断中测量用于暂停贮存操作的频率。在某些实施例中,中断指示符可以被表示为在连续的中断之间的时间段。因此,用于暂停或中断贮存操作的频率可以指每单位时间的中断的数量、每个操作的中断的数量、中断之间的操作的脉冲或其它步骤的数量和/或中断之间的时间量(例如,以纳秒、微秒、毫秒等)。

此外,用于暂停或中断贮存操作的频率可以相对于固定的时间段和/或可变的时间框。例如,在某些实施例中,频率指在固定的时间段上的计数。在其他实施例中,频率指在没有固定时间的(open ended)持续时间上(例如,每个贮存操作)的扰断(disruption)的数量。例如,编程操作可以具有随元件的寿命改变的平均执行时间。此外,擦除操作还可以具有随非易失性存储器装置120的寿命变化的平均执行时间。

随着装置老化,编程操作的平均执行时间可能降低,而擦除操作的平均执行时间可能增加。编程和擦除贮存操作执行达到最大数量的迭代,直到它们成功(满足验证电压电平)或者失败。贮存操作成功所需要的迭代的数量通常随着装置老化而改变。换句话说,贮存操作的持续时间是可变的,并且贮存操作成功所需要的时间随着装置老化而改变。由于变化的平均执行时间,因此,在一个实施例中,频率模块302可以被配置为以每个操作为基础确定中断频率(例如,用于暂停贮存操作的频率),就是说,确定在贮存操作的无固定时间的持续时间上的中断的固定数量。

在某些实施例中,非易失性存储器系统102可以提供一个或多个多阶段命令。如这里所使用的,“多阶段”命令是进行一序列的阶段或步骤以便于实现命令的最终结果的命令。编程和擦除命令是多阶段命令的示例。在一个实施例中,频率模块302可以基于用于暂停贮存操作的频率来组织多阶段命令的阶段,使得各阶段具有对应于用于暂停贮存操作的频率的长度。

在快闪介质上,编程操作是多阶段操作,其中贮存元件在报告完成了该操作之前自动地进行每个阶段。具体地,贮存元件将连续增加的量的电压施加到贮存单元,以使在单元中贮存的电荷增加。然后,贮存元件读取单元的值,以确定该单元的电压是否在指示已经编程了该单元的某个范围中。如果是,则贮存元件停止编程操作,并且返回到可以进行新操作的就绪状态。如果不是,贮存元件施加另外的量的电压,并且重新读取单元以确定该单元的电压是否在指示已经编程了该单元的某个范围中。该处理重复直到贮存元件的单元被编程为止。类似地,多个阶段的迭代的集合由贮存元件进行,以擦除在贮存单元的擦除块中的单元。该阶段可以取决于非易失性贮存装置120制造者如何设计他们的装置而变化。

在一些实施例中,频率模块302设置定义用于暂停贮存操作的频率的中断频率参数(例如,贮存操作多频繁将被中断的指示符)。在一个实施例中,频率模块302设置2-位中断频率参数(例如,具有“0”、“1”、“2”和“3”的值),该参数指示在中止贮存操作之前的贮存操作循环(或阶段)的数量。例如,“0”值可以被用于选择其中不中止贮存操作的模式,“1”值可以被用于选择其中在两个操作循环之后中止贮存操作的模式,“2”值可以被用于选择其中在四个操作循环之后中止贮存操作的模式,并且“3”值可以被用于选择其中在四个操作组之后中止贮存操作的模式。在其它情况中,中断频率参数的值可以指示在中止贮存操作之前贮存操作循环(或阶段)的其它数量。

在一些实施例中,频率模块302将中断频率或中断指示符发送到中断模块304,并且中断模块304基于中断频率或中断指示符来中止或暂停贮存操作的执行。在一个实施例中,中断指示符要求中断模块304在一定量的时间之后或在由中断指示符指定的多个操作步骤之后暂停或中止贮存操作。例如,中断指示符可以使得中断模块304每隔500ms或者每两个编程或擦除脉冲之后中断贮存操作。

在另一实施例中,中断指示符可以指定允许中断模块304在给定的时间框中或每个贮存操作进行的中断的可允许的或者最大的数量。相应地,频率模块302可以确定用于暂停贮存操作的最大频率,并且中断模块304可以中断贮存操作达最大频率的次数,可以在最大频率处检查可插入的或可交织的贮存操作(例如,读取操作)等。例如,频率模块302可以经由中断指示符、中断频率等来指示中断模块304可以以每500ms一次的频率中断贮存操作,并且如果条件允许(conditions merit)(例如,根据工作量、服务质量要求、队列的贮存操作的优先级等),中断模块304可以较不频繁地中断贮存操作。在另外的示例中,中断指示符可以指示中断模块304至少每500ms中断贮存操作一次,并且如下该,如果条件允许,中断模块304可以比500ms更加频繁地中断贮存操作。

在一些实施例中,频率模块302基于非易失性存储器装置120的工作量来确定用于暂停贮存操作的频率。如这里所使用的,非易失性存储器装置120的工作量指对非易失性存储器装置120进行的不同类型的贮存操作(例如,读取操作、写入/编程操作和/或擦除操作)的数量、比率和/或百分比。例如,非易失性存储器装置120的工作量可以是读取贮存操作对擦除贮存操作的比率、读取贮存操作对编程贮存操作的比率或者读取贮存操作对非读取贮存操作的比率。因此,频率模块302可以基于非易失性存储器装置120正在经历的读取贮存操作和非读取贮存操作的具体混合来计算频率指示符。此外,频率模块302可以随着非易失性存储器装置120的工作量的改变而动态地调节频率指示符。

在一些实施例中,频率模块随着非读取贮存操作的工作量比率增加而调节中断贮存操作的频率。在某些实施例中,频率模块302从诸如工作量模块402的另一模块接收关于工作量比率的信息。在一个实施例中,工作量比率信息描述了读取贮存操作对非读取贮存操作(例如编程贮存操作和/或擦除贮存操作)的量或百分比,并且基于由非易失性存储器装置120进行的读取贮存操作的量、向频率模块302指示中断频率应该增加还是降低。

例如,随着由非易失性存储器装置120进行的读取贮存操作的量增加,频率模块302增加编程贮存操作和/或擦除贮存操作被中断的频率,从而增加读取贮存操作与非读取贮存操作的分段(例如,阶段)交织的速率,并且改善在非易失性存储器装置120中的读取贮存操作性能。相反地,随着由非易失性存储器装置120进行的读取贮存操作的量降低,频率模块302降低编程贮存操作和/或擦除贮存操作被中断的频率,从而改善在非易失性存储器装置120中的非读取贮存操作性能。例如,如果读取贮存操作的量下降到某个水平之下,频率模块302可以指示中断频率为零(例如指示执行的贮存操作不需要被中断)。通过基于用户工作量将编程和/或擦除操作动态地划分为阶段,非易失性存储器装置120的性能被优化。

在一些实施例中,频率模块302基于与非易失性存储器装置120相关联的服务质量度量来确定中断贮存操作的频率。在一个实施例中,非易失性存储器装置120可以与用于读取贮存操作、用于编程贮存操作、用于擦除贮存操作和/或用于其它贮存操作的特定的服务质量(QoS)要求相关联。相应地,频率模块302可以确定需要中断具有较长持续时间的贮存操作、例如擦除操作,以便于满足用于具有较短持续时间的贮存操作的服务质量要求。频率模块302可以确定用于更长的贮存操作的中断频率,以便于足够频繁地提供中断以满足用于较短的贮存操作的服务质量要求。

在一个实施例中,频率模块302将中断贮存操作的频率表达为在贮存操作的连续中断之间的贮存操作周期、循环和/或步骤的数量。在另一实施例中,频率模块302将中断贮存操作的频率表达为连续的中断之间的时间量,例如表达为中断之间的毫秒的数量。

在某些实施例中,频率模块302基于贮存操作的平均操作时间(例如,持续时间)确定中断频率。对于具有比操作时间阈值少的平均操作时间的贮存操作,频率模块302可以确定不中断贮存操作。例如,如果特定的贮存操作具有0.9ms的平均持续时间、并且如果阈值是1.0ms,则频率模块302可以确定不中断特定的贮存操作,即使其另外将每0.5ms中断贮存操作。在一些实施例中,操作时间阈值可以基于用于非易失性存储器装置120的服务质量参数。在其他实施例中,可以随着非易失性存储器装置120的工作量改变、随着非易失性存储器装置120的服务质量参数改变、或随着非易失性存储器装置120老化而调节操作时间阈值。

在某些实施例中,频率模块302基于贮存操作的类型来确定中断频率。在一个实施例中,特定的类型的贮存操作可以是不可中断的。例如,由于读取操作的极低的持续时间,所以读取操作可以被认为是不可中断的。作为另一示例,当非易失性存储器装置120工作量指示编程贮存操作主要对非易失性存储器装置120时,当工作量主要支持编程贮存操作时,编程贮存操作可以被认为是不可中断的。因此,频率模块302可以基于贮存操作类型是否是可中断的操作类型来识别贮存操作的类型,确定中断频率。

在某些实施例中,频率模块302可以基于使用非易失性存储器装置120的应用的应用类型来确定中断频率。在某些实施例中,频率模块302可以基于与非易失性存储器装置120相关联的贮存客户端116来确定中断频率。在一些实施例中,频率模块302可以从控制器或从贮存客户端116接收中断指示符,并且频率模块302可以基于接收的指示符来确定用于中断贮存操作的频率。

在一个实施例中,中断模块304被配置为根据该确定的频率来暂停该贮存操作的执行。如这里所使用的,“暂停”贮存操作的执行意味着暂停、中断、中止或者另外打断贮存操作的执行。中断模块304以允许稍后恢复贮存操作的方式暂停贮存操作的执行。这里对“暂停”的引用包括其它等同物或类似术语,包括、但不限于,中止、中断、列队和延迟。

在某些实施例中,中断模块304引用中断频率参数,该参数定义贮存操作多频繁将被中断。在其他实施例中,中断模块304接收贮存操作将被划分为的部分或分段的数量的指示。然后,中断模块304可以基于引用的中断频率参数和/或子操作的指示的数量来确定在贮存操作的后续中断之间的时间量(例如,操作循环、周期、分段、阶段等的数量)。

在一个实施例中,中断模块304被嵌入在数据贮存介质122的贮存元件123中,并且直接中断或暂停贮存操作的执行。在另一实施例中,中断模块304是外部控制器124、126的一部分和/或与外部控制器124、126集成,并且将一个或多个贮存操作命令发送到数据贮存介质122(例如,到一个或多个贮存元件123),并且贮存操作命令可以被配置为中断或暂停贮存操作的执行(例如,FFh中止命令等)。

在一些实施例中,中断模块304监控贮存操作的进程。例如,中断模块304可以计数在擦除贮存操作中完成的完成分段(例如,擦除周期)的数量。响应于贮存操作进程匹配用于暂停贮存操作的频率,中断模块304则可以暂停或中断贮存操作。在一个实施例中,中断模块304可以计算由用于暂停贮存操作的频率指示的时间段。在另一实施例中,中断模块304可以计算等于由用于暂停贮存操作的频率指示的时间段的周期、循环、步骤和/或分段的数量。

在一个实施例中,中断模块304基于确定的频率来确定贮存操作的阶段的数量。例如,中断模块304可以将贮存操作划分为两个或更多阶段,每个阶段具有基于确定的频率的最大长度。在另一实施例中,中断模块可以确定等于确定的中断频率的时间段,并且将贮存操作分段为具有不大于确定的时间段的长度的阶段。在其他实施例中,中断模块304可以计算等于确定的中断频率的周期的数量。中断模块304在每个计算的数量的周期时进一步分段贮存操作。

如这里所使用的,“分段”贮存操作指确定贮存操作中的贮存操作将被中断、暂停、中止或者否则被打断的点。因此,贮存操作可以被逻辑地分段为多个分段或阶段,每一个具有基于确定的中断频率的长度。在一些实施例中,贮存操作的每个分段具有相同的长度。在另一实施例中,贮存操作可以被分段为一个或多个整体分段和剩余分段,具有对应于中断频率的长度的一个或多个整体分段和具有比整体分段短的长度的剩余分段。

在一些实施例中,中断模块304包括多个中止计时器和多个中止跟踪器,每个中止的计时器和每个中止的跟踪器与一组存储器单元相关联。在一个实施例中,中止计时器跟踪当前执行的贮存操作的执行时间量。在一些实施例中,执行时间量由秒、毫秒或微秒表示。在其他实施例中,执行时间量由循环、周期、步骤或贮存操作的其它部分表示。当跟踪的执行时间量达到对应于中断频率的量时,中断模块304中止或暂停执行的贮存操作,并且中止跟踪器记录正执行的贮存操作的状态。在一个实施例中,正执行的贮存操作的状态包括用于正执行的贮存操作的状态信息、正执行的贮存操作是否在未完成的状态中的指示。

在某些实施例中,中断模块304可以多次打断单个操作。中断模块304可以确定是否中断或者另外地调节正执行的操作以确保正执行的操作完成并且不被耗死(starved)。在一个实施例中,一旦恢复模块306恢复中断的操作,中断模块304不重新中断或重新调节正执行的操作,使得正执行的操作在预定时间段中完成执行,即使接收到具有比正执行的操作更高优先级的一个或多个后续操作。

在另一实施例中,中断模块304被配置为跟踪贮存操作已经被中断的次数。例如,中断模块304响应于中断贮存操作而递增中断计数器。中断计数器指示贮存操作已经被中断的次数。中断计数器可以被用于一旦已经达到中断计数阈值就阻止贮存操作的额外的中断。

相应地,中断模块304可以将跟踪的中断的数量与中断计数阈值比较,中断计数阈值定义用于贮存操作的中断的最大数量。响应于贮存操作的中断的数量达到中断计数阈值,中断模块304可以禁止贮存操作的另外的中断。这阻止该被中断的贮存操作被永久地中断(例如,被耗死)。在一个实施例中,中断计数阈值基于被中断的贮存操作的贮存操作类型、与非易失性存储器装置120相关联的服务质量要求、对非易失性存储器装置120的应用请求贮存操作以及非易失性存储器装置120的工作量中的一个或多个。

在一些实施例中,中断模块304被配置为阻止交织的贮存操作的中断,当另外的贮存操作被中断时执行交织的贮存操作。如这里所使用的,“交织的”贮存操作是当第一个贮存操作被暂停或中断时执行的后续的贮存操作。中断模块304阻止交织的贮存操作的中断,以便于不覆盖暂停的贮存操作的状态信息,并且减少用于暂停贮存操作的整体存储器要求。例如,擦除贮存操作可以根据频率指示符而被中断,并且可以当擦除贮存操作被中断时执行编程贮存操作。因为擦除贮存操作已经被中断,中断模块304阻止编程贮存操作(例如,交织的贮存操作)被中断。

例如,中断模块304可以被配置为中断擦除贮存操作六次。进一步的频率指示符可以指示贮存操作将每1.5ms被中断,而擦除贮存操作可能通常需要15ms来完成。因此,中断模块304可以每1.5ms中断擦除贮存操作一次、中断六次,在此之后中断模块304不再中断擦除贮存操作。

在一些实施例中,中断模块304可以被配置为仅中断某些类型的贮存操作。可以是可中断的数据贮存装置管理操作的示例包括编程操作、擦除操作、刷新操作、清扫或数据移动/重新定位操作等。在一个实施例中,可中断的贮存操作的类型基于服务质量要求、当前非易失性存储器装置120的工作量等。作为进一步的示例,中断模块304可以被配置为仅中断具有超过操作时间阈值的平均操作时间的贮存操作。在某些实施例中,中断模块304被配置为取回与介质装置相关联的服务质量参数,并且中断模块304可以基于服务质量参数来阻止贮存操作的中断。

在一个实施例中,中断模块304可以被配置为当中断贮存操作时启动中断计时器。中断计时器可以被用于标识该被中断的贮存操作应当何时被恢复。例如,恢复模块306可以在恢复该被中断的贮存操作之前等待中断计时器的到期,作为触发事件。

在一些实施例中,中断模块304当其中断贮存操作时标识贮存操作是否完成。例如,中断模块304在由中断频率指示的时间时启动验证步骤。如果验证步骤指示贮存操作完成,则中断模块304停止中断贮存操作,而是提供贮存操作成功的指示。否则,如果验证步骤指示贮存操作未完成,中断模块304继续暂停或中断贮存操作,并且提供指示中断的操作未完成的状态指示符(例如,1位值)。状态指示符可以在稍后当恢复贮存操作时由恢复模块306检验。在一些实施例中,当该被中断的贮存操作成功地完成时,非易失性存储器控制器124、贮存操作中断模块150、中断模块304和/或恢复模块306可以重置(reset)状态指示符位。在其他实施例中,可以响应于从非易失性存储器控制器124接收的中止(suspend)命令(例如,CMD FFh)或基于中断(interruption)频率而未完成的其它中断,来重置状态指示符位。

在某些实施例中,中断模块304在中断贮存操作之前检查可插入的贮存操作。如这里所使用的,“可插入的”或“可交织的”贮存操作是能够被插入到或交织到执行次序中、使得在另一贮存操作的中断期间执行可插入的贮存操作的另一贮存操作。在操作队列中的搁置的(pending)贮存操作可以基于其优先级、操作时间、服务质量要求、在一个或多个贮存单元和/或贮存元件123上的效应(effect)或其它特征而合格作为可插入的贮存操作。例如,中断模块304可以检验操作队列,以找到具有更高的优先级、更短的操作时间和/或更严格的服务质量要求的贮存操作。

如果中断模块304确定一个或多个合格的贮存操作在操作队列中搁置,则中断模块304中断贮存操作,以利于一个或多个合格的贮存操作。例如,中断模块304可以中断执行的贮存操作,并且当前一个贮存操作被中断时,介入(intervening)操作模块404可以执行一个或多个介入(可插入的)贮存操作。

否则,如果中断模块304确定没有合格的贮存操作在操作队列中搁置,则中断模块304可以制止中断该贮存操作。在一个实施例中,中断模块304可以检查在操作队列中的搁置的贮存操作的指示符。响应于指示符指示不存在搁置的贮存操作,中断模块304则可以制止中断贮存操作。

在另一实施例中,中断模块304总是可以基于由频率模块302确定的中断频率中断当前执行的贮存操作,并且恢复模块306和/或介入操作模块404可以检查在操作队列中的可插入的贮存操作。如果在操作队列中不存在可插入的贮存操作(例如,不存在具有更高的优先级、更短的操作时间和/或更严格的服务质量要求的搁置的贮存操作),则恢复模块306和/或介入操作模块404可以立即并且自动地恢复该被中断的贮存操作。

在一些实施例中,当操作被暂停、中断或中止时,中断模块304可以贮存与贮存操作的状态有关的状态信息。在其他实施例中,中断模块304可以向操作状态模块410发信号以贮存与被中断的贮存操作有关的状态信息。在一个实施例中,状态信息可以包括在贮存操作被中断的时间点在贮存操作中的位置。例如,状态信息可以标识在贮存操作中的编程步骤或擦除步骤。作为另一示例,状态信息可以标识贮存操作的循环计数和/或电压。

在另一实施例中,状态信息可以包括与贮存操作曾正操作的一个或多个页(逻辑页或物理页)有关的信息,例如在贮存操作被中断时由贮存操作编程的页(例如,较高页或较低页)的标识符。在其他实施例中,中断模块304可以贮存与被写入以用于编程贮存操作的数据有关的信息,以便于在稍后时间点更加快速地恢复贮存操作。

在一个实施例中,恢复模块306被配置为响应于触发而继续所暂停的贮存操作。在一些实施例中,触发包括以下中的一个或多个:接收恢复请求、满足自暂停执行贮存操作起的中断时间阈值、以及当贮存操作暂停时执行阈值数量(例如,介入操作阈值)的其它操作。在其他实施例中,触发可以从计数器模块408和/或从阈值模块412接收。在一个实施例中,恢复模块306可以通过发布恢复命令(例如,27h命令)而继续暂停的贮存操作。

在一些实施例中,恢复模块306响应于中断模块304中断贮存操作而检验贮存操作队列。如果恢复模块306没有识别到可插入的贮存操作,则恢复模块306可以立即恢复该被中断的贮存操作。否则,如果恢复模块306识别到可插入的贮存操作,则恢复模块306允许执行可插入的贮存操作,在此之后,恢复模块306可以恢复该被中断的贮存操作。在一个实施例中,可插入的贮存操作包括具有更高的优先级、更少的操作时间和更高的服务质量要求的任何贮存操作中的一个或多个。例如,如果编程贮存操作被中断、且读取贮存操作处在贮存操作队列中,恢复模块306可以等待读取操作完成,在此之后恢复模块306可以恢复中断的编程贮存操作。

在一些实施例中,恢复模块306自动地恢复贮存操作。相应地,用于恢复中断贮存操作的触发可以是自动产生的触发,诸如由中断计时器的到期或由介入操作计数器达到介入操作阈值而产生的触发。在其他实施例中,恢复模块306可以在恢复贮存操作之前等待恢复命令(例如,恢复请求)。因此,在一个实施例中,用于恢复该被中断的贮存操作的触发可以是从控制器接收的恢复命令。在又一个实施例中,恢复模块306可以响应于自动产生的触发而发送恢复命令。例如,恢复模块306可以响应于自动产生的触发(例如,中断计时器的到期或达到介入操作阈值)而产生27h恢复命令。

在某些实施例中,恢复模块306可以当介入贮存操作正在执行时接收触发。在一个实施例中,恢复模块306可以在恢复该被中断的贮存操作之前等待介入贮存操作完成。在另一实施例中,恢复模块306可以响应于接收触发而放弃介入贮存操作并且立即恢复该被中断的贮存操作。

在一些实施例中,恢复模块306在恢复贮存操作中可以从头重新开始贮存操作。在其他实施例中,恢复模块306恢复在中断的时间点的贮存操作。在其他实施例中,恢复模块306取回关于该被中断的贮存操作的状态信息以便于恢复贮存操作。状态信息可以涉及当操作被暂停、中断或中止时贮存操作的状态。在一个实施例中,状态信息指示中断的命令或操作将被恢复以完成中断的命令或操作的时间点。

恢复模块306使用状态信息可以在命令被中断的相同的阶段、时间点或时段恢复中断的贮存操作,可以以加快的方式进行之前执行的阶段等,使得恢复中断的贮存操作比重新开始该被中断的贮存操作更加高效。状态信息可以包括在中断之前完成的操作的多个步骤、阶段、时段或脉冲、操作将被恢复的步骤或阶段等。例如,用于擦除操作的状态信息可以包括恢复模块306可以用以恢复中断的擦除操作的脉冲持续时间、脉冲强度、微调(ratchet,棘齿)参数、误差容限等。在不可获得这样的状态信息的实施例中,因为已经被执行了步骤或阶段,所以之前执行的步骤或阶段可以以加快的或者加速的方式重新执行。在一个实施例中,状态信息可以包括在被中断的时间时的一个或多个贮存单元的当前状态。

在一些实施例中,恢复模块306可以当恢复该贮存操作时调节被中断的贮存操作的一个或多个参数。在一个实施例中,恢复模块306可以当恢复该被中断的贮存操作时将该被中断的贮存操作的长度延长超过未中断的贮存操作的长度。例如,恢复模块306可以使得调节贮存操作电压、电压步阶大小、在操作中的步阶的数量以便于延长该被中断的贮存操作。有益地,恢复模块306可以扩展非易失性存储器装置120的中断的贮存操作条件贮存介质。在另一实施例中,恢复模块306可以基于非易失性存储器装置120的服务质量要求来调节该被中断的贮存操作的参数。

在一个实施例中,当恢复该被中断的贮存操作时,恢复模块306递增中断计数器。中断计数器指示贮存操作已经被中断的次数。中断计数器可以被用于一旦已经达到中断计数阈值就阻止贮存操作的额外的中断。例如,中断模块304可以响应于中断计数器超过中断计数阈值而制止中断贮存操作。

在一个实施例中,恢复模块306通过初始地进行验证步骤而恢复该被中断的贮存操作。如果验证步骤指示贮存操作已经成功地完成,则恢复模块306可以终止贮存操作。否则,如果验证步骤指示贮存操作未完成,则恢复模块306可以继续贮存操作和/或重新开始贮存操作。在某些实施例中,恢复模块306可以检验指示该被中断的贮存操作是否是未完成的状态的状态指示符。如果状态指示符指示未完成的贮存操作,恢复模块30可以继续贮存操作和/或重新开始贮存操作。否则,如果状态指示符指示完成的贮存操作,则恢复模块306可以终止贮存操作。

图4示出了贮存操作中断模块150的另一个实施例。贮存操作中断模块150可以基本上类似于上述关于图1-3的贮存操作中断模块150。一般来说,如上所述,贮存操作中断模块150确定用于暂停贮存操作的频率,根据确定的频率来暂停贮存操作的执行,并且响应于触发而继续对贮存操作的暂停。在所示的实施例中,贮存操作中断模块包括频率模块302、中断模块304和恢复模块306。贮存操作中断模块还包括工作量模块402、调节模块406、计数器模块408、操作状态模块410、计数器模块408和阈值模块412。在一个实施例中,模块302-306和402-412可以例如通过数据通信总线可操作性地相互耦接。

在一个实施例中,工作量模块402被配置为标识与非易失性存储器装置120相关联的工作量。如上所述,与非易失性存储器装置120相关联的“工作量”指对非易失性存储器装置120进行的不同类型的贮存操作的数量、比率和/或百分比。在一个实施例中,非易失性存储器装置120的工作量可以由主要类型的贮存操作来特征化。例如,在读取密集的工作量中,由非易失性存储器装置120进行的读取贮存操作的量多于由非易失性存储器装置120进行的非读取贮存操作的量。作为另一示例,在编程密集的工作量中,由非易失性存储器装置120进行的编程贮存操作的量多于由非易失性存储器装置120进行的非编程贮存操作的量。

在一个实施例中,工作量模块402位于非易失性存储器控制器124中,并且将工作量信息发到频率模块302。频率模块302可以确定编程和/或擦除操作是否需要被划分为多个阶段以改善读取性能、和/或基于工作量的信息编程和/或擦除操作需要被划分为的阶段的数量。在另一实施例中,工作量模块402位于为被标识了相关联的工作量的非易失性存储器装置120上(例如,在存储器裸芯上)。在其他实施例中,工作量模块402可以是频率模块302的子模块。

在一些实施例中,与非易失性存储器装置120相关联的工作量被表达为比率,例如,读取贮存操作对非读取贮存操作的比率。在一个实施例中,工作量比率信息描述读取贮存操作对非读取贮存操作(例如,编程贮存操作和/或擦除贮存操作)的量或百分比。在另一实施例中,工作量比率可以描述对非易失性存储器装置120执行的编程操作对非编程操作的量或百分比。

在一些实施例中,工作量模块402使用多个计数器确定与非易失性存储器装置120相关联的工作量,每个计数器跟踪多个执行的特定类型的贮存操作。在一个实施例中,工作量使用加权平均数和/或移动(moving)平均数(其中更加新近的值被给予比更不新近的值更大的权重)被确定。可以周期性地更新工作量。在其他实施例中,工作量模块可以使用与多个计数器相关联的一个或多个计算器确定当前工作量比率和/或百分比。

有益地,工作量被用于基于非易失性存储器装置120的当前用量(例如,工作量)优化非易失性存储器装置120的性能。相应地,工作量模块402标识与非易失性存储器装置120相关联的工作量,并且将工作量指示符提供到贮存操作中断模块150的其它模块,工作量指示非易失性存储器装置120的当前用量。

在一些实施例中,工作量模块402向一个或多个的频率模块302指示当前非易失性存储器装置120的工作量,并且频率模块302基于工作量来调节贮存操作被中断的频率。在一个实施例中,频率模块302基于平均操作时间和工作量比率来确定中断频率。在其他实施例中,频率模块302可以指示阶段长度(例如,基于中断频率的、在后续的中断之间的阶段的以秒或以周期为单位的长度)和/或阶段的数量、以及基于工作量比率哪个贮存操作应该被分割。

例如,如果工作量比率包括在编程贮存操作上所花费的时间的百分比,并且工作量模块402向频率模块302指示工作量比率,该频率模块302可以基于工作量比率和平均操作时间来调节贮存操作的中断频率。在一个示例中,编程百分比可以是10%,并且平均编程贮存操作时间可以是1500μs,并且频率模块302可以指示编程操作(或其它非读取贮存操作)应该以等于编程百分比(例如,0.10)乘以平均编程贮存操作时间(例如,1500μs)的间隔(从而以等于150μs的间隔)被中止。在另外的示例中,编程百分比可以是50%,并且频率模块302可以指示较低的用于暂停贮存操作的频率,例如编程操作应该以等于编程百分比(例如,0.50)乘以平均编程贮存操作时间(例如,1500μs)的间隔(从而以等于750μs的间隔)而被中止。

在某些实施例中,如果工作量比率满足阈值(例如,工作量比率高于工作量阈值量、低于工作量阈值量、在预定范围中等),则频率模块302可以确定对贮存操作不进行中断。例如,在上述示例中,如果编程百分比为90%,频率模块302可以确定不中止编程贮存操作,因为当前非易失性存储器装置120的工作量是高度写入密集的(例如,工作量比率满足0.75的工作量阈值等)。相应地,通过根据当前工作量简档来调整用于暂停贮存操作的频率,贮存操作中断模块150可以基于工作量简档来定制和/或最优化非易失性存储器装置120的性能。

此外,通过将用于暂停贮存操作的频率调整到工作量简档,在某些实施例中,每秒的整体输入/输出(IOPS)性能可以是相同的,而不管贮存操作被划分为的阶段、分段和/或部分的数量。此外,在一个实施例中,由于更长的贮存操作(例如,编程/擦除贮存操作)被分成了各阶段,所以平均读取延迟可能降低。在某些实施例中,这可以通过当更长的贮存操作被划分为阶段时减少更长的贮存操作(例如,编程/擦除贮存操作)的感知的贮存操作时间来实现。在某些实施例中,由于每个阶段具有比整体贮存操作更短的长度,因此不阻止读取贮存操作以整体执行更长的贮存操作。此外,由于工作量变得更加读取密集的,因此阶段长度可能降低,从而减少读取操作的等待时间。一个缺点可能是非读取操作的整体时间的增加,但是,这可以是可控的,因为操作时间的增加可以是未中断的操作时间等的小百分比。

在一个实施例中,介入操作模块404被配置为当初始贮存操作被中断(例如,被暂停)时执行一个或多个介入贮存操作。在一些实施例中,介入操作模块404从包含一个或多个搁置的贮存操作的操作队列选择一个或多个介入贮存操作。在某些实施例中,介入操作模块404可以基于搁置的贮存操作阻止的一种类型的贮存操作的平均操作时间、搁置的贮存操作的优先级和/或搁置的贮存操作的服务质量要求,来选择一个或多个介入贮存操作。

在一些实施例中,介入操作模块404当初始贮存操作被暂停时执行高达阈值数量的介入贮存操作。在一个实施例中,介入操作模块404监控对非易失性存储器装置120执行的介入贮存操作的量,并且将执行的量与介入操作阈值比较。当达到介入操作阈值时,介入操作模块404则可以停止执行额外的介入贮存操作。

在某些实施例中,介入操作模块404执行来自操作队列的介入贮存操作直到中断计时器到期,中断计时器响应于中断模块304中断贮存操作而被启动。在一个实施例中,响应于中断计时器的到期,介入操作模块404可以允许执行的介入贮存操作完成,并且然后停止执行额外的介入贮存操作。在其他实施例中,响应于中断计时器的到期以及执行的介入贮存操作的完成,介入操作模块404可以向恢复模块306发信号以恢复该被中断的贮存操作。在一些实施例中,介入操作模块404阻止一个或多个介入贮存操作的中断。例如,介入贮存操作模块404可以提供表示执行的贮存操作是介入贮存操作并且不应被中断的指示符位。

在一个实施例中,调节模块406被配置为修改、调节和/或设置操作参数(例如,擦除参数、编程参数等)以用于恢复的贮存操作,将操作参数从默认的值改变,等等。操作参数可以包括可通过接口的方式修改的一组贮存单元的贮存操作的参数。操作参数可以涉及写入到或编程贮存单元、从贮存单元读取、擦除贮存单元、管理贮存单元和/或涉及用于贮存单元的另外的操作或过程。调节模块406可以将操作参数确定为绝对数据值、作为对数据值的偏移或调节、或者作为调节模块406可以用以配置用于一组贮存单元的贮存操作或过程的另外的参数。

如上所述,用于擦除贮存单元的操作参数(例如,擦除参数)的实施例可以包括:用于增量式的步阶脉冲擦除操作的电压电平步阶大小或幅度、用于增量式的步阶脉冲擦除操作的迭代或脉冲的最大数量(例如,循环计数)、用于擦除操作的擦除验证阈值电压电平、用于增量式的步阶脉冲擦除操作的初始偏置或开始擦除电压电平、用于增量式的步阶脉冲擦除操作的擦除脉冲持续时间、最大擦除电压等。

在某些实施例中,用于写入/编程贮存单元的操作参数(例如,编程参数)可以包括:用于增量式的步阶脉冲编程操作的电压电平步阶大小或幅度、用于增量式的步阶脉冲编程操作的迭代或脉冲的最大数量(例如,循环计数)、用于编程操作的编程验证阈值电压电平、用于增量式的步阶脉冲编程操作的初始偏置或开始编程电压电平、用于增量式的步阶脉冲编程操作的编程脉冲持续时间、最大编程电压等。

在一个实施例中,调节模块406可以当恢复贮存操作时调节使用的初始电压。例如,当恢复编程/擦除贮存操作时,调节模块406可以从被记录在用于编程/擦除贮存操作的状态信息中的值,降低用于编程/擦除操作的第一编程/擦除循环的初始编程/擦除电压。作为另一示例,当恢复编程/擦除贮存操作时,调节模块406可以从默认的初始编程/擦除电压升高用于编程/擦除操作的第一编程/擦除循环的初始编程/擦除电压。

在一些实施例中,当恢复该被中断的贮存操作时,调节模块406延长该被中断的贮存操作。例如,调节模块406可以通过调节用于操作的初始和/或和电压、调节用于贮存操作的电压步阶大小、调节用于贮存操作的步阶的数量、调节用于贮存操作的验证电压和/或调节用于贮存操作的步阶的持续时间,来延长中断的贮存操作。扩展的贮存操作则可以具有超过相同类型的默认的贮存操作(例如,其中不调节贮存操作的参数)的操作时间持续时间。

在某些实施例中,调节模块406可以被配置为确定和/或监控用于非易失性存储器装置120的贮存单元的使用阈值等,并且响应于满足使用阈值,将扩展的擦除操作施加到擦除块或其它组的贮存单元以重建贮存单元,并且另外可以施加默认的擦除操作。扩展的擦除操作可以使用比默认的擦除操作更低的验证电压、更低的初始电压,擦除操作的步骤之间的更小的差分电压、擦除操作的更长的脉冲持续时间等来操作,并且从而具有比默认的擦除操作更长的持续时间。扩展的擦除操作可以比默认的擦除操作更平和、更深和/或更慢,并且可以释放、解放或清空捕获的电子以便于重建贮存单元。

在一些实施例中,调节模块406调节恢复的贮存操作的一个或多个参数以便于遵守与恢复的贮存操作有关的服务质量要求。例如,如果编程操作的服务质量要求指示整体操作时间(包括由于中断而导致的延迟)必须在某个时间框和/或时间量中,调节模块406可以调节贮存操作的参数,以便于在某个时间框和/或时间量中完成贮存操作。在某些实施例中,调节模块406可以调节恢复的贮存操作的参数,以便于减少完成贮存操作的恢复的部分的时间。例如,调节模块406可以增加用于恢复的贮存操作的电压步阶大小、降低恢复的贮存操作的步阶的数量、增加/降低恢复的贮存操作的验证电压、增加恢复的贮存操作的初始电压和/或降低用于恢复的贮存操作的步骤持续时间。

在一个实施例中,计数器模块408被配置为跟踪在该贮存操作被中断时执行的介入其它贮存操作的数量。例如,计数器模块408可以在每次介入贮存操作被执行和/或完成时递增计数器。在某些实施例中,计数器模块408可以将在贮存操作的中断期间执行的介入贮存操作的数量与介入操作阈值(例如,可允许的介入贮存操作的阈值数量)比较。在其他实施例中,计数器模块408可以向恢复模块306指示何时达到介入操作阈值,并且恢复模块306可以自动地恢复中断贮存操作。

在一些实施例中,计数器模块408还被配置为跟踪在贮存操作中完成的循环、步骤或周期的数量。在其他实施例中,计数器模块408可以标识等于贮存操作的阶段长度的分段、循环、步骤或周期的量,并且基于中断频率将贮存操作划分为多个阶段。计数器模块408可以将完成的分段、循环、步骤或周期的当前数量与等于阶段长度的分段、循环、步骤或周期的标识的数量比较,并且指示何时达到分段、循环、步骤或周期的标识的数量(因此,当贮存操作的执行已经到达阶段的结尾处时)。

在一些实施例中,计数器模块408还被配置为跟踪给定贮存操作已经被中断的次数。例如,计数器模块408在每次贮存操作被中断时递增。在某些实施例中,计数器模块408可以将贮存操作已经被中断的次数与中断计数阈值比较。响应于达到中断计数阈值,计数器模块408可以向中断模块304发信号以阻止贮存操作的进一步中断。

在一个实施例中,计数器模块408被配置为响应于中断该贮存操作的执行启动中断计时器。在某些实施例中,计数器模块408可以从预定时间值倒数计数或者可以正数计数到预定中断时间阈值,中断时间阈值指定从暂停(中断)贮存操作的执行开始的最大时间量。在一些实施例中,计数器模块408以秒、毫秒和/或微秒方式跟踪时间。例如,计数器模块408可以可通信地耦接到存储器裸芯所使用的时钟频率。在其他实施例中,计数器模块408以贮存操作周期(诸如,编程/擦除循环或步骤)的方式跟踪时间。

在一个实施例中,计数器模块408当检测到贮存操作已经被中断时自动地启动中断计时器。在另一实施例中,计数器模块408响应于来自中断模块304的信号启动计时器。当中断计时器的到期(例如,倒数计数到零或者正数计数到中断时间阈值)时,计数器模块408可以触发恢复模块306,并且响应于该触发恢复模块306自动地恢复被中断的贮存操作。在某些实施例中,中断计时器可以当介入贮存操作正对非易失性存储器装置120执行时到期。相应地,计数器模块408可以在向恢复模块发信号以恢复该被中断的贮存操作之前等待介入贮存操作完成。

在一个实施例中,操作状态模块410被配置为贮存与中断的贮存操作有关的状态信息。可以当运行贮存操作时,例如在非易失性存储器控制器124处或对非易失性存储器装置120的组件处跟踪与贮存操作有关的状态信息,使得当贮存操作被中止时,状态信息可以被保留以用于恢复贮存操作。状态信息可以被贮存在非易失性贮存器中,使得该信息在掉电的事件中被保留。

在一个实施例中,状态信息包括位置信息——诸如在贮存操作被中断的时间点处在贮存操作中的位置。例如,状态信息可以标识贮存操作中的编程步骤或擦除步骤。这样的信息还可以包括、但不限于,步骤计数、脉冲持续时间、脉冲幅度和步阶幅度。

在另一实施例中,状态信息可以包括与贮存操作正在操作的一个或多个页(逻辑页或物理页)有关的信息。例如,操作状态模块410可以贮存对应于非易失性存储器介质122被擦除的地址和/或在贮存操作被中断时由贮存操作编程的页(例如,较高页或较低页)的标识符。在其他实施例中,操作状态模块410可以贮存与被写入以用于编程贮存操作的数据有关的信息,使得恢复模块306可以在稍后的时间点更加快速地恢复贮存操作。

在一些实施例中,操作状态模块410被配置为响应于中断模块304中断该编程/擦除贮存操作而贮存用于编程/擦除贮存操作的状态信息。在某些实施例中,操作状态模块410将状态信息保存到在与存储器芯片相同的裸芯上的缓存器或寄存器。在一些实施例中,操作状态模块410将状态信息提供到恢复模块306以用于恢复该被中断的贮存操作。

在一个实施例中,如上参照图3和4所述,阈值模块412被配置为贮存与中断贮存操作有关的一个或多个阈值。例如,阈值模块412可以贮存操作时间阈值、中断计数阈值、中断时间阈值、介入操作阈值和/或工作流阈值。在一个实施例中,阈值模块412将一个或多个阈值贮存在非易失性存储器装置120的一个或多个寄存器中。在一些实施例中,阈值模块412还被配置为将在计数器中的值与阈值比较,并且指示该值是否超过阈值。例如,阈值模块412可以将由计数器模块408保持的计数与阈值模块412贮存的一个或多个阈值比较。

图5示出了根据本公开的实施例的多个贮存操作框图500、520、540、560和580。贮存操作框图500将第一编程贮存操作的进程示出为多个操作步骤501-511。如所述,编程贮存操作从第四编程循环开始在每个编程循环之后包括验证步骤,在第六编程循环之后,编程贮存操作成功地完成(例如,通过验证步骤)。操作步骤501表示闲置步骤,其中没有数据被编程到非易失性贮存介质122。操作步骤502-505、507和509是编程步骤,每个编程操作步骤与循环计数(例如,1-6)和编程电压相关联。在编程操作步骤502处,循环计数等于“1”并且编程电压等于初始电压“VPR”。编程操作步骤503,循环计数被递增,并且编程电压被增加到“VPR+ΔVPR”的值。

之后的编程操作步骤504和505类似地递增循环计数和编程电压。操作步骤506是验证步骤,其中编程的存储器单元的值被读取并且将其与期望的值比较。如所述,读取的值不等于期望的值,并且因此编程贮存操作继续编程操作步骤507,其中循环计数和编程电压相比于编程步骤505而递增。再次,写入的值在验证操作步骤508处被验证,但是如所示,编程贮存操作还未成功。相应地,编程贮存操作继续编程操作步骤509,其中循环计数和编程电压或两者相比于编程步骤507递增。再一次,写入的值在验证操作步骤510处被验证。这次,如所述,读取的值等于期望的值,并且编程操作已经成功完成。编程贮存操作通过闲置步骤511结束。

贮存操作框图520将第二编程贮存操作的进程示出为多个操作步骤521-533。如所述,编程贮存操作从第四编程循环开始在每个编程循环之后包括验证步骤(例如,验证步骤528、530和532),编程贮存操作在第六编程循环之后成功地完成(例如,通过验证步骤)。但是,这里,由中断模块304根据中断频率使用控制器级命令(例如,FFh命令)中断编程贮存操作。FFh命令发生在正进行的擦除脉冲完成之前(例如,第三擦除脉冲),并且因此循环计数不被递增,并且擦除电压被贮存为没有对于当前循环的“ΔVPR”,如所示。

操作步骤521表示闲置步骤,其中没有数据被编程到非易失性贮存介质122。操作步骤522-524、526-527、529和531是编程步骤,每个编程操作步骤与循环计数(例如,1-6)和编程电压相关联。在编程操作步骤522处,循环计数等于“1”,并且编程电压等于初始电压“VPR”。编程操作步骤523,循环计数被递增,并且编程电压被增加到“VPR+ΔVPR”的值。

在操作步骤524处(编程操作步骤),循环计数被递增,并且编程电压被增加到“VPR+2ΔVPR”的值。但是,由于该的中止命令“FFh”(操作步骤525)在编程操作步骤524完成之前被接收。相应地,编程贮存操作的状态被贮存为循环计数等于“2”并且编程电压为“VPR+ΔVPR”。

在操作步骤526处,编程贮存操作使用之前贮存的状态信息(例如,循环计数等于“2”并且编程电压为“VPR+ΔVPR”)恢复。稍后的编程操作步骤527、529和531递增循环计数和编程电压,其中验证步骤528、530和532在每一个各自的编程步骤之后。如所述,在编程步骤531之后,编程的值被成功地验证(例如,通过验证步骤532),并且编程操作已经成功地完成。编程贮存操作通过闲置步骤533结束。

贮存操作框图540将第一擦除贮存操作的进程示出为多个操作步骤541-554。如所述,擦除贮存操作从第四擦除循环开始在每个擦除循环之后包括验证步骤(例如,验证步骤548、550和553),擦除贮存操作在第六擦除循环之后成功地完成(例如,通过验证步骤)。但是,这里,擦除贮存操作在芯片级处。以基于中断频率的间隔被中断模块304直接地(例如,没有FFh命令)中断,该中断频率例如基于指示操作每两个循环被中止的、被设置为“2”的中断参数。不同于之前的编程贮存操作,中断模块304在正进行的擦除脉冲完成之后中断擦除操作,如所示。

操作步骤541表示闲置步骤,其中没有数据从非易失性贮存介质122中被擦除。操作步骤542-543、545-546、549和551是擦除步骤,每个擦除操作步骤与循环计数(例如,1-6)和擦除电压相关联。在擦除操作步骤542处,循环计数等于“1”,并且擦除电压等于初始电压“VER”。在擦除操作步骤543处,循环计数被递增,并且擦除电压被增加到“VER+ΔVER”的值。

在操作步骤544、即中断步骤处,擦除操作被暂停并且擦除贮存操作的状态被贮存为循环计数等于“2”,并且擦除电压为“VPR+ΔVPR”。擦除贮存操作在操作步骤545处恢复,从之前贮存的状态信息递增循环计数和擦除电压(例如,步骤545具有循环计数等于“3”并且擦除电压为“VPR+2ΔVPR”)。之后的擦除操作步骤546、549和551递增循环计数并且擦除电压。验证步骤548、550和553将读取值与期望的值比较以确定擦除操作是否已经成功的完成。如所述,在擦除步骤546和551之后,擦除操作被中断模块304再次中断(操作步骤547和552)。注意,一旦擦除操作开始验证被擦除的值,擦除操作通过验证步骤(操作步骤548和553)而恢复。在第六擦除步骤(操作步骤551)之后,擦除操作被成功地验证(例如,通过验证步骤553)。擦除贮存操作通过闲置步骤554结束。

贮存操作框图560将第二擦除贮存操作的进程示出为多个操作步骤561-571。如所述,擦除贮存操作从第四擦除循环开始在每个擦除循环之后包括验证步骤(例如,验证步骤568和570),擦除贮存操作在第五擦除循环之后成功地完成(例如,通过验证步骤)。再次,擦除贮存操作在芯片级处以基于中断频率的间隔被中断模块304直接地(例如,没有FFh命令)中断,该中断频率例如基于指示该操作每两个循环被中止的参数。不同于之前的编程贮存操作,中断模块304在正进行的擦除脉冲完成之后中断擦除操作,如所示。

操作步骤561表示闲置步骤,其中没有数据从非易失性贮存介质122中被擦除。操作步骤562-563、565-566和569是擦除步骤,每个擦除操作步骤与循环计数(例如,1-5)和擦除电压相关联。在擦除操作步骤562处,循环计数等于“1”并且擦除电压等于初始电压“VER”。在擦除操作步骤563处,循环计数被递增,并且擦除电压被增加到“VER+ΔVER”的值。

在操作步骤564处(中断步骤),擦除操作被暂停并且擦除贮存操作的状态被贮存为循环计数等于“2”并且擦除电压为“VPR+ΔVPR”。在操作步骤565处,擦除贮存操作恢复,从之前贮存的状态信息递增循环计数和擦除电压(例如,步骤565具有循环计数等于“3”并且擦除电压为“VPR+2ΔVPR”)。之后的擦除操作步骤566和569递增循环计数和擦除电压。验证步骤568和570将读取值与期望的值比较以确定擦除操作是否已经成功的完成。如所述,在擦除步骤566之后,擦除操作再次被中断模块304中断(操作步骤567)。注意,一旦擦除操作开始验证擦除的值,擦除操作以验证步骤恢复(操作步骤568)。在第五擦除步骤(操作步骤569)之后擦除操作被成功地验证(例如,通过验证步骤570)。擦除贮存操作通过闲置步骤571结束。注意,这里擦除操作在中断模块304第三次暂停操作之前成功地完成。

贮存操作框图580将第二擦除贮存操作的进程示出为多个操作步骤581-595。如所述,擦除贮存操作从第四擦除循环开始在每个擦除循环之后包括验证步骤(例如,验证步骤589、592和594),擦除贮存操作在第六擦除循环之后成功地完成(例如,通过验证步骤)。再次,擦除贮存操作在芯片级处以基于中断频率的间隔被中断模块304直接地(例如,没有FFh命令)中断,该中断频率例如基于指示该操作每两个循环被中止的参数。此外,在贮存操作框图580中,接收到控制器级中断命令(例如,FFh命令),但是不是来自中断模块304。类似于之前的编程贮存操作,FFh命令在进行的擦除脉冲完成之前中断擦除操作,如所示。

操作步骤581表示闲置步骤,其中没有数据从非易失性贮存介质122中被擦除。操作步骤582-583、585-586、588、590和593是擦除步骤,每个擦除操作步骤与循环计数(例如,1-6)和擦除电压相关联。在擦除操作步骤582处,循环计数等于“1”并且擦除电压等于初始电压“VER”。在擦除操作步骤583处,循环计数被递增,并且擦除电压被增加到“VER+ΔVER”的值。

在操作步骤584处(中断步骤),中断模块304暂停擦除操作并且擦除贮存操作的状态被贮存为循环计数等于“2”并且擦除电压为“VPR+ΔVPR”。擦除贮存操作在操作步骤585处恢复,从之前贮存的状态信息递增循环计数和擦除电压(例如,步骤585具有循环计数等于“3”并且擦除电压为“VPR+2ΔVPR”)。擦除操作步骤586还递增循环计数和擦除电压,但是,在操作步骤586完成之前接收中止命令“FFh”(操作步骤587)。相应地,擦除贮存操作的状态被贮存为循环计数等于“4”并且擦除电压为“VPR+3ΔVPR”。

由于操作步骤586没有完成,擦除贮存操作使用之前贮存的状态信息在操作步骤588处恢复(例如,循环计数等于“2”并且编程电压为“VPR+ΔVPR”)。之后的编程操作步骤590和593递增循环计数和编程电压。

验证步骤589、592和594将读取值与期望的值比较以确定擦除操作是否已经成功的完成。如所述,在擦除步骤590之后,擦除操作再次被中断模块304中断(操作步骤591)。注意,在所示的实施例中,当接收到FFh命令时,由中断模块304中断的时间被重置,并且中断模块304在操作步骤590之后暂停擦除操作(例如,在从FFh命令恢复之后的两个循环计数)。还应注意,一旦擦除操作开始验证擦除的值,擦除操作通过验证步骤恢复(操作步骤592)。在第六擦除步骤(操作步骤593)之后,擦除操作被成功地验证(例如,通过验证步骤594)。擦除贮存操作通过闲置步骤595结束。注意,这里擦除操作在中断模块304第三次暂停操作之前成功地完成。

图6示出了根据本公开的实施例的的用于一致性能的中断贮存操作的方法600。方法600开始,并且中断模块304接收602贮存操作多频繁将会被中断的频率的指示符。在一个实施例中,中断模块304从频率模块302接收602指示符,其中频率模块302确定中断贮存操作的频率。在各种实施例中,用于接收贮存操作多频繁将会被中断的频率的指示符的构件(means),可以包括频率模块302、贮存操作中断模块150、非易失性存储器控制器124、非易失性存储器介质控制器126、SML 130、其它逻辑硬件和/或贮存在计算机可读的贮存介质上的其它可执行的代码。其它实施例可以包括类似的或等价的用于接收贮存操作多频繁将会被中断的频率的指示符的构件。

中断模块304基于接收的指示符中断604贮存操作的执行一次或多次。在一个实施例中,中断604贮存操作的执行包括中断模块304根据该确定的频率暂停贮存操作。在各种实施例中,用于基于接收的指示符中断贮存操作的执行一次或多次的构件可以包括中断模块304、贮存操作中断模块150、非易失性存储器控制器124、非易失性存储器介质控制器126、SML 130、其它逻辑硬件和/或贮存在计算机可读的贮存介质上的其它可执行的代码。其它实施例可以包括类似的或等价的用于基于接收的指示符中断贮存操作的执行一次或多次的构件。

在该贮存操作被中断时,介入操作模块404对贮存元件执行606一个或多个其它贮存操作。方法600结束。在一些实施例中,在该贮存操作被中断时,介入操作模块404执行606达阈值数量的介入贮存操作。在各种实施例中,用于在该贮存操作被中断时执行一个或多个其它贮存操作的构件可以包括介入操作模块404、贮存操作中断模块150、非易失性存储器控制器124、非易失性存储器介质控制器126、SML 130、其它逻辑硬件和/或贮存在计算机可读的贮存介质上的其它可执行的代码。其它实施例可以包括类似的或等价的用于在该贮存操作被中断时执行达阈值数量的介入贮存操作的构件。

图7示出了根据本公开的实施例的用于一致性能的中断贮存操作的方法700。方法700开始,并且中断模块304接收702贮存操作多频繁将被中断的中断指示符。在一个实施例中,中断模块304从频率模块302接收702中断指示符,并且频率模块302确定中断贮存操作的频率。在各种实施例中,用于接收贮存操作多频繁将被中断的中断指示符的构件可以包括频率模块302、贮存操作中断模块150、非易失性存储器控制器124、非易失性存储器介质控制器126、SML 130、其它逻辑硬件和/或贮存在计算机可读的贮存介质上的其它可执行的代码。其它实施例可以包括类似的或等价的用于接收贮存操作多频繁将会被中断的频率的指示符的构件。

计数器模块408计数704在贮存操作的执行期间完成的贮存操作分段的数量。在各种实施例中,用于计数在贮存操作的执行期间完成的贮存操作分段的数量的构件可以包括中断模块304、恢复模块306、介入操作模块404、计数器模块408、贮存操作中断模块150、非易失性存储器控制器124、非易失性存储器介质控制器126、SML 130、其它逻辑硬件和/或贮存在计算机可读的贮存介质上的其它可执行的代码。其它实施例可以包括类似的或等价的用于计数在贮存操作的执行期间完成的贮存操作分段的数量的构件。

计数器模块408基于中断指示符确定706完成的分段的数量是否匹配在中断之间将被执行的分段的期望的数量。在一个实施例中,频率模块302基于中断指示符确定分段长度,并且分段长度指示在中断之间将被执行的分段的期望的数量。在各种实施例中,用于基于中断指示符确定完成的分段的数量是否匹配在中断之间将被执行的分段的期望的数量的构件可以包括中断模块304、计数器模块408、阈值模块412、贮存操作中断模块150、非易失性存储器控制器124、非易失性存储器介质控制器126、SML 130、其它逻辑硬件和/或贮存在计算机可读的贮存介质上的其它可执行的代码。其它实施例可以包括类似的或等价的用于基于中断指示符来确定完成的分段的数量是否匹配在中断之间将被执行的分段的期望的数量的构件。

如果基于中断指示符完成的分段的数量不匹配分段的期望的数量,则计数器模块408继续计数704在贮存操作的执行期间完成的分段的数量。否则,如果基于中断指示符完成的分段的数量匹配分段的期望的数量,中断模块304中断708贮存操作的执行一次或多次。

在某些实施例中,中断708贮存操作的执行包括操作状态模块410贮存与该被中断的贮存操作有关的状态信息。在一个实施例中,状态信息可以包括在中断贮存操作之前在贮存操作中上一次完成的编程步骤或擦除步骤。在各种实施例中,用于基于接收的指示符中断贮存操作的执行一次或多次的构件可以包括中断模块304、贮存操作中断模块150、非易失性存储器控制器124、非易失性存储器介质控制器126、SML 130、其它逻辑硬件和/或贮存在计算机可读的贮存介质上的其它可执行的代码。其它实施例可以包括类似的或等价的用于基于接收的指示符中断贮存操作的执行一次或多次的构件。

中断模块304提供710该被中断的贮存操作是否在未完成的状态中的状态指示符。在一些实施例中,提供710状态指示符包括在与该被中断的贮存操作相关联的寄存器中设置位值。在一个实施例中,与该被中断的贮存操作相关联的寄存器可以位于执行该被中断的贮存操作的存储器裸芯上。在各种实施例中,用于提供该被中断的贮存操作是否在未完成的状态的状态指示符的构件可以包括中断模块304、操作状态模块410、贮存操作中断模块150、非易失性存储器控制器124、非易失性存储器介质控制器126、SML 130、其它逻辑硬件和/或贮存在计算机可读的贮存介质上的其它可执行的代码。其它实施例可以包括类似的或等价的用于提供该被中断的贮存操作是否在未完成的状态的状态指示符的构件。

在该贮存操作被中断时,介入操作模块404对贮存元件执行712一个或多个其它贮存操作。在一些实施例中,计数器模块408跟踪在该贮存操作被中断时对贮存装置执行712的其它(介入)贮存操作的量。在各种实施例中,用于在该贮存操作被中断时执行一个或多个其它贮存操作的构件可以包括介入操作模块404、贮存操作中断模块150、非易失性存储器控制器124、非易失性存储器介质控制器126、SML 130、其它逻辑硬件和/或贮存在计算机可读的贮存介质上的其它可执行的代码。其它实施例可以包括类似的或等价的用于在该贮存操作被中断时执行达阈值数量的介入贮存操作的构件。

计数器模块408确定714执行的其它贮存操作的数量是否等于介入操作的预定数量(例如,介入操作阈值)。在各种实施例中,用于确定执行的其它贮存操作的数量是否等于介入操作的预定数量的构件可以包括恢复模块306、介入操作模块404、计数器模块408、阈值模块412、贮存操作中断模块150、非易失性存储器控制器124、非易失性存储器介质控制器126、SML 130、其它逻辑硬件和/或贮存在计算机可读的贮存介质上的其它可执行的代码。其它实施例可以包括类似的或等价的用于确定执行的其它贮存操作的数量是否等于介入操作的预定数量的构件。

如果执行的其它贮存操作的数量不等于预定数量,则介入操作模块404对贮存元件执行712一个或多个其它贮存操作。否则,如果执行的其它贮存操作的数量等于预定数量,则恢复模块306确定716状态指示符是否示出该被中断的贮存操作在未完成的状态中。

在一些实施例中,确定716状态指示符是否示出该被中断的贮存操作是未完成的包括从贮存与该被中断的贮存操作有关的状态信息的寄存器读取位值。在各种实施例中,用于确定状态指示符是否示出该被中断的贮存操作在未完成的状态中的构件可以包括恢复模块306、操作状态模块410、贮存操作中断模块150、非易失性存储器控制器124、非易失性存储器介质控制器126、SML 130、其它逻辑硬件和/或贮存在计算机可读的贮存介质上的其它可执行的代码。其它实施例可以包括类似的或等价的用于确定状态指示符是否示出该被中断的贮存操作在未完成的状态中的构件。

如果该被中断的贮存操作在未完成的状态中,则调节模块406调节718该被中断的贮存操作的参数,恢复模块306恢复720该被中断的贮存操作,并且工作量模块402基于贮存元件的工作量调节722中断指示符。否则,如果该被中断的贮存操作在完成的状态中,则工作量模块402基于贮存元件的工作量调节722中断指示符。

在一些实施例中,调节718该被中断的贮存操作的参数包括调节该被中断的贮存操作的初始电压、电压步阶、多个步阶和步阶持续时间中的一个或多个。在一个实施例中,调节模块406调节718该被中断的贮存操作的一个或多个参数以延长或增长该被中断的贮存操作的剩余部分的整体操作时间(例如,相比于相同类型的未调节的贮存操作)。在另一实施例中,调节模块406调节718该被中断的贮存操作的一个或多个参数以满足用于与该被中断的贮存操作相同类型的贮存操作的服务质量要求。在各种实施例中,用于调节该被中断的贮存操作的参数的构件可以包括调节模块406、贮存操作中断模块150、非易失性存储器控制器124、非易失性存储器介质控制器126、SML 130、其它逻辑硬件和/或贮存在计算机可读的贮存介质上的其它可执行的代码。其它实施例可以包括类似的或等价的用于调节该被中断的贮存操作的参数的构件。

在一些实施例中,恢复720该被中断的贮存操作包括取回用于该被中断的贮存操作的状态信息。在一个实施例中,恢复720该被中断的贮存操作包括在贮存操作被中断的时间点(例如,步骤、分段、循环、脉冲)继续该被中断的贮存操作。在另一实施例中,恢复一些20中断的贮存操作包括在开始时间点的贮存操作处重新开始该被中断的贮存操作。在某些实施例中,恢复720该被中断的贮存操作包括进行验证步骤、或在作为贮存操作的一部分而施加电压之前的操作(例如,编程贮存操作或擦除贮存操作)。在各种实施例中,用于恢复该被中断的贮存操作的构件可以包括恢复模块306,贮存操作中断模块150、非易失性存储器控制器124、非易失性存储器介质控制器126、SML 130、其它逻辑硬件和/或贮存在计算机可读的贮存介质上的其它可执行的代码。其它实施例可以包括类似的或等价的用于恢复该被中断的贮存操作的构件。

在一些实施例中,基于贮存元件的工作量调节722中断指示符包括工作量模块402监控多个读取操作和多个非读取贮存操作(例如,编程操作和/或擦除操作),并且确定包含读取操作对非读取操作的比率的工作量比率,并且用于一个或多个后续的贮存操作的中断指示符可以基于工作量比率。在各种实施例中,用于基于贮存元件的工作量调节中断指示符的构件可以包括工作量模块402、贮存操作中断模块150、非易失性存储器控制器124、非易失性存储器介质控制器126、SML 130、其它逻辑硬件和/或贮存在计算机可读的贮存介质上的其它可执行的代码。其它实施例可以包括类似的或等价的用于基于贮存元件的工作量调节中断指示符的构件。

尽管在这里描述了多个实施例,至少一些该实施例促进用于电子的贮存装置的编程中止/恢复操作和擦除中止/恢复操作。换句话说,在非易失性存储器装置120处处理的编程操作或擦除操作(或其它等同物)可以被暂时地或者永久地中止,以便于允许在非易失性存储器装置120处将被处理的一个或多个其他存储器访问操作(例如,读取、部分编程、部分擦除等)。

如这里所使用的,术语“编程操作”包括对非易失性存储器装置120存留值(数字的或模拟的)、或存留表示值的状态的任何贮存操作。其它编程(或等同物)操作的一些示例包括但不限于,对非易失性存储器装置120烧制、贮存、写入和设置持久性的值。这里对编程操作的引用包括其它等同物或类似操作。如这里所使用的,术语“擦除操作”包括对非易失性存储器装置120移除值(数字的或模拟的)或者重置表示值的状态的任何贮存操作。这里对擦除操作的引用包括其它其它等同物或类似操作。

可以在不脱离其精神和实质特征的情况下,以其他特定的形式实现本公开。该实施例在所有方面仅应被认为是示意性的而不是限制性的。因此,本公开的范围由所附权利要求而不是前述说明指示。属于权力要求的等同物的含义和范围的所有改变应包含在其范围中。

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