在闪存设备中获得均匀的磨损调整的系统和方法

文档序号:6750738阅读:224来源:国知局
专利名称:在闪存设备中获得均匀的磨损调整的系统和方法
技术领域
本发明涉及闪存,更具体来说,涉及一种用于在闪存介质中获得均匀的磨损调整的系统和方法。
背景闪存设备对于大量的应用程序具有许多优点。这些优点包括它们的非易失性、速度、易于擦除和重新编程,物理尺寸小以及相关的因素。没有机械移动部件,因此,这样的系统不会遇到硬盘存储系统常常遇到的那些类型的故障。
然而,闪存设备内的区块,就它们可以被重新编程或擦除的次数而言,其生存期是有限的。闪存设备的操作方式通常是,首先将可擦除的区块中的所有存储单元擦除到一种通用状态,然后将它们重新编程到所需要的新状态。随着存储单元被转动的周数到达几万,它开始需要更多电压和/或时间编程和擦除存储单元。这是因为在重复的编程擦除周期内在相应的门和隧道绝缘层电子被捕获。在一定周数之后,被捕获的电子的数量开始改变存储单元的操作特征。在某些时候,在十万或更多周数之后,需要更多的电压或时间来进行编程或擦除存储单元,或执行两种操作,要想继续使用就不切实际了。存储单元的寿命在此时结束。闪存设备的这种有限的寿命特征是人所共知的。
闪存、闪存控制器和使用闪存设备的计算机设备的许多制造商,试图通过复杂的磨损调整技术和算法最大限度地提高闪存设备的使用寿命。它们常常试图检测使用太频繁的区块,并将它们与那些使用不太频繁的区块组进行交换。这样做是为了避免这样的情况存储器设备上的一组区块很快到达其使用寿命,而其他区块还有较长的使用寿命剩下。除了实现起来非常复杂之外,用于调整磨损的大多数算法最终不能够在闪存设备的整个生存期内获得“完美的”磨损调整。结果,闪存设备的实际寿命常常比其潜在的寿命短得多。

发明内容
下面将描述用于在闪存介质中获得均匀的磨损调整的系统和方法。在描述的一个实施例中,一种系统支持具有可寻址的位置的闪存。该系统使用一种压缩工具,该压缩工具定期在以区块方式组织的闪存位置的循环序列中向前移动,并在它在存储器位置中向前移动时清除区块。
在描述的另一个实施例中,一种系统使用一种写入指针,该指针在闪存位置的循环序列中向前移动。在写入指针向前移动之后,写入指针指出可用于接收数据的一个或多个存储器位置。
因此,描述的实施例介绍了以循环的方式组织闪存介质的广泛概念,在此,清除和写入操作以连续而重复的循环方式处理,以在整个闪存介质中获得均匀的磨损调整。


