CN101231617B - 闪存设备的数据处理方法 - Google Patents
闪存设备的数据处理方法 Download PDFInfo
- Publication number
- CN101231617B CN101231617B CN 200810004224 CN200810004224A CN101231617B CN 101231617 B CN101231617 B CN 101231617B CN 200810004224 CN200810004224 CN 200810004224 CN 200810004224 A CN200810004224 A CN 200810004224A CN 101231617 B CN101231617 B CN 101231617B
- Authority
- CN
- China
- Prior art keywords
- sector
- data
- physical block
- formation
- logical block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明提供了一种闪存设备数据处理方法,包括以下步骤:步骤S102,在初始化时,对闪存设备进行扫描,在主机内建立由具有相同逻辑块号的物理块组成的队列构成的逻辑块队列组、由具有用于写入数据的空数据空间的物理块构成的备用空物理块队列;以及步骤S104,根据上层系统的逻辑命令,利用逻辑块号寻找相应的逻辑块队列组,扫描逻辑块队列组中的物理块,根据扫描结果,借助于备用空物理块队列,来处理闪存设备中的数据。通过本发明的技术方案简化了逻辑映射关系,提高了效率,并且保证了数据稳定性,延长了闪存的使用寿命。
Description
技术领域
本发明涉及数据处理技术,尤其涉及闪存设备的数据处理技术。
背景技术
相对于硬盘而言,Flash Memory(闪存)作为一种体积小、功耗小的存储设备在嵌入式系统中得到越来越多的应用。它是一种基于半导体技术的存储设备,有着其自身的特点。它的最主要的三个特点决定了它的应用方式。
首先,每种Flash设备的数据写入只能由1写成0或者由0写成1。要想Flash设备能够重新写入新数据,只能对Flash进行擦除后再写入新数据。这就意味着每当Flash中的某个数据区被写过之后,就不能够再在这个区写入新数据,即使这片区的数据已经作废,必须先将这部分区域擦除才能写入新的数据,而不能象硬盘那样直接写入。
其次,Flash设备的擦除操作按照块进行擦除,每个擦除块的大小为4K到128K不等,不是按照字节来擦除。这就意味着即使要修改1byte的数据,也要擦除一个整块来进行数据修改。
最后,Flash的擦除次数有限,当擦除次数超过规定次数时,会造成Flash的永久性损坏。
在现有技术中,都对Flash的这些特性进行处理。在对Flash进行数据操作时,上层操作系统都是根据逻辑地址对Flash进行访问。对上层系统而言,Flash此时就相当于一个硬盘。一般而言,Flash的管理软件都对Flash进行了封装,使得Flash对外就是一个地址连续分布的物理设备。它对上层传入的逻辑地址进行了处理,并转换到Flash的实际物理地址,然后根据得到的实际物理地址去进行数据操作。此时,Flash的管理软件建立了一个逻辑地址到物理地址的转换表,并根据该表来得到相应的物理地址或者逻辑地址。
对于Flash的读取操作比较简单,直接返回读到的数据即可。但在对Flash进行写入时,则不同。此时需要先判断写入的地址是否已经被写过数据。如果该地址没有被写过数据,则可以直接将新数据写入;如果已经写入过数据,则需要先将该地址所在擦除块的所有数据进行保存,再将该块进行擦除,然后才能写入新数据,并将该擦除块中的其余有效数据写入。这样操作必然导致效率低下,并且在Flash断电时很容易导致数据丢失。
目前Flash存储设备的典型应用是M-System公司的TFFS(True Flash File System)文件系统。但是该系统进行了复杂的虚拟扇区地址映射,并在很大程度上依赖于内存中建立的以及在Flash上保存的映射关系。一旦映射关系中出现一点异常很容易导致扇区操作错误并改写正常数据。
已知现有技术中,中国专利申请CN200410050952“提高闪存盘数据写入速度的方法”以及公开号为WO2007019220的国外专利申请“DATA CONSOLIDATION AND GARBAGE COLLECTION INDIRECT DATA FILES STORAGE MEMORIES”(直接数据文件存储器的数据整合和垃圾回收)涉及到闪存数据的处理。
中国专利申请CN200410050952“提高闪存盘数据写入速度的方法”有以下不足:1.该专利只是通过将擦除块集中收集、集中擦除的方法来提高Flash的写入速度,但是没有提出如何分散擦除各个擦除块来延长Flash的使用寿命;2.该专利只是对擦除块的异常断电做了处理,没有对扇区更新进行保护。
公开号为WO2007019220的国外专利申请“DATACONSOLIDATION AND GARBAGE COLLECTION IN DIRECTDATA FILES STORAGE MEMORIES”(直接数据文件存储器的数据整合和垃圾回收)对整个文件系统都进行了说明,不利于Flash闪存设备在别的文件系统上的应用。
发明内容
鉴于上述问题,本发明的主要目的是针对现有技术中对闪存设备的数据操作映射关系复杂、效率低的缺陷,提供一种闪存设备的数据处理方法,以简化映射关系,提高效率。该数据处理方法中包括数据读写方法、闪存设备异常断电后数据恢复方法、垃圾扇区回收方法、以及校验闪存中数据正确性以及闪存的擦除情况的方法。
根据本发明的闪存设备数据处理方法,包括以下步骤:步骤S102,在初始化时,对闪存设备进行扫描,在主机内建立由具有相同逻辑块号的物理块组成的队列构成的逻辑块队列组、由具有用于写入数据的空数据空间的物理块构成的备用空物理块队列;以及步骤S104,根据上层系统的逻辑命令,利用所述逻辑块号寻找相应的所述逻辑块队列组,扫描所述逻辑块队列组中的所述物理块,根据扫描结果,借助于备用空物理块队列,来处理所述闪存设备中的数据。
优选地,在上述的数据处理方法中,步骤S104中包括数据读取步骤:步骤S104-2,接收并解析上层系统传入的逻辑命令,计算操作的逻辑块号和逻辑块内偏移扇区号;以及步骤S104-4,根据计算出的逻辑块号和逻辑块内偏移扇区号扫描逻辑块队列组,找到对应的扇区,读取数据。
优选地,在上述的数据处理方法中,步骤S104中还包括以下数据写入步骤:步骤S104-6,在写操作的情况下,判断是在新扇区中写入数据还是修改原扇区中的数据,在新扇区中写入数据的情况下,若逻辑块队列中存在新扇区,则直接写入数据到新扇区,否则从备用空物理块队列中分配空闲物理块,将数据写入空闲物理块中;或者在修改原扇区中的数据的情况下,若原扇区所在的逻辑块队列中存在空闲扇区,则在空闲扇区中写入数据,并更新扇区映射关系,否则从备用空物理块队列中分配空闲物理块,将数据写入新物理块中,并更新扇区映射关系。
优选地,在上述的数据处理方法中,步骤S104-6包括以下步骤:步骤S104-6-2,若对逻辑块队列组进行扫描而未找到对应逻辑块号的逻辑块队列,则从备用空物理块队列中分配空闲物理块,将数据写入空闲物理块中;或者,步骤S104-6-4,若找到对应逻辑块号的逻辑块队列,则在逻辑块队列中寻找块内偏移扇区号;步骤S104-6-6,若未找到块内偏移扇区号,则判断逻辑块队列中是否有空闲扇区:若有空闲扇区,则在空闲扇区中写入数据;若没有空闲扇区,则从备用空物理块队列中分配空闲物理块,并将数据写入空闲物理块中;或者步骤S104-6-8,若找到块内偏移扇区号,则判断逻辑块队列中是否有空闲扇区:若有空闲扇区,则在空闲扇区中写入数据,并更新逻辑扇区映射关系;若没有空闲扇区,则从备用空物理块队列中分配空闲物理块,将数据写入空闲物理块,并更新逻辑扇区映射关系。
优选地,在上述的数据处理方法中,每个物理块中包括扇区数据属性信息及状态标志,并且步骤S104中包括数据恢复步骤:步骤S104-8,在数据写入过程中修改扇区数据的情况下,将扇区标记为第一状态,将数据写入扇区所在的逻辑块队列中的空闲扇区、或者不存在空闲扇区的情况下写入从备用空物理块队列中分配的空闲物理块中,并将被修改的扇区标记为第二状态,其属性置为无效;以及步骤S104-10,异常断电重启后,对逻辑块队列组中各个物理块中的扇区进行扫描,根据扇区的状态对扇区中的数据进行恢复或擦除处理。
优选地,在上述的数据处理方法中,步骤S104-10还包括以下数据恢复步骤:步骤S104-10-2,异常断电重启后,对逻辑块队列组中各个物理块中的扇区进行扫描,寻找标记为第一状态的扇区;步骤S104-10-4,如果找到标记为第一状态的扇区,则寻找与其具有相同逻辑块内偏移扇区号的扇区;步骤S104-10-6,若存在与其具有相同逻辑块内偏移扇区号的扇区且其数据有效,则将第一状态的扇区的属性置为无效,并将其标记为第二状态,否则,执行以下步骤;步骤S104-10-8,在逻辑块队列中的物理块中分配空闲扇区或者在逻辑块队列中的物理块中不存在空闲扇区的情况下从备用空物理块队列中分配空闲物理块,将第一状态扇区中的数据拷贝到新扇区或空闲物理块中,将第一状态的扇区标记为第二状态且属性置为无效。
优选地,在上述的数据处理方法中,在初始化过程中在主机内还建立中间块和待擦除队列;中间块用于存放待回收的物理块中的有效数据;待擦除队列是其中的有效数据被完全拷贝到中间块后的垃圾块;在步骤S104中包括以下步骤:步骤S104-12,在进行垃圾扇区回收时,将待回收的逻辑块队列中的所有物理块状态标记为第一状态,从备用空物理块队列中取出空闲物理块,并置为第三状态,将待回收的逻辑块队列中的所有物理块中的有效扇区拷贝到空闲物理块中,将空闲物理块属性置为第四状态,并将待回收的逻辑块队列中的所有物理块标记为第二状态;以及步骤S104-14,在重启后,对每个逻辑块队列中的物理块进行扫描,根据物理块的状态对物理块中的数据进行恢复或擦除处理。
优选地,在上述的数据处理方法中,步骤S104-14中包括以下步骤:步骤S104-14-2,判断其是否有第一状态以及第二状态的物理块;并且寻找具有第三状态以及第四状态的物理块,若找到,则将其列为中间块,其中,所述中间块用于存放待回收的所述物理块中的有效数据;步骤S104-14-4,如果某逻辑块队列中只有第一状态物理块,则检查其中是否有中间块,步骤S104-14-6,如果没有中间块,则将第一状态的物理块的数据拷贝到备用空物理块中,并将第一状态的物理块加入到待擦除队列中,将拷入了数据的备用空物理块放到逻辑块队列中,其中,所述待擦除队列是其中的有效数据被完全拷贝到所述中间块后的垃圾块;步骤S104-14-8,如果有中间块,并且中间块处于第四状态,则将所有处于第一状态的物理块标记为第二状态,将其加入到待擦除队列中;若中间块状态为第三状态,则将第一状态的物理块的有效扇区数据拷贝到空闲物理块中,并将第一状态的物理块标记为第二状态并将其加入到待擦除队列中,将拷入了数据的备用空物理块放到逻辑块队列中;或者步骤S104-14-10,如果逻辑块队列中既有第一状态物理块又有第二状态物理块,或者只有第二状态物理块,则必存在中间块,将中间块放到逻辑块队列中,并且在有第一状态的物理块的情况下将其标记为第二状态,并放到待擦除队列中。
优选地,在上述的数据处理方法中,步骤S104中包括数据校验步骤:步骤S104-16,在写入扇区数据时,同时生成扇区数据的校验冗余数据,并写入该扇区的校验数据区;步骤S104-18,在重启后,初始化时,先读取相应扇区数据,计算扇区的校验数据,再读取扇区校验数据区中保存的扇区的校验数据;以及步骤S104-20,将计算的扇区的校验数据和读出的扇区的校验数据进行对比,以得知扇区数据的正确性。
在上述的数据处理方法中,在初始化时还在主机中建立中间块和待擦除队列;其中,中间块用于存放待回收的逻辑块队列中的有效数据;待擦除队列是其中的有效数据被完全拷贝后需要回收的垃圾块;步骤S104包括垃圾扇区回收步骤:步骤S104-22,将待回收的逻辑块队列中的所有有效数据都拷贝到中间块中,然后将逻辑块队列中的物理块释放,并将物理块放到待擦除队列中去;以及步骤S104-24,按照先进先出的原则对逻辑块队列进行擦除,并将擦除后的物理块放到备用空物理块队列的尾部,循环使用。
优选地,在上述的数据处理方法中,在逻辑块管理部分包括用于在擦除过程中对擦除次数进行记录的参数,记录步骤如下:步骤S104-26,在每次擦除一个物理块时,先读取已经记录的擦除次数,然后再对物理块进行擦除;以及步骤S104-28,将读取的擦除次数加1后写入到物理块的管理部分。
优选地,在上述的数据处理方法中,逻辑块中包括逻辑块管理信息、扇区管理信息、以及扇区数据区。
优选地,在上述的数据处理方法中,逻辑块管理信息至少包括以下中的一个或多个:逻辑块大小、扇区大小、擦除次数、块写入完成标志、块替代标志以及逻辑块号。
优选地,在上述的数据处理方法中,逻辑块以扇区为单位划分为多个页,逻辑块中包括用于描述每个页的属性的空间,属性至少包括以下中的一个或多个:使用/未使用、校验数据、对应逻辑扇区地址、扇区数据属性、被替代状态。
通过本发明的技术方案,简化了Flash闪存设备操作时的逻辑地址映射关系,降低了对内存建立的映射关系表的依赖,提高了数据操作的效率,并维护了Flash中数据的完整性,并且实现了均匀使用各个物理块,延长了Flash的正常使用寿命。另外,还对Flash的使用状况进行了记录。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示例性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明实施例的物理块管理结构和扇区管理结构示意图;
图2是根据本发明实施例的数据处理方法流程图;
图3是根据本发明实施例的数据读写操作流程图;
图4是根据本发明实施例的Flash异常断电扇区处理示意图;
图5是根据本发明实施例的Flash异常断电物理块处理流程图;
图6是本发明实施例的Flash物理块擦除状态数据生成流程图;
图7是本发明实施例的Flash扇区数据校验流程图;以及
图8描述了垃圾扇区的回收过程流程图。
具体实施方式
以下将参照附图来描述本发明的优选实施例。
如图1所示,其显示了本发明实施例中逻辑块管理和扇区管理结构。
本发明中以Flash的擦除块为单位,将Flash分成多个逻辑块,并对这些逻辑块进行编号,如图1中Flash内部结构(图1-100)所示。每个逻辑块的数据区分成3个部分,包括逻辑块头部的逻辑块管理信息、扇区管理信息以及扇区数据区,如图1中逻辑块结构(图1-101)所示。
如图1中块管理结构(图1-102)所示,逻辑块头部的逻辑块管理信息用来管理逻辑块。该管理信息包括逻辑块的大小、扇区大小、擦除次数、块写入完成标志、块替代标志以及逻辑块号。
如图1中扇区管理结构(图1-103)所示,每个逻辑块中再以扇区(512Bytes)为单位分成多个页,并在每个逻辑块中划出一定的空间用来描述每个页的属性,包括已使用/未使用、校验数据、对应逻辑扇区地址、扇区数据属性、被替代状态等属性。
在主机内存中,通过建立“逻辑块队列组”、“备用空物理块队列”、“待擦除块队列”对Flash中的逻辑块进行描述和管理。以下的实施例中对如何应用此处的逻辑块管理和扇区管理结构进行数据处理进行详细描述。
图2是根据本发明实施例的数据处理方法流程图;
本发明主要通过在初始化时,对Flash闪存设备进行扫描,在主机内建立“逻辑块队列组”、“备用空物理块队列”、“待擦除块队列”、“中间块”信息,利用这些信息来对Flash闪存设备进行操作,其中:
逻辑块队列组:其包括多个具有相同逻辑块号的物理块组成的队列,其中逻辑块存放有效数据,包括逻辑块管理部分、扇区管理部分以及文件数据存放部分;
备用空物理块队列:除了包括逻辑块管理部分以及扇区管理部分外,还包括可以写入新数据的空的数据空间。在本发明中,备用空物理块队列必须有一块空块存在,否则认为Flash空间不够,需要进行垃圾扇区回收;
待擦除块队列:当原逻辑块队列中的逻辑块的有效数据被完全拷贝后,其就变成垃圾块,需要被擦除才能重新使用,这些块组成的队列就是待擦除块队列;
中间块:在垃圾扇区回收时,需要将垃圾扇区所在物理块的有效数据拷贝到一个空块上,这个空块就是中间块。
根据本发明的一个实施例,数据处理方法包括以下步骤:步骤S102,在初始化时,对闪存设备进行扫描,在主机内建立由具有相同逻辑块号的物理块组成的队列构成的逻辑块队列组、由具有用于写入数据的空数据空间的物理块构成的备用空物理块队列;以及步骤S104,根据上层系统的逻辑命令,利用逻辑块号寻找相应的逻辑块队列组,扫描逻辑块队列组中的物理块,根据扫描结果,借助于备用空物理块队列,来处理闪存设备中的数据。
其中在步骤S104中,包括以下步骤:1),接收上层系统传入的逻辑地址,并根据逻辑地址、逻辑块大小及扇区大小计算出实际操作的逻辑块号(LBN)和逻辑块内偏移扇区号(OSN);2),在逻辑块队列组中以逻辑块号(LBN)为索引寻找相应的逻辑块队列(LBN);3),在逻辑块队列(LBN)中,扫描每个物理块的扇区属性,根据扫描结果对数据进行操作。
其中,此处所说的对数据进行操作可包括数据存取、数据擦除、异常断电恢复、垃圾扇区回收、数据校验、擦除次数记录等等,将在下面的实施例中进行详细描述。
图3描述了根据本发明实施例的数据读写操作流程图,包括以下步骤:
步骤S302,接收到上层操作命令后,解析上层命令;
步骤S304,根据上层传入的逻辑地址计算操作的逻辑块号(LBN)和逻辑块内偏移扇区号(OSN),以确定所需要操作的扇区;
步骤S306,判断是读操作还是写操作,如果是读操作,则执行步骤S308,若是写操作则执行步骤S310;
步骤S308,根据计算出的逻辑块号和逻辑块内偏移扇区号读取扇区数据;
步骤S310,判断在逻辑块队列组中有没有对应上述计算出的逻辑块队列号的逻辑块队列[LBN],如果没有逻辑块队列[LBN],则表明要写一个新的扇区,并且要写的地址已经超过当前已有的数据区,这样就需要分配一个新的物理块,执行步骤S312,否则如果逻辑块队列组中存在逻辑块队列[LBN],则执行步骤S314;
步骤S312,从备用空物理块队列中分配一个新的物理块,并将新的数据和扇区管理信息写入到该块中,并生成逻辑块队列[LBN];
步骤S314,在逻辑块队列[LBN]的所有物理块中寻找块内偏移扇区号OSN;
步骤S316,判断寻找结果,如果在逻辑块队列[LBN]的所有物理块中没有扇区的块内偏移扇区号等于OSN,那就意味着是新写入的数据,需要分配一个空闲扇区,执行步骤S318,否则,如果在逻辑块队列[LBN]的物理块中已经有扇区的块内偏移扇区号等于OSN,那就意味着是修改该扇区的数据,此时由于原来的扇区已经有数据,直接写入会导致写入数据不正确,需要分配一个新的扇区,此时执行步骤S320;
步骤S318,判断逻辑块队列[LBN]的所有物理块中有没有空闲扇区,若不存在空闲扇区则返回到步骤312,从备用空物理块队列中分配一个新的物理块,并将新的数据和扇区管理信息写入到该块中,并生成逻辑块队列[LBN],若有空闲扇区则执行步骤S322;
步骤S320,将已经存在的扇区标志为“被替代开始”,然后执行步骤S324;
步骤S322,在找到的空闲扇区中写入数据和扇区管理信息;
步骤S324,检查逻辑块队列[LBN]中是否有空闲扇区,如果有空闲扇区存在,则执行步骤S326,否则执行步骤S330;
步骤S326,在空闲扇区中写入数据以及扇区管理信息;以及
步骤S328,将先前存在的扇区标志为“数据无效”以及“被替代结束”;
步骤S330;从备用空物理块队列中分配一个新的物理块,并将新数据写入。
上述步骤中,需要从备用空物理块队列取出空物理块进行使用,如果当前备用空物理块队列中只剩下一块空闲物理块,则需要进行垃圾扇区的回收,以便写入新的数据。垃圾扇区回收程序也可以作为后台任务运行,当系统空闲时进行垃圾扇区的回收。这样在系统写入文件数据时就无需进行垃圾扇区回收,节省了操作时间,提高了Flash操作的效率。
图4和图5示出了本发明实施例的Flash初始化中对异常断电的处理流程图,图4和图5中Flash异常断电处理流程分别从扇区角度和擦除块的角度对Flash中的数据进行了处理,通过判断在Flash操作中建立的互斥标志来判断Flash断电后的有效数据,并对数据进行恢复,保证了Flash的数据稳定性和一致性。
其中,从扇区角度是在写数据过程中异常断电的情况下,再次启动后所进行的数据恢复过程;物理块角度来说,也就是在垃圾扇区回收过程中异常断电的情况下,再次启动后所进行的数据恢复过程。
图4是根据本发明实施例的Flash异常断电扇区处理示意图,其包括以下步骤:
步骤S402,在对Flash进行初始化时,对逻辑块队列组中的各个物理块的扇区进行扫描,在同一个逻辑块队列中寻找扇区属性被设置为“被替代开始”的扇区(此处标记为200);
步骤S404,判断是否存在扇区被标记为“被替代开始”的扇区;
步骤S406,如果没有这样的扇区,则扫描下一个逻辑块队列,直到所有的逻辑块队列扫描完毕;
步骤S406,如果有这样的扇区(200)存在,则寻找与扇区(200)具有相同的逻辑块内偏移扇区号(OSN)的扇区(此处标记为300);
步骤S408,判断是否存在扇区(300),若不存在则执行步骤S410,否则执行步骤S412;
步骤S410,在该逻辑块队列中申请一个新的扇区(此处标记为400),将扇区(200)的数据拷贝到扇区(400)中,扇区(200)置为无效扇区;
步骤S412,判断扇区(300)数据是否有效,若无效,则执行步骤S410,否则,执行步骤S414;
步骤S414;置扇区(200)的数据属性为“无效”,改“被替代开始”状态为“被替代结束”(图4-307)。
图5是根据本发明实施例的Flash异常断电物理块处理流程图;
根据本发明的实施例,在进行垃圾扇区回收时,先将逻辑块队列(N)中的所有物理块属性置成“替换开始”标志,然后从备用空物理块队列中取出一块空闲物理块(此处标记为100),将其属性置为“写入开始”,再将逻辑块队列(N)中的所有有效扇区拷贝到物理块(100)中,写入逻辑块号,并把物理块(100)属性置为“写入结束”。最后将逻辑块队列(N)中的所有块置成“替换结束”标志。若在此过程中断电,则执行以下步骤,进行数据恢复。该数据恢复步骤包括:
步骤S502,在初始化过程中,对逻辑块队列中的物理块进行扫描,检查其是否有“替换开始”标志和“替换结束”标志,以及“写入开始”或者“写入结束”标志,其中,在对每个物理块进行扫描时,如果有物理块(此处标记为500)的写入标志为“写入开始”或者“写入结束”,则将其列为中间块;
步骤S504判断是否存在标记为“替换开始”标志和“替换结束”标志的逻辑块队列;
步骤S506,如果没有这样的逻辑块队列,则扫描下一个逻辑块队列,一直扫描完所有的逻辑块队列,退出;
步骤S508,如果存在这样的逻辑块,则判断逻辑块队列中的物理块是否只有“替换开始”标志;如果不是只有“替换开始”标志,则执行步骤S510,否则执行步骤S514;
步骤S510,在既有“替换开始”标志又有“替换结束”标志,或者只有“替换结束”标志的情况下(此两种情况下必有中间块),将有“替换开始”标志的物理块设置为“替换结束”并放到待擦除队列中;
以及步骤S512,将中间块放到逻辑块队列(M)中;
步骤S514,检查有无中间块,如果没有中间块,则执行步骤S516,否则执行步骤S518;
步骤S516,将有“替换开始”标志的物理块的数据拷贝到空闲块中,并将这些物理块标志为“替换结束”标志,将其加入到待擦除队列中;
步骤S518,检查中间块标志是否为“写结束”标志,若是,则执行步骤S520,否则执行步骤S522;
步骤S520,将所有标志为“替换开始”的物理块标志为“替换结束”,并将其加入到待擦除队列中;
步骤S522,并将中间块放到待擦除队列中,并且继续执行步骤S516。
图6对本发明中的Flash擦除块的擦除状态数据的生成进行了描述。在本发明的实施例中,Flash每个逻辑块管理部分有一个参数用来记录Flash擦除块的擦除次数。包括以下步骤:
步骤S602,在每次擦除一个块时,先读取已经记录的擦除次数;
步骤S604,对该块进行擦除;以及
步骤S606,将读取的擦除次数加1后写入到该块的管理部分。
这样,逐个读取每个擦除块的擦除次数就能够知道Flash的擦除情况,了解Flash的使用状况。
图7描述了Flash中扇区数据校验的流程图。
在本发明的实施例中,在写入扇区数据时,同时生成该扇区数据的校验冗余数据,并写入该扇区的校验标志处。
包括以下步骤:
步骤S702,在Flash初始化时,读取扇区数据并计算扇区的校验数据;以及
步骤S704,读取保存的该扇区校验数据;以及
步骤S706,将计算的和读出的校验数据进行对比就可以知道扇区数据的正确性,并可以对扇区数据进行校正。
图8描述了垃圾扇区的回收过程流程图。
该方法的策略在于对逻辑块队列组中垃圾扇区最多以及擦除次数最少的逻辑块队列进行垃圾扇区的回收。包括以下步骤:
步骤S802,将逻辑块队列中的所有有效数据都拷贝到中间空闲块中;
步骤S804,将逻辑块队列中的物理块释放,并将这些物理块置成“待擦除”,将其放到待擦除队列中去;以及
步骤S806,按照先进先出的原则进行擦除,并将擦除后的物理块放到备用空物理块队列的尾部,供循环使用。
综上所述,通过本发明的技术方案,简化了Flash闪存设备操作时的逻辑地址映射关系,降低了对内存建立的映射关系表的依赖,提高了数据操作的效率;并对Flash闪存设备异常断电提供了保护,维护了Flash中数据的完整性;并且通过本发明的物理块擦除管理方法,做到均匀使用各个物理块,延长了Flash的正常使用寿命;以及通过避免在写入过程中等待擦除操作结束再执行其他操作而提高了数据访问的效率;另外,还能够了解Flash的使用状况。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (10)
1.一种闪存设备数据处理方法,其特征在于包括以下步骤:
步骤S102,在初始化时,对闪存设备进行扫描,在主机内建立由具有相同逻辑块号的物理块组成的队列构成的逻辑块队列组、由具有用于写入数据的空数据空间的物理块构成的备用空物理块队列;以及
步骤S104,根据上层系统的逻辑命令,利用所述逻辑块号寻找相应的所述逻辑块队列组,扫描所述逻辑块队列组中的所述物理块,根据扫描结果,借助于备用空物理块队列,来处理所述闪存设备中的数据。
2.根据权利要求1所述的数据处理方法,其特征在于:所述步骤S104中包括数据读取步骤:
步骤S104-2,接收并解析上层系统传入的所述逻辑命令,计算操作的所述逻辑块号和逻辑块内偏移扇区号;以及
步骤S104-4,根据计算出的所述逻辑块号和逻辑块内偏移扇区号扫描所述逻辑块队列组,找到对应的扇区,读取数据。
3.根据权利要求1所述的数据处理方法,其特征在于:所述步骤S104中包括数据写入步骤:
步骤S104-6,在写操作的情况下,判断是在新扇区中写入数据还是修改原扇区中的数据,
在新扇区中写入数据的情况下,若逻辑块队列中存在所述新扇区,则直接写入数据到所述新扇区,否则从所述备用空物理块队列中分配空闲物理块,将数据写入所述空闲物理块中;或者
在修改原扇区中的数据的情况下,若所述原扇区所在的所述逻辑块队列中存在空闲扇区,则在所述空闲扇区中写入数据,并更新扇区映射关系,否则从所述备用空物理块队列中分配空闲物理块,将数据写入所述空闲物理块中,并更新扇区映射关系。
4.根据权利要求3所述的数据处理方法,其特征在于:所述步骤S104-6包括以下步骤:
步骤S104-6-2,若对所述逻辑块队列组进行扫描而未找到对应所述逻辑块号的逻辑块队列,则从所述备用空物理块队列中分配空闲物理块,将数据写入所述空闲物理块中;或者
步骤S104-6-4,若找到对应所述逻辑块号的逻辑块队列,则在所述逻辑块队列中寻找块内偏移扇区号;
步骤S104-6-6,若未找到所述块内偏移扇区号,则判断所述逻辑块队列中是否有空闲扇区:若有所述空闲扇区,则在所述空闲扇区中写入数据;若没有所述空闲扇区,则从所述备用空物理块队列中分配空闲物理块,并将数据写入所述空闲物理块中;或者
步骤S104-6-8,若找到所述块内偏移扇区号,则判断所述逻辑块队列中是否有空闲扇区:若有所述空闲扇区,则在所述空闲扇区中写入数据,并更新逻辑扇区映射关系;若没有所述空闲扇区,则从所述备用空物理块队列中分配空闲物理块,将数据写入所述空闲物理块,并更新逻辑扇区映射关系。
5.根据权利要求1所述的数据处理方法,其特征在于:所述步骤S104中包括数据恢复步骤:
步骤S104-8,在数据写入过程中修改扇区数据的情况下,将所述扇区标记为第一状态,将数据写入所述扇区所在的逻辑块队列中的空闲扇区、或者不存在所述空闲扇区的情况下写入从所述备用空物理块中分配的空闲物理块中,并将所述被修改的所述扇区标记为第二状态,其属性置为无效;以及
步骤S104-10,异常断电重启后,对所述逻辑块队列组中各个物理块中的扇区进行扫描,根据扇区的状态对扇区中的数据进行恢复或擦除处理。
6.根据权利要求5所述的数据处理方法,其特征在于步骤S104-10包括以下步骤:
步骤S104-10-2,异常断电重启后,对所述逻辑块队列组中各个物理块中的扇区进行扫描,寻找标记为第一状态的扇区;
步骤S104-10-4,如果找到所述标记为第一状态的扇区,则寻找与其具有相同逻辑块内偏移扇区号的扇区;
步骤S104-10-6,若存在所述与其具有相同逻辑块内偏移扇区号的扇区且其数据有效,则将所述第一状态的扇区的属性置为无效,并将其标记为第二状态,否则,执行以下步骤;
步骤S104-10-8,在所述逻辑块队列中的物理块中分配空闲扇区或者在所述逻辑块队列中的物理块中不存在所述空闲扇区的情况下从所述备用空物理块队列中分配空闲物理块,将所述第一状态扇区中的数据拷贝到所述空闲扇区或空闲物理块中,将所述第一状态的扇区标记为第二状态且属性置为无效。
7.根据权利要求1所述的数据处理方法,其特征在于:
在步骤S104中包括以下数据恢复步骤:
步骤S104-12,在进行垃圾扇区回收时,将待回收的所述逻辑块队列中的所有物理块状态标记为第一状态,从所述备用空物理块队列中取出空闲物理块,并置为第三状态,将所述待回收的所述逻辑块队列中的所有物理块中的有效扇区拷贝到所述空闲物理块中,将所述空闲物理块属性置为第四状态,并将所述待回收的所述逻辑块队列中的所有物理块标记为第二状态;以及
步骤S104-14,在重启后,对每个所述逻辑块队列中的物理块进行扫描,根据所述物理块的状态对所述物理块中的数据进行恢复或擦除处理;
其中,所述步骤S104-14中包括以下步骤:
步骤S104-14-2,判断其是否有所述第一状态以及所述第二状态的物理块;并且寻找具有所述第三状态以及所述第四状态的物理块,若找到,则将其列为中间块,其中,所述中间块用于存放待回收的所述物理块中的有效数据;
步骤S104-14-4,如果某逻辑块队列中只有所述第一状态的物理块,则检查其中是否有所述中间块;
步骤S104-14-6,如果没有所述中间块,则将所述第一状态的物理块的数据拷贝到备用空物理块中,并将所述第一状态的物理块加入到待擦除队列中,其中,所述待擦除队列是其中的有效数据被完全拷贝到所述中间块后的垃圾块;
步骤S104-14-8,如果有所述中间块,并且所述中间块处于所述第四状态,则将所有处于所述第一状态的物理块标记为第二状态,将其加入到所述待擦除队列中;若所述中间块状态为所述第三状态,则将所述第一状态的物理块的有效扇区数据拷贝到所述空闲物理块中,并将所述第一状态的物理块标记为第二状态并将其加入到待擦除队列中,将拷入了数据的所述备用空物理块放到所述逻辑块队列中;或者
步骤S104-14-10,如果所述逻辑块队列中既有所述第一状态物理块又有所述第二状态物理块,或者只有所述第二状态物理块,则必存在中间块,将所述中间块放到所述逻辑块队列中,并且在有所述第一状态的物理块的情况下将其标记为第二状态,并放到所述待擦除队列中。
8.根据权利要求1所述的数据处理方法,其特征在于,所述物理块中包括扇区校验数据区,所述步骤S104中包括数据校验步骤:
步骤S104-16,在写入扇区数据时,同时生成所述扇区数据的校验冗余数据,并写入该扇区的校验数据区;
步骤S104-18,在重启后,初始化时,先读取相应的所述扇区数据,计算所述扇区的校验数据,再读取所述扇区校验数据区中保存的所述扇区的校验数据;以及
步骤S104-20,将所述计算的扇区的校验数据和读出的扇区的校验数据进行对比,以得知扇区数据的正确性。
9.根据权利要求1所述的数据处理方法,其特征在于所述步骤S104包括垃圾扇区回收步骤:
步骤S104-22,将待回收的逻辑块队列中的所有有效数据都拷贝到中间块中,然后将所述逻辑块队列中的物理块释放,并将所述物理块放到待擦除队列中去,将中间块放到所述逻辑块队列中;其中,所述中间块用于存放待回收的逻辑块队列中的有效数据,所述待擦除队列是其中的有效数据被完全拷贝后需要回收的垃圾块;以及
步骤S104-24,按照先进先出的原则对所述待回收的逻辑块队列进行擦除,并将擦除后的所述物理块放到所述备用空物理块队列的尾部,循环使用。
10.根据权利要求9所述的数据处理方法,其特征在于:在逻辑块管理部分包括用于在擦除过程中对擦除次数进行记录的参数,记录步骤如下,
步骤S104-26,在每次擦除一个物理块时,先读取已经记录的擦除次数,然后再对所述物理块进行擦除;以及
步骤S104-28,将读取的擦除次数加1后写入到所述物理块的管理部分。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200810004224 CN101231617B (zh) | 2008-01-21 | 2008-01-21 | 闪存设备的数据处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200810004224 CN101231617B (zh) | 2008-01-21 | 2008-01-21 | 闪存设备的数据处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101231617A CN101231617A (zh) | 2008-07-30 |
CN101231617B true CN101231617B (zh) | 2013-03-20 |
Family
ID=39898111
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200810004224 Expired - Fee Related CN101231617B (zh) | 2008-01-21 | 2008-01-21 | 闪存设备的数据处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101231617B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI416525B (zh) * | 2009-12-15 | 2013-11-21 | Asolid Technology Co Ltd | 非揮發性記憶體裝置及其損耗平均方法 |
CN102592676A (zh) * | 2011-01-17 | 2012-07-18 | 上海华虹集成电路有限责任公司 | 一种可回收使用的Nandflash存储系统 |
CN102880553B (zh) * | 2012-09-18 | 2015-09-16 | 武汉虹信通信技术有限责任公司 | 一种基于mcu的片外flash文件系统的读写方法 |
WO2018051647A1 (ja) * | 2016-09-16 | 2018-03-22 | ソニー株式会社 | メモリコントローラ、メモリシステム、情報システムおよびメモリ制御方法 |
KR20180064198A (ko) * | 2016-12-05 | 2018-06-14 | 에스케이하이닉스 주식회사 | 데이터 저장 장치 및 그것의 동작 방법 |
CN107193493A (zh) * | 2017-05-19 | 2017-09-22 | 惠州佰维存储科技有限公司 | Nand闪存块的管理方法及其系统 |
CN108255740A (zh) * | 2017-12-07 | 2018-07-06 | 深圳市中易通安全芯科技有限公司 | 一种flash均衡擦写方法及系统 |
CN108984131B (zh) * | 2018-07-25 | 2021-07-16 | 浪潮电子信息产业股份有限公司 | 数据操作的处理方法以及相关装置 |
CN111949558B (zh) * | 2019-05-16 | 2023-11-21 | 兆易创新科技集团股份有限公司 | 一种垃圾数据回收方法、装置和存储设备 |
CN113204316A (zh) * | 2021-05-19 | 2021-08-03 | 中国人民解放军93216部队 | 一种使用flash进行高效数据存储的方法 |
CN114218018B (zh) * | 2022-02-18 | 2022-05-27 | 深圳佰维存储科技股份有限公司 | 系统数据保护方法、装置、可读存储介质及电子设备 |
-
2008
- 2008-01-21 CN CN 200810004224 patent/CN101231617B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101231617A (zh) | 2008-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101231617B (zh) | 闪存设备的数据处理方法 | |
CN101169751B (zh) | 具有闪存设备的系统及其数据恢复方法 | |
CN102135942B (zh) | 一种存储设备中实现损耗均衡的方法及存储设备 | |
US6381176B1 (en) | Method of driving remapping in flash memory and flash memory architecture suitable therefor | |
CN101095121B (zh) | 高速暂存区块 | |
EP2115595B1 (en) | Memory device performance enhancement through pre-erase mechanism | |
CN102298555B (zh) | 基于nand技术的模块化闪存管理系统 | |
JP3178909B2 (ja) | 半導体メモリ装置 | |
CN102508788B (zh) | Ssd及ssd垃圾回收方法和装置 | |
CN106776376B (zh) | 缓冲存储器管理方法、存储器控制电路单元及存储装置 | |
CN101241471A (zh) | 快闪存储器系统及其垃圾收集方法 | |
TWI423026B (zh) | 資料寫入方法、記憶體控制器與記憶體儲存裝置 | |
CN102890655B (zh) | 存储器储存装置、其存储器控制器与有效数据识别方法 | |
CN102981970A (zh) | 闪存管理方法和系统 | |
CN105022695A (zh) | 数据存储方法、存储器控制电路单元与存储器存储装置 | |
US20070005929A1 (en) | Method, system, and article of manufacture for sector mapping in a flash device | |
CN101154447B (zh) | 一种闪存控制方法及闪存 | |
CN101727397B (zh) | 区块管理与更换方法、闪存储存系统及其控制器 | |
CN1701300B (zh) | 用于分解与一共用逻辑块相关联的物理块的方法和设备 | |
CN102004697B (zh) | 一种Flash的回收方法和装置 | |
CN102567221A (zh) | 数据管理方法、存储器控制器与存储器储存装置 | |
CN106814968A (zh) | 存储器管理方法与系统及其存储器存储装置 | |
CN103106148A (zh) | 区块管理方法、存储器控制器与存储器存储装置 | |
CN102375779B (zh) | 一种数据处理方法以及数据处理模块 | |
CN102841853B (zh) | 存储器管理表处理方法、存储器控制器与存储器储存装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130320 Termination date: 20180121 |
|
CF01 | Termination of patent right due to non-payment of annual fee |