下面将参考附图进行详细的说明。在图中,引用号码的最左边的数字标识引用号码在其中首次出现的图。
图1说明了NAND闪存介质的逻辑表示。
图2说明了NOR闪存介质的逻辑表示。
图3说明了使用一个或多个闪存设备来存储信息的计算机设备的相关组件。
图4说明了闪存抽象逻辑的方框图。
图5说明了闪存介质逻辑的示范方框图。
图6A显示了用于存储逻辑扇区地址和物理扇区地址之间的对应关系的数据结构。
图6B显示了与图6B中的数据结构相同的数据结构,只不过其内容已经更新。
图7说明了用于当文件系统向闪存驱动程序发出写入请求时跟踪闪存介质上的数据的过程。
图8说明了保护诸如如图6A和6B中所示的数据结构之类的易失性数据结构中存储的逻辑到物理扇区地址信息的映射的过程。
图9说明了逻辑扇区地址可以存储以便防止电源故障的闪存介质内的位置。
图10说明了用于跟踪闪存介质中存储的数据的动态查询数据结构。
图11说明了动态地分配用于跟踪闪存介质上的数据的查询数据结构的过程。
图12是被闪存驱动程序作为连续的圆周看待的闪存介质的示意图。
图13描述了作为连续圆周看待的介质的另一个图表。
图14说明了被扇区管理器用来确定闪存驱动程序在介质上存储数据的下一个可用的空闲扇区位置的过程。
图15说明了作为连续圆周看待的介质的另一个视图。
图16是说明了被压缩工具用来回收扇区的过程的流程图。
图17显示了图16中说明的过程的一个示范结果。
图18说明了为更好地支持闪存驱动程序实现的过程和技术划分的NOR闪存介质的逻辑表示。
具体实施例方式
下面的讨论针对闪存驱动程序。下面将有针对性地对主题进行描述以满足法定的要求。然而,描述本身不仅限于本专利的范围。发明人认为权利要求书所述的主题还可以以其他方式实施,以与其他当前或未来的技术一起包括不同的元素或类似于本文档中描述的元素的元素的组合。
概述本讨论假设读者熟悉闪存介质的基本操作原理。虽然如此,还是提供了对两种常见的非易失性随机存取存储器—NAND和NOR闪存介质—的一般介绍,以便更好地理解此处描述的示范实施例。之所以选择这两个示例闪存介质,是因为它们当前比较流行,但对它们的描述不仅将所描述的实施例限于这些类型的闪存介质。其他以电的方式可擦除的和可编程的只读存储器(EEPROM)也行。为便于说明,在本详细描述中使用的大多数示例中,数据结构中显示的数字是十进制格式。
通用闪存介质操作特征图1和图2分别说明了示例NAND和NOR闪存介质100、200的逻辑表示。两种介质分别具有对每一种介质通用的操作特征,不管制造商是谁。例如,请参看图1,NAND闪存介质通常分为相邻的区块(0、1到N)。每一个区块0、1、2等等进一步细分为K个扇区102。标准商业性NAND闪存介质通常每个区块都包含8、16或32个扇区。然而,制造商不同,区块和扇区的数量也会不同。某些制造商将扇区”称为“页”。此处使用的两个术语是等效的,并可互换。
每一个扇区102进一步被分成两个不同的部分,用于存储信息的数据区域103,和用于存储诸如错误纠正代码(ECC)之类的多余信息的备用区域104。数据区域103的大小通常为512字节,但是随着制造商的不同,也可能多一些,也可能少一些。采用512个字节时,闪存介质可使大多数文件系统将该介质作为诸如固定磁盘(硬盘)之类的非易失性存储器设备对待。此处使用的RAM通常是指诸如DRAM、SRAM、VRAM、VDO等等之类的随机存取存储器系列。通常,备用区域104的大小为16字节,用于NAND闪存介质设备的多余信息存储。此外,也可以选择其他大小,可以稍大一些,也可以稍小一些。在大多数情况下,备用区域104用于存储错误纠正代码和状态信息。
NOR存储器介质200与NAND存储器介质不同的是,区块不细分为物理扇区。与RAM相似的是,NOR存储器介质的区块内存储的每一个字节是可分别寻址的。然而,在实际中,NOR存储器介质上的区块可以从逻辑上细分为物理扇区,并附带备用区域。
除总体布局和操作比较以外,闪存设备的某些通用电学特征(此处也被称为“存储器要求”或“规则”)可以概述如下
1.对扇区的写入操作可以将单个位从逻辑“1”更改为逻辑“0”,但不能将逻辑“0”更改为逻辑“1”(下面的第2种情况除外);2.擦除一个区块会将该区块中的所有位设置为逻辑“1”;3.在没有擦除一个区块内的所有扇区/字节的情况下要擦除同一区块中的单个扇区/字节/位通常是不可能的;4.区块的擦除生存期是有限的,大约在100,000到1,000,000周之间;5.NAND闪存设备使用ECC来防止由于漏泄电流造成的数据损坏;以及6.读取操作不计入写入/擦除生存期内。
闪存驱动程序体系结构图3说明了使用一个或多个闪存设备来存储信息的计算机设备300的相关组件。通常,可以使用各种不同的一般用途或特殊用途计算系统配置来作为计算机设备300,包括但不仅限于个人计算机、服务器计算机、手提或膝上型设备、便携通信设备、多处理器系统、基于微处理器的系统、可编程的消费类电子产品、游戏系统、多媒体系统、上述示例设备和/或系统的任何一种组合等等。
计算机设备300通常包括处理器302、存储器304和闪存介质100/200。计算机设备300可以包括上述元素中的多个元素。诸如电源、键盘、触摸板、I/O接口、显示器、LED、音频生成器、振动设备等等之类的其他元素未显示,但它们也可以轻松地成为示范计算机设备300的组成部分。
存储器304通常包括易失性存储器(例如,RAM)和非易失性存储器(例如,ROM、PCMCIA卡等等)。在下面描述的大多数实施例中,存储器304被用作计算机设备302的缓存,使得应用程序数据被很快地访问到,而不必永久地将数据存储在诸如闪存介质100/200之类的非易失性存储器上。
操作系统309驻留在存储器304中并在处理器302上执行。一个示例操作系统实施例包括Microsoft Corportaion提供的WindowsCE操作系统,但也可以选择其他操作系统,如DOS、UNIX等。为便于说明,诸如操作系统之类的程序和其他可执行程序组件此处作为不连续的区块来显示,虽然这样的程序和组件在不同的时间驻留在计算机的不同的存储组件中,并由计算机设备300的处理器来执行。
一个或多个应用程序307被加载到存储器304中,并在操作系统309上运行。应用程序的示例包括,但不仅限于,电子邮件程序、文字处理程序、电子表格程序、因特网浏览器程序等等。
也在操作系统309上运行的文件系统305也加载到存储器304中。文件系统305通常负责管理数据向诸如硬盘驱动器和此示范实施例闪存介质100/200之类的存储器设备的存储和检索。大多数文件系统305根据文件系统305运行所在的操作系统的约定的逻辑级别访问和存储信息。文件系统305也可以成为操作系统309的组成部分或作为单独的逻辑模块以代码形式嵌入其中。
闪存驱动程序306作为文件系统305和闪存介质100/200之间的直接接口来运行。闪存驱动程序306能使计算机设备300通过文件系统305控制闪存介质100/200并最终发送/检索数据。然而,如下文更详细地描述的,闪存驱动程序306不仅负责读/写操作。闪存驱动程序306维护数据完整性,执行闪存介质的磨损调整,在计算机设备300的电源中断期间最大限度地降低数据丢失,并允许计算机设备300的OEM支持它们相应的闪存设备,不管制造商是谁。闪存驱动程序306不依赖于文件系统。这意味着闪存驱动程序306支持许多不同类型的文件系统,如文件分配数据结构文件系统(FAT16)、(FAT32)和其他文件系统。此外,闪存驱动程序306也不依赖于闪存介质,这同样意味着驱动程序306支持闪存设备,不管该闪存设备的制造商是谁。即,闪光驱动程序306具有在闪存介质上读取/写入/擦除数据的能力,并可以支持大多数闪存设备,如果不是全部的话。
在示范实施例中,闪存驱动程序306作为操作系统309内的组件,当它执行时,充当文件系统305和闪存介质100/200之间的逻辑接口模块。闪存驱动程序306以一个单独的框306的方式来显示,为便于演示闪存驱动程序充当接口的示例。虽然如此,闪存驱动程序306也可以驻留在其他应用程序中,作为文件系统305的组成部分或独立地作为与硬件/固件设备一起执行的计算机可读的介质上单独的代码。
在一个实施例中,闪存驱动程序306包括闪存抽象逻辑308和可编程的闪存介质逻辑310。闪存抽象逻辑308和可编程的介质逻辑310是可以支持闪存驱动程序306执行的各种功能的编码指令。虽然显示的示范实施例包括这两个元素,但是可以选择闪存抽象逻辑308和闪存介质逻辑310中每一个逻辑中的各种功能,以执行下面描述的某些更具体的实施例。因此当描述的实施例显示了两个不同的逻辑层308/310时,可以实现下面描述的许多技术,而不一定要求这两层逻辑中的全部或部分功能。此外,实现技术时也可以不必有下面描述的准确的职责划分。
在一个实施例中,闪存抽象逻辑308管理对闪存介质普遍通用的那些操作特征。这些通用的存储器要求包括磨损调整、维护数据完整性,以及在发生电源故障之后处理数据恢复。此外,闪存抽象逻辑308负责将闪存介质100/200上的物理扇区域上存储的信息映射到与文件系统305关联的逻辑扇区域。即,闪存抽象逻辑308跟踪从逻辑到物理扇区地址和/或从物理到逻辑扇区地址发出的数据。驱动程序306在执行读/写操作时都使用逻辑到物理扇区地址。驱动程序306在驱动程序初始化过程中在创建查询表(下面将作介绍)时从物理到逻辑扇区地址出发。依赖于某些类型的闪存介质的文件系统发出的某些比较具体的命令被直接发送到闪存介质逻辑310以便执行和转换。如此,闪存抽象逻辑308充当那些通用操作的管理器,这些通用操作对闪存介质是通用的,不管介质的制造商是谁,如磨损调整、维护数据完整性、在发生电源故障之后处理数据恢复。
图4说明了闪存抽象逻辑308的示范方框图。闪存抽象逻辑308包括扇区管理器402、逻辑到物理扇区映射模块404和压缩工具406。简而言之,扇区管理器402提供一个指针,指向可用的扇区,即,“空闲”并可用于接收新数据。逻辑到物理扇区映射模块404在数据从逻辑扇区寻址的文件系统域向物理扇区寻址的闪存介质域出发时对数据进行管理。压缩工具406提供一个机制,用于清除数据区块(在业界通常也称为“擦除”),以确保有足够多的空闲扇区可用于写入数据。此外,压缩工具406还帮助驱动程序306系统执行一致而均匀的磨损调整。下面将比较详细地介绍所有这些元素。
再回到图3,使用闪存介质逻辑310,将从闪存抽象逻辑308或文件系统305接收到的逻辑命令转换为物理扇区命令,以便发送到闪存介质100/200。例如,闪存介质逻辑310从闪存介质读取和擦除数据和/或向其中写入数据。闪存介质逻辑310在必要时也负责执行ECC。在一个实施例中,闪存介质逻辑310是可编程的,以允许用户满足特定制造商的特定闪存介质要求。因此,闪存介质逻辑310被配置为处理与控制闪存介质100/200的物理方面关联的特定细节、ECC、和特定的命令。
图5说明了闪存介质逻辑310的示范方框图。如图所示,闪存介质逻辑310包括可编程的入口点模块502、I/O模块504和ECC模块506。可编程的入口点模块502定义了一组编程接口,以便在闪存抽象逻辑308和闪存介质100/200之间通信。换句话说,可编程的入口点允许计算机设备300的制造商对闪存介质逻辑310进行编程,以便与计算机设备300中使用的实际闪存介质100/200连接。I/O模块504包含发送到闪存介质100/200的读取/写入/擦除命令所必需的特定代码。用户可以对ECC模块506进行编程,以便根据用户选择的任何特定的ECC算法运行。
跟踪数据文件系统305使用逻辑扇区寻址,以读取和存储闪存介质100/200上的信息。逻辑扇区地址是文件系统从中读取和向其中写入数据的地址位置。它们是“逻辑”,因为它们是相对于文件系统的。在现实中,数据可以存储在闪存介质100/200上的完全不同的物理位置。这些物理位置被称为物理扇区地址。
闪存驱动程序306负责将所有的逻辑扇区地址请求(即,读取&写入)链接到物理扇区地址请求。链接逻辑到物理扇区地址的过程此处也被称为“映射”。从逻辑到物理扇区地址的映射允许闪存驱动程序306在决定将数据存储在闪存介质100/200的什么位置时具有最大的灵活性。逻辑到物理扇区映射模块404允许数据灵活地分配到闪存介质上的任何物理位置,从而使诸如磨损调整和从电源故障中恢复之类的其他任务有较高的效率。它还允许文件系统305以所设计的方式存储数据,而不必知道数据实际上是以不同的方式存储在闪存介质上的。
图6A显示了闪存驱动程序306生成的数据结构(即,表)600A的示范实施例。数据结构600A存储在存储器304的易失性部分,例如,RAM。数据结构600A包括具有对应的逻辑扇区地址604的物理扇区地址602。下面将参考图7介绍表600A是如何生成的。
图7说明了用于当文件系统305向闪存驱动程序306发出写入请求时跟踪闪存介质100/200上的数据的过程700。过程700包括步骤702-718。请参看图6A和7,在步骤702中,闪存抽象逻辑308接收到将数据写入到指定的逻辑扇区地址604的请求。
在步骤704中,扇区管理器402确定闪存介质100/200上可以接受与写入请求关联的数据的空闲物理扇区地址位置(下面将比较详细地讲述扇区管理器402如何选择物理扇区地址)。空闲的物理扇区是不必首先擦除就可以接受数据的任何扇区。一旦扇区管理器402接收与空闲物理扇区位置关联的物理扇区地址,逻辑到物理扇区映射模块404就将物理扇区地址分配到写入请求指定的逻辑扇区地址604,从而形成对应的关系。例如,物理扇区地址0到N可以分配到任何逻辑扇区地址0到N。
接下来,在步骤706中,逻辑到物理扇区映射模块404在诸如存储器305中的示范表600A之类的数据结构中存储物理扇区地址到逻辑扇区地址的对应关系。如图示范数据结构600A所示,三个逻辑扇区地址604被分配到对应的物理扇区地址602。
接下来,在步骤708中,与逻辑扇区地址写入请求关联的数据存储在步骤704中分配的物理扇区地址位置中的闪存介质100/200上。例如,数据将存储在介质100/200上的对应于逻辑扇区地址11的物理扇区地址位置0。
现在,在步骤710中,假设文件系统305发出了另一个写入请求,但在这种情况下,是为了修改与以前步骤702中发出的逻辑扇区地址关联的数据。然后,闪存驱动程序306分别执行步骤712到714,它们与上文描述的步骤704到708完全相同。
然而,在步骤718中,在与步骤710关联的更新的数据成功地存储在闪存介质100/200之后,逻辑到物理扇区映射模块404将在步骤704中分配的旧的物理扇区地址标记为“脏的”。在新数据被写入介质100/200之后旧数据被标记为脏的,如此,在在写入操作的中间发生电源故障的情况下,逻辑到物理扇区映射模块404将不会丢失旧的数据。可能会丢失新的或从步骤702或710更新的数据,但由于没有必要执行擦除操作,因此在发生电源故障的情况下新的或被修改的数据中只有一项丢失。
图6B显示了与数据结构600A相同的数据结构600B,只不过其内容已经更新。在此示例中,文件系统305具有与逻辑扇区地址11关联的更新数据。相应地,闪存驱动程序306将逻辑扇区地址11重新分配到物理扇区地址3,并将这两个地址之间的重新分配的对应关系存储在数据结构600B中。如数据结构600B所示,逻辑扇区11的内容实际上被写入物理扇区地址3,数据内容被成功地写入到物理扇区地址3之后,扇区0的内容被标记为“脏的”,关于这一点,参考步骤710-718进行了描述。
当以前存储的数据被文件系统305更新时重新分配逻辑到物理扇区地址的此过程,允许写入操作不必等待移动全部数据区块便可以执行,并执行擦除操作。因此,过程700允许数据结构得到很快的更新,然后可以在实际物理介质100/200上执行物理写入操作。闪存抽象逻辑308使用诸如600A/600B之类的数据结构正确地维护逻辑到物理的映射关系。
当文件系统305发出了读取请求时,闪存抽象逻辑308,通过逻辑到物理映射模块404,检索数据结构600A/600B,以获得与关联于读取请求的逻辑扇区具有对应关系的地址物理扇区地址。然后,闪存介质逻辑310使用该物理扇区地址作为一个基础,以便将与读取请求关联的数据发送回文件系统305。文件系统305不必知道其对逻辑扇区地址的请求实际映射到物理扇区地址。
电源中断保护写入操作在与区块级别相对的扇区级别上执行,从而在发生电源故障的情况下最大限度地降低数据丢失的可能性。用于存储数据的扇区是相对于大多数文件系统305的最细微的粒度级别。因此,如果闪存驱动程序306每个扇区地运行,在发生电源故障的过程中数据丢失的可能性会降低。
如上文所述,数据结构600A、600B存储在存储器304中,该存储器在一个示范实施例中通常是一个易失性存储器设备,在发生电源故障的情况下将会被完全擦除。为保护闪存介质100/200上的数据完整性,数据结构600A/600B中存储的逻辑到物理映射信息被备份在闪存介质上。
在一个示范实施例中,为降低与在闪存介质100/200上存储整个数据结构关联的开销,逻辑扇区地址存储在介质的备用区域104,并带有逻辑扇区地址与其具有对应关系的每一个物理扇区。
图8说明了保护诸如示范数据结构600A和600B之类的易失性数据结构中存储的逻辑到物理扇区地址信息的映射的过程800。过程800包括步骤802-814。描述该过程的顺序不能解释为限制。此外,该过程可以以任何适当的硬件、软件、固件或它们的组合来实现。在步骤802中,与实际数据关联的逻辑扇区地址存储在分配到逻辑扇区地址的物理扇区地址上的闪存介质100/200的物理扇区中。在NAND闪存介质100的情况下,逻辑扇区地址存储在介质的备用区域104。使用此方案,逻辑到物理扇区映射信息以反向搜索格式来存储。因此,在发生电源故障之后,必须扫描介质上的每一个物理扇区的备用区域,确定对应的逻辑扇区地址,然后相应地更新存储器中的查询表。图9说明了介质100/200中的可以存储逻辑扇区地址的位置。正如前面所提到的,NOR闪存的区块可以从逻辑上细分为物理扇区,每一个物理扇区都带有一个备用区域(与NAND相似)使用此技术,逻辑扇区地址存储在每一个物理扇区的备用区域,与NAND闪存使用的过程相似(图15中显示为空间1504,下面将参考图15对其进行描述)。
在发生电源中断以及数据结构600A、600B丢失的情况下,正如图8的判断步骤804的“是”分支所指出的,然后,闪存抽象逻辑308使用闪存介质逻辑310扫描闪存介质,以定位与每一个物理地址中的数据一起存储的逻辑扇区地址(参见图9),正如步骤806所指出的。在步骤808中,包含了数据的物理扇区地址被重新分配到与介质上的数据在一起的逻辑扇区地址。由于物理和逻辑扇区地址被恢复,因此,它们被存储回数据结构600A、600B,闪存介质逻辑310进入包含数据的下一个扇区,正如步骤812所指出的。步骤806-812不断重复,直到包含数据的所有扇区都已经被扫描,数据结构被恢复。通常,这种情况将在初始化计算机设备300时发生。
相应地,当发生电源故障时,过程800能使闪光抽象逻辑308扫描介质100/200,并在诸如示范数据结构600之类的数据结构中重建逻辑到物理映射。过程800可以确保映射信息在发生电源故障期间不会丢失,并且可以保持数据的完整性。
用于跟踪数据的动态查询数据结构图10说明了用于跟踪闪存介质100/200中存储的数据的动态查询数据结构1000。数据结构1000包括主数据结构1002和一个或多个辅助数据结构1004、1006。数据结构将由闪存驱动程序306生成和维护。数据结构存储在存储器304的易失性部分。一个或多个辅助表1004、1006包含逻辑到物理扇区地址的映射。正如下文将讲述的,辅助数据结构1004、1006中每一个数据结构都具有预先确定的映射容量。主数据结构1002包括一个指针,指向一个或多个辅助数据结构1004、1006中的每一个数据结构。每一个辅助数据结构是按需要分配的,以便映射用于存储数据的那些逻辑到物理地址。一旦辅助数据结构1004、1006等等的容量被超过,然后将分配另一个辅助数据结构,然后再分配下一个,等等,直到最后闪存介质100/200上的所有可能的物理扇区地址都被映射到逻辑扇区地址。每次分配辅助表时,闪存驱动程序306将启用主数据结构1002中包含的指针,以指向它。
相应地,闪存驱动程序306将基于闪存介质本身中存储的永久数据量动态地分配一个或多个辅助数据结构1004、1006。在运行时将使用闪存介质100/200的特定属性计算辅助数据结构的大小特征。不分配辅助数据结构,除非以前分配的辅助数据结构已满或不足以处理文件系统305所需的逻辑地址空间量。因此,动态查询数据结构1000最大限度地降低存储器304的使用。动态查询数据结构1000适用于使用日历、收件箱、文档等等的计算机设备300,在此大多数逻辑扇区地址空间将不必映射到物理扇区地址。在这些应用程序中,只有有限的逻辑扇区范围被反复地访问,只有在该应用程序要求更多存储区域时才写入新逻辑扇区。
主数据结构1002包含一个指针阵列,0到N,它们指向已分配的那些辅助数据结构。在图10的示例中,位置0和1的指针分别指向辅助数据结构1004和1006。此外,在图10的示例图表中,指针2到N不指向任何辅助数据结构,并包含默认设置“NULL”,以使逻辑到物理扇区映射模块404知道没有进一步分配辅助数据结构。
每一个辅助数据结构1004、1006都类似于数据结构600,但只有全部可能的介质的一部分映射到辅助数据结构。辅助数据结构允许闪存抽象逻辑308将存储器304所需要空间量降低到只包括文件系统发出的逻辑扇区地址的那些部分。每一个辅助数据结构是(b*k)字节大小,其中k是数据结构中包含的物理扇区地址的数量,b是用于存储每一个物理扇区地址的字节的数量。
图11说明了动态地分配用于跟踪闪存介质100/200上的数据的查询数据结构的过程1100。过程1100包括步骤1102到1106。描述该过程的顺序不能解释为限制。此外,该过程可以以任何适当的硬件、软件、固件或它们的组合来实现。
在步骤1102中,生成了包含指向一个或多个辅助数据结构1004、1006的主数据结构1002。此示范实施例中的主数据结构1002的大小是固定的。在计算机设备300启动时,闪存介质逻辑310确定闪存介质100/200的大小,并将此信息中继到闪存抽象逻辑308。基于闪存介质的大小,闪存抽象逻辑308计算物理地址的范围。即,假设闪存介质的大小是16MB,那么,NAND闪存介质100通常将包含32768个扇区,每一个扇区的大小为512字节。这意味着,闪存抽象逻辑308可能必须将总数为0到最坏的情况下的32768个逻辑扇区,假设闪存介质上的所有存储器空间都已被使用。已知介质上有215个扇区,闪存抽象逻辑308可以使用2个字节存储每一个逻辑扇区地址的物理扇区地址。如此主数据结构以256个(N=256)DWORD的阵列的方式来实现,涵盖了将由文件系统发出的最大的逻辑扇区地址数量(例如,32768)。如此,共有256个潜在的辅助数据结构。
在步骤1104中,分配辅助数据结构。首先,闪存抽象逻辑确定每一个潜在的辅助数据结构的可能的最小大小。使用简单的除法,每一个数据结构支持32768/256=128个逻辑扇区地址。如上所述,整个物理空间都可以使用2个字节映射,b=2,因此,每一个辅助数据结构的大小为256个字节(b=2*k=128)。
现在,已知每个辅助数据结构的大小,假定文件系统305请求写入到逻辑扇区地址50-79,也被称为LS50-LS79。为满足来自文件系统305的写入请求,闪存抽象逻辑308计划将主数据结构1002中的第一个指针用于逻辑扇区地址LS0-LS127或数据结构1004。假设第一个指针是NULL,闪存抽象逻辑308分配存储器304中的数据结构1004,大小为256个字节。正如步骤1106所指出的,闪存抽象逻辑308能使主数据结构的位置0的指针指向数据结构1004。因此,在此示例中,使用数据结构1004存储逻辑扇区LS50-LS79的映射信息。
如果文件系统305写入到闪存介质100/200中的对应的区域,闪存抽象逻辑308分配辅助数据结构。通常,只有已被使用的逻辑扇区地址被闪存抽象逻辑308映射。因此,在最糟的情况下,当文件系统305访问整个逻辑地址空间时,那么对所有256辅助数据结构(在图10的示例中只显示将分配两个,1004、1006),每个都将被分配256个字节,共要求存储器304中的64KB空间。
当分配的数据结构1004变得不足以存储文件系统305发出的逻辑扇区地址空间时,那么,闪存抽象逻辑308分配类似于数据结构1006的另一个数据结构。如果数据结构1004在稍后的时间再次足以处理文件系统作出的所有逻辑扇区地址请求,那么,这种动态地分配辅助数据结构的过程也适用。在此示例中,指向数据结构1006的指针将被闪存抽象逻辑308禁用;数据结构1006将成为存储器304中的空闲空间。
扇区的均匀磨损调整和回收图12是被闪存驱动程序306作为连续的圆周1200看待的闪存介质100/200的示意图。在物理上闪存介质与如图1和2所示的介质100/200相同,只是闪存抽象逻辑308组织闪存介质,好像它是包含0到N个区块的连续圆周1200。相应地,区块N内的最高的物理扇区地址(单个扇区未在图12中显示,以简化图表,但可以在图1和2中看到)和区块0内的最低的物理扇区地址被视为相邻的。
图13说明了作为连续圆周1200看待的介质100/200的另一个视图。在此示范图表中,扇区管理器402维护一个写入指针1302,该指针指出介质上的可用于接收数据的下一个空闲扇区。下一个可用的空闲扇区是不必按规定的顺序首先擦除就可以接受数据的扇区。写入指针1102作为两个计数器的组合计数扇区的扇区计数器1306和计数区块的区块计数器1304。两种计数器组合起来可以指出用于接收数据的下一个可用的空闲扇区。
在另一个实施例中,写入指针1302可以作为单个计数器,并指出在写入操作期间可用于接受数据的下一个物理扇区。根据此实施例,扇区管理器402维护介质上可用于接收数据的所有物理扇区地址的列表。扇区管理器402存储介质上的第一个和最后一个物理扇区地址(相邻的地址),并减去两个地址以确定空闲扇区的完整列表。然后,写入指针1302循环并连续地在列表中向前移动。这就减少了需要由扇区管理器402存储的信息量。
图14说明了被扇区管理器402用来确定闪存驱动程序306在介质100/200上存储数据的下一个可用的空闲扇区位置的过程1400。过程1400还能使扇区管理器402提供每一个物理扇区地址(对于下一个空闲扇区),以便分配到文件系统305作出的每个逻辑扇区地址写入请求,如上文所述。过程1400包括步骤1402-1418。描述该过程的顺序不能解释为限制。此外,该过程可以以任何适当的硬件、软件、固件或它们的组合来实现。
在步骤1402中,X区块计数器1304和Y扇区计数器1306最初被设置为零。此时假设没有数据驻留在介质100/200上。
在步骤1404中,驱动程序306接收写入请求,将查询扇区管理器402,以将下一个可用的空闲物理扇区地址发送到逻辑到物理扇区映射模块404。写入请求可以来自文件系统305和/或来自用于回收扇区的压缩工具406内部,如下文所详述。
在步骤1406中,数据被写入到如写入指针1302所指出的扇区。由于在此示范图表中两种计数器最初被设置为零,假定写入指针1302指向扇区零、区块零。
在步骤1408中,扇区计数器1306向前移动一个有效的扇区。例如,在步骤1406的示例之后,写入指针向前移动到扇区1、区块0。
接下来,在判断步骤1410中,扇区管理器402检查扇区计数器1306是否超过一个区块中的扇区数量K。如果Y计数未超过区块的最大扇区大小,那么,根据判断步骤1410的“否”分支,对下一个写入请求重复步骤1404-1410。
另一方面,如果Y计数超过区块的最大扇区大小,那么,该区块的最高的物理扇区地址被写入到该区块,该区块已满。然后根据步骤1410的“是”分支,在步骤1412中,Y计数器被重置为零。接下来,在步骤1414中,X区块计数器1304增加1,从而将写入指针1302向前移动到该区块的最低的有效物理扇区地址0的下一个区块。
接下来,在判断步骤1416中,压缩工具406检查X区块计数器是否指向坏区块。如果是,那么,X区块计数器1304将增加1。在一个实施例中,压缩工具406负责检查此状况。如上文所提及的,扇区管理器存储可用于处理写入请求的所有物理扇区地址。物理扇区地址的整个区块始终在压缩或在初始化期间添加。因此,扇区管理器402不必检查区块是否为坏的,虽然扇区管理器可以这样做。还应注意,在其他实施例中,步骤1416可以在过程1400开始时执行。
在步骤1417中,X区块计数器1304增加,直到它指向好的区块。为避免连续循环,如果所有区块都是坏的,那么过程1400将在步骤1416处停止,并给用户提供一个指示,说明所有区块都是坏的。
接下来在判断步骤1418中,扇区管理器检查X区块计数器1304是否超过最大区块数量N。这将指出写入指针1302已经使圆周完整(在圆周1200的顶端)。如果是这种情况,那么根据步骤1418的“是”分支,过程1400重复,X和Y计数器被重置为零。否则,根据步骤1418的“否”分支,过程1400返回到步骤1404并继续向前移动。
在此示范过程1400中,写入指针1302最初以最低的地址区块的最低的物理扇区地址开始。写入指针1302一次将扇区向前移动到最高的地址区块的最高的物理扇区地址,然后回到最低的地址区块,等等。此连续和循环的过程1400确保数据被均衡地写入到介质100/200的每个扇区。没有特定的区块或扇区被写入多次,从而可确保在整个介质100/200中有均匀的磨损调整。相应地,过程1400允许数据被非常快地写入到下一个可用的空闲扇区,不必使用用于确定在哪里写入新数据的昂贵处理算法,同时又可维护均匀的磨损调整。此类传统的算法会影响计算机设备的写入速度。
在另一个实施例中,写入指针1302可以按逆时针方向移动,从最高的区块地址N的最高的物理扇区地址开始,并减少其计数器。在任何一种情况下,坏的区块都可以被扇区管理器完全忽略。此外,计数器可以被设置为任何值,不一定需要从计数器的最高的或最低的值开始。
图15说明了作为连续圆周1200看待的介质100/200的另一个视图。如图15所示,写入指针1302已经从区块0向前移动到7,大约为整个圆周1200的一半。相应地,区块0到7包含脏的、有效的数据,或坏的区块。即,区块0到7中的每个好的扇区都不空闲,因此,无法用于接收新的或修改的数据。箭头1504表示区块0到7包含已被使用的扇区。最后,写入指针1302将要么用完空闲扇区,无法写入,除非清除和回收被标记为脏的或无效的扇区。要清除扇区,就是说,扇区被重置为可写状态,或换句话说,被“擦除”。为了释放扇区,必须至少一次擦除一个区块。然而,在可以擦除区块之前,所有好的扇区的内容都被复制到介质的不同部分的空闲扇区。然后,将扇区标记为“脏的”,再将区块擦除。
压缩工具406负责监视介质100/200的状况,以确定何时应擦除区块,以便将空闲扇区回收到扇区管理器402。压缩工具406还负责执行清除操作。要完成清除操作,压缩工具406与扇区管理器402类似,维护了一个指针。在这种情况下,压缩工具406维护了一个清除指针1502,图15显示了该指针。清除指针1502指向物理区块,能使压缩工具406在区块被清除时跟踪介质100/200上的扇区,如下文所述。压缩工具406可以维护一个指向下一个要压缩的区块的指针,因为擦除操作影响整个区块。即,当压缩工具406不在压缩区块时,压缩工具406指向一个区块。
图16是说明了被压缩工具用来回收扇区的过程的流程图。过程1600包括步骤1602-1612。描述该过程的顺序不能解释为限制。此外,该过程可以以任何适当的硬件、软件、固件或它们的组合来实现。在步骤1602中,压缩工具406监视文件系统向闪存介质100/200写入或更新的频率。这是通过专门监视介质100/200上的空闲和脏的扇区的数量来完成的。空闲扇区和脏的扇区的数量可以通过计算上文描述的表600和/或900中存储的空闲和脏的扇区来判断。
在判断步骤1604中,压缩工具406执行两个比较,以确定是否应该回收扇区。第一个比较涉及将空闲扇区的数量与脏的扇区的数量进行比较。如果脏的扇区的数量超过空闲扇区的数量,那么,压缩工具406就认为应该执行回收操作,该操作在这种情况下被称为“服务压缩”。因此,当脏的扇区的数量超过空闲扇区的数量时,将进行服务压缩。
如果应该进行服务压缩,那么在步骤1606中,压缩工具在控制介质以执行步骤1608-1612以清除脏数据的区块之前等待低优先级线程1606。服务压缩也可以在可以将脏的扇区回收到空闲扇区的其他方便的时间进行。例如,在另一个实施例中,当全部扇区的三分之一是脏扇区时,闪存抽象逻辑308可以执行服务压缩。在任何一个实施例中,压缩工具406通常等待优先级较高的线程,以放弃对处理器302和/或闪存介质100/200的控制。一旦已经有低优先级线程可用,过程将进入步骤1608。
回过头来参看步骤1604,第二个比较涉及比较介质上剩下的空闲扇区的数量,以确定写入指针1302是否即将或已经用完要指向的空闲扇区。如果果真是这种情况,那么,压缩工具406认为有必要预定一个“关键压缩”以回收扇区。压缩工具不等待低优先级线程并立即启动步骤1608。
在步骤1608中,压缩工具406根据步骤1604的情况将在高优先级线程或低优先级线程上操作。如果在高级别线程上操作(关键压缩),那么,压缩工具1102仅限于将少量的,例如,16个脏扇区,回收到空闲扇区,并将对处理器的控制返回到计算机设备300,以避免在这样的中断期间对处理器302的独占。
对于闪存介质,通常每个区块制造三十二个扇区,但对于关键压缩,也可以其他数量的扇区,稍微大一些,或稍微小一些。不管这些大小特征如何,在关键压缩期间回收的扇区的数量都是任意的,但至少必须为1(为了满足当前的写入请求)。关键压缩妨碍文件系统305能够完成写入;因此,尽快地完成压缩非常重要。在关键压缩的情况下,压缩工具406至少必须将一个脏的扇区回收到空闲扇区中,以便在介质上有空间满足挂起的写入请求。如果一次回收多个扇区,如16个,就可以避免有多个挂起的写入请求以及多个关键压缩紧接着执行的情况,有效地防止无限期地控制处理器。因此,尽管为关键压缩选择的回收的扇区的数量可以不同,但在示范描述中选择了足以防止紧接着的关键压缩的数量。
因此,在步骤1608中,压缩工具406将使用清除指针1502扫描扇区中的有效数据,将数据重写到空闲扇区,并在成功地移动数据之后将扇区标记为脏的。相应地,当移动数据时,压缩工具使用参考过程700描述的相同过程,该过程的代码与文件系统305写入新的数据和/或更新数据时使用的代码相同。压缩工具406在移动数据时查询扇区管理器402是否有空闲扇区,其方式与参考过程1400描述的方式相同。
在步骤1610中,压缩工具406使用类似于图13中所示的写入计数器1306的扇区计数器一个扇区一个扇区地移动清除指针1502,只是此扇区计数器针对的是清除指针1502的位置。压缩工具406还通过计数器跟踪区块,其方式与参考写入指针1302描述的方式类似。然而,清除的区块的数量是由脏的扇区的数量确定的,关键压缩的情况除外。在关键压缩中,压缩工具只压缩足够的区块以回收少量的物理扇区(即,16个扇区)。
在步骤1612中,压缩工具擦除(清除)包含完全被标记为脏的的好的扇区的那些区块。图17显示了过程1600的示范结果。在此示例中,在有必要进行另一个压缩的情况下,区块0和1被清除,清除指针被移到区块2的第一个扇区。因此,压缩工具406从区块0和1回收两个区块的扇区,这就向扇区管理器402提供了更多的空闲扇区。已使用的扇区1504构成了在此实施例中按顺时针方向旋转的数据流(下文中将称之为“数据流”1504)。写入指针1302保持在数据流1504的首部,清除指针1502保持在数据流1504的“尾部”。数据流1504可以在数据被删除时收缩,或者随着新数据的添加而增长,但指针始终指向数据流1504的两个相对的尾部头部和尾部。
对待闪存介质的方式为好像物理扇区地址构成一个连续的圆周1200,并且使用上文描述的过程,能使闪存抽象逻辑308在整个介质100/200中执行均匀的磨损调整。压缩工具406选择给定区块相同的次数,以便通过擦除回收扇区。由于闪存区块具有有限的写入/擦除周期,压缩工具以及扇区管理器在区块0-N内尽可能均衡地分布这些操作。在这点上,数据流1504在圆周1200(即,介质100/200)旋转,均衡地在闪存介质100/200上提供完美的磨损调整。
在发生电源故障的情况下,闪存抽象逻辑310包含简单的编码逻辑,该逻辑扫描闪存介质100/200,并确定哪些位置被标记为空闲和脏的。然后,该逻辑能够推断,数据流1504驻留在被标记为空闲和脏的位置之间,例如,图17中描述的圆周1200的数据流1106部分。数据流1504的头部和尾部可以通过定位包含首部数据的最高的物理扇区地址和通过定位包含尾部数据的最低的物理扇区地址来轻松地确定。
NOR闪存设备虽然此详细描述部分中的上述所有章节适用于NAND和NOR闪存设备,但是,如果使用了NOR闪存介质200,也需要某些额外的实施例,才能使闪存介质逻辑支持在介质200的每个物理扇区中存储数据。每个NOR区块0、1、2等等都可以被闪存介质逻辑310当作NAND闪存介质100来对待。具体来说,每个NOR区块都细分为一些页,其中每一页都包括512字节的“数据区域”,用于存储扇区数据,8字节“备用区域”,用于存储诸如逻辑扇区地址、状态位等等之类的东西(如上文所述)。
图18说明了为更好地支持闪存驱动程序实现的过程和技术划分的NOR闪存介质200的逻辑表示。在此实施例中,扇区1802包含512字节的数据区域1803,用于存储与扇区相关的数据,和8字节的数据区域,用于作为备用区域1804。区段1806表示NOR区块的未使用的部分,因为NOR闪存区块通常大小为2,它不是均衡可分的。例如,请看一个16MB的NOR闪存设备,该设备具有128个闪存区块,每一个区块的大小为128KB。使用520字节的页面大小,每一个NOR闪存区块都可以分成252个不同的扇区,32个字节是未使用的。不幸的是,在示范实施例中,这每个区块的32个字节被闪存介质逻辑310“浪费”,未被用来存储扇区数据。然而,折中是增强的写入吞吐量,均匀的磨损调整、将数据丢失减到最小限度等等,如上文所述的示范闪存驱动程序306的闪存抽象逻辑308提供的全部。另外一些实施例可以通过将介质200分成不同的扇区大小的方法来完成。
计算机可读的介质使用如上文所述的闪存驱动程序的示范主题的实施例可以存储在计算机可读的介质上或通过计算机可读的介质的某些形式进行传输。计算机可读的介质可以是计算机可以访问的任何可用的介质。作为示例,而不仅限于,计算机可读的介质可以包括“计算机存储介质”和“通信介质”。
“计算机存储介质”包括以任何方法或技术实现的易失性的和非易失性的、可移动的和非可移动的介质,以用于存储诸如计算机可读的指令、数据结构、程序模块或其他数据之类的信息。计算机存储介质包括,但不仅限于,RAM、ROM、EEPROM、闪存或其他存储器技术,CD-ROM、数字多功能磁盘(DVD)或其他光盘存储器、磁带机、磁带、磁盘存储器或其他磁存储设备,或者可用于存储所需要的信息并且计算机可以访问的任何其他介质。
“通信介质”通常在诸如载波之类的调制数据信号或其他传输机制中实施计算机可读的指令、数据结构、程序模块或者其他数据。通信介质还包括任何信息提供介质。
术语“调制的数据信号”是指具有一个或多个其特征集或以这样的方式以便对信号中的信息进行编码的信号。作为示例,而不仅限于,通信介质包括有线介质,如有线网络或者直接有线连接,以及无线介质,如声控、RF、红外和其他无线介质。上述任何几项的组合也应包括在计算机可读的介质的范围内。
结束语虽然本发明是以结构功能和/或方法操作所特有的语言描述的,可以理解,在所附的权利要求书中定义的本发明不一定仅限于描述的特定功能或操作。特定功能和操作可以作为实现权利要求所述的发明的示范形式来描述。
权利要求
1.具有可寻址位置的闪存系统,包括压缩工具,该压缩工具定期在以区块方式组织的闪存位置的循环序列中向前移动,并在它在存储器位置中向前移动时清除区块。
2.根据权利要求1所述的系统,其特征在于,如果特定闪存位置包含有效的数据,压缩工具就在清除特定闪存位置之前将有效的数据移到新的闪存位置。
3.根据权利要求2所述的系统,进一步包括压缩工具维护的写入指针,该指针在有效数据被移到新的闪存位置之后将包含有效数据的存储器位置标记为脏的。
4.根据权利要求1所述的系统,其特征在于,位置是扇区。
5.具有可寻址位置的闪存系统,包括写入指针,该指针在闪存位置的循环序列中向前移动,该写入指针指出可用于接收数据的一个或多个存储器位置。
6.根据权利要求5所述的系统,其特征在于,写入指针是闪存驱动程序系统的组成部分。
7.根据权利要求5所述的系统,其特征在于,存储器位置是物理扇区地址。
8.根据权利要求5所述的系统,其特征在于,写入指针一次向前移动一个存储器位置。
9.根据权利要求5所述的系统,其特征在于,写入指针至少包含一个计数器,该计数器增加以将写入指针一次至少向前移动一个扇区。
10.根据权利要求5所述的系统,进一步包括扇区管理器,该管理器维护写入指针并在接收到来自文件系统的写入请求时提供下一个物理扇区地址用于存储数据。
11.用于与闪存位置的循环序列一起操作的闪存驱动程序,闪存驱动程序包括写入指针,该指针被配置为在闪存位置的循环序列中移动首部指针,以指出序列中的下一个空闲闪存位置;以及清除指针,该指针被配置为在闪存位置的序列中移动,以指出循环序列中的第一个使用的闪存位置。
12.根据权利要求11所述的闪存驱动程序,进一步包括压缩工具,该压缩工具维护清除指针,该指针被配置为在清除指针在闪存位置的序列中向前移动时清除那些清除指针所指出的闪存位置。
13.根据权利要求11所述的闪存驱动程序,其特征在于,在清除第一个使用的闪存之前,清除指针将数据从第一个使用的闪存位置移到序列中的写入指针所指出的下一个空闲存储器位置。
14.根据权利要求11所述的闪存驱动程序,其特征在于,在清除第一个使用的闪存之前,清除指针将数据从第一个使用的闪存位置移到序列中的写入指针所指出的下一个空闲存储器位置,并将第一个使用的闪存位置标记为脏的。
15.根据权利要求11所述的闪存驱动程序,其特征在于,写入指针在文件系统作出写入请求之后一次向前移动一个存储器位置。
16.根据权利要求11所述的闪存驱动程序,其特征在于,写入指针维护一个计数器,该计数器在文件系统作出写入请求之后一次向前移动一个存储器位置。
17.一种用于在闪存介质中获得均匀磨损调整的系统,包括压缩工具,该压缩工具被配置为从介质的最低的物理扇区地址开始按顺序擦除闪存介质的相邻的区块,并且,一旦最高的物理扇区地址被擦除,即从最低的物理扇区地址重新开始连续地重复擦除相邻的区块。
18.根据权利要求17所述的系统,其特征在于,如果特定闪存位置包含有效的数据,压缩工具就在清除特定闪存位置之前将有效的数据移到新的闪存位置。
19.根据权利要求17所述的系统,其特征在于,如果特定闪存位置包含有效的数据,压缩工具就将有效的数据移到新的闪存位置,其特征在于,压缩工具被进一步配置为在整个区块都被标记脏的之后擦除存储器位置的区块。
20.根据权利要求17所述的系统,其特征在于,压缩工具维护一种清除指针,该指针在闪存介质中一次向前移动一个区块,忽略那些坏的的存储器区块。
21.闪存驱动程序控制器,包括扇区管理器,该管理器被配置为对闪存介质进行组织,好像存储器位置构成一个连续的圆周,其特征在于,最低的和最高的存储器位置是相邻的;扇区管理器包括写入指针,该指针指出可用接收新数据的存储器位置,写入指针被配置为每次在闪存介质上存储数据时一次向前移动一个连续循环的存储器位置。
22.根据权利要求21所述的闪光驱动程序控制器,其特征在于,存储器位置是物理扇区地址。
23.根据权利要求21所述的闪存驱动程序控制器,其特征在于,存储器位置是物理扇区地址,每次在闪存介质上存储数据时向前移动一个物理扇区地址。
24.根据权利要求21所述的闪存驱动程序控制器,其特征在于,写入指针至少包含一个计数器,该计数器增加以将写入指针从最低的存储器位置向前移动到最高的存储器位置,一旦到达最高的存储器位置,就开始重复计数。
25.根据权利要求21所述的闪存驱动程序控制器,其特征在于,写入指针至少包含一个减少器,该减少器减少以将写入指针从最高的存储器位置向前移动到最低的存储器位置,一旦到达最低的存储器位置,就开始重复减少操作。
26.一种用于清除闪存介质中的区块的方法,包括(a)扫描闪存介质的区块的扇区;(b)如果一个扇区包含数据,则将数据复制到空闲的扇区;(c)在将包含数据的扇区中的数据复制到空闲的扇区之后将该扇区标记为脏的;(d)在构成区块的扇区都被标记为脏的之后擦除整个区块中的扇区;以及(e)一旦最高的物理扇区地址已经被标记为脏的,从最低的物理扇区地址重新开始,从最低的到最高的物理扇区地址,重复段落(a)到(e)中所述的操作。
27.根据权利要求26所述的方法,进一步包括在电源中断之后,扫描闪存介质;确定哪些位置是空闲的,以及哪些位置包含数据,以及从那些包含数据的物理扇区中物理扇区地址最低的第一个扇区开始,重复段落(a)到(e)所述的操作。
28.根据权利要求26所述的方法,其特征在于,扫描是通过使用清除指针执行的,清除指针连续地计数物理扇区地址,一旦到达最高的物理扇区地址,即可重新开始。
29.一个或多个计算机可读的介质,包括计算机可执行指令,执行这些指令时,执行根据权利要求26所述的方法。
30.一个或多个计算机可读的介质,包括计算机可执行的指令,当由计算机系统执行这些指令时,使计算机与具有可寻址位置的闪存连接;定期在以区块方式组织的闪存位置的循环序列中向前移动;以及当它在存储器位置中向前移动时清除区块。
31.根据权利要求30所述的一个或多个计算机可读的介质,其特征在于,如果特定闪存位置包含有效的数据,计算机就在清除特定闪存位置之前将有效的数据移到新的闪存位置。
32.根据权利要求31所述的一个或多个计算机可读的介质,进一步使计算机维护一个写入指针,该指针在有效数据被移到新的闪存位置之后将包含有效数据的存储器位置标记为脏的。
33.根据权利要求30所述的一个或多个计算机可读的介质,其特征在于,位置是物理扇区地址。
34.一个或多个计算机可读的介质,包括计算机可执行的指令,当由计算机系统执行这些指令时,使计算机与具有可寻址位置的闪存连接;维护一个写入指针,该指针在闪存位置的循环序列中向前移动,该写入指针指出可用于接收数据的一个或多个存储器位置。
35.根据权利要求34所述的一个或多个计算机可读的介质,其特征在于,存储器位置是物理扇区地址。
36.根据权利要求34所述的一个或多个计算机可读的介质,其特征在于,写入指针一次向前移动存储器位置。
37.根据权利要求34所述的一个或多个计算机可读的介质,其特征在于,写入指针至少包含一个计数器,该计数器增加以将写入指针一次至少向前移动一个扇区。
38.根据权利要求34所述的一个或多个计算机可读的介质,其特征在于,计算机在执行写入操作时使用写入指针提供下一个物理扇区地址用于存储数据。
全文摘要
本发明公开了在闪存设备中获得均匀的磨损调整的系统和方法。一种系统支持具有可寻址位置的闪存。该系统使用一种压缩工具,该压缩工具定期在以区块方式组织的闪存位置的循环序列中向前移动,并在它在存储器位置中向前移动时清除区块。在描述的另一个实施例中,一种系统使用一种写入指针,该指针在闪存位置的循环序列中向前移动。在写入指针向前移动之后,写入指针指出可用于接收数据的一个或多个存储器位置。相应地,闪存介质以地址的连续圆周的方式组织,在此,清除和写入操作以连续而重复的循环方式处理,以在整个闪存介质中获得均匀的磨损调整。
文档编号G11C16/34GK1441440SQ0310643
公开日2003年9月10日 申请日期2003年2月25日 优先权日2002年2月27日
发明者杰雷德·多纳尔德·阿西姆, 杨永奇 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1