闪存介质中的数据管理方法 【技术领域】
本发明涉及半导体存储领域,具体地说涉及闪存介质中数据管理方法,利用该方法对数据进行管理之后,无论在向所述闪存介质写入数据的任何时刻发生非法断电,所述闪存介质中原有的数据以及新写入的数据都不会丢失,提高了闪存介质存储数据的安全性。
背景技术
利用闪存介质的移动存储装置已大量广泛应用并逐渐取代了软盘软驱。但是,闪存介质在实际应用中也显露出其不足之处,例如用户向闪存介质中写入新数据或对已存入的数据进行修改时,由于人们早已了解的闪存介质特殊的读写特性,首先要将由相应的物理地址所指向的存储块中的数据(以下称之为原始数据) “搬迁”到另一个地址所指向的存储块中。
闪存介质读数据的原理与PC硬盘很相似,都是通过读文件分配表、目录区等来获得盘内文件的信息。如果在将原始数据进行搬迁的过程中,发生意外或用户误操作等情况造成非法断电,会使这个搬迁过程意外中断。在断电时刻对原始数据的搬迁工作尚未完成,这部分数据信息在文件分配表、目录区等内并没有及时的更新,那么这些参与搬迁的数据将无法读取,变为无效数据。这样,在此之前保存的含有这部分数据的文件成为无效文件,即造成数据丢失。
另外,由于闪存介质在读写方面地特性,闪存介质有一个对存储块擦除的操作,该操作是将存储块中的所有位设置为逻辑“1”。如果在擦除过程中断电,可能存在该存储块中一部分位已经为逻辑“1”,而尚余部分位仍为逻辑“0”的情况。这时,若再向该存储块写入新数据就会出错。
【发明内容】
针对上述现有技术中的闪存介质存在的可靠性差、容错性差,数据不安全、对非法断电错误处理能力差等不足,本发明提供了一种在闪存介质中数据管理的方法,通过该方法,可以完整地保存在非法断电前闪存介质中记录的原始数据,并保证闪存介质中所有的空存储块可用,从而提高快闪介质的稳定性、数据安全性和容错性能。
因此,本发明的目的在于提出一种闪存介质中的数据管理方法,所述闪存介质包括多个存储块,每个存储块由多个页构成,每个页包括数据存储区和冗余区,所述数据存储区一般用于记录用户数据,所述冗余区一般记录该页所在闪存芯片的专用信息和该页所在存储块的逻辑地址等索引信息,以及其他可由用户自行设定的信息,或者弃而不用。
在所述多个存储块中的至少一个存储块至少一页的冗余区设置状态标志,在所述存储块中存入数据过程中,将所述状态标志设置为未完成状态;当所述存储块中存入数据完毕后,将所述状态标志设置为完成状态。
根据本发明,上述的未完成状态表示对所述存储块的数据存入操作尚未完成;所述的完成状态表示对所述存储块的数据存入操作已完成。其中所述数据存入操作步骤包括:将指定接收新数据的存储块800中的要保留的数据复制到所述存储块900中;或者向所述存储块900中写入新数据;或者将所述原存储块800中的数据复制到所述存储块900中并且在所述原存储块800和/或900中写入新数据。上述步骤中,指定接收新数据的存储块是指根据存入数据指令中指定的目标地址,在闪存介质中寻找到的对应地址的存储块。
根据本发明的另一目的,还提供了一种向闪存介质中写数据的方法,所述闪存介质包括多个存储块,每个存储块由多个页构成,每个页包括数据存储区和冗余区,包括以下步骤:
接受写新数据的指令;在所述闪存介质中找到与所述写指令中指定的逻辑地址对应的存储块800;判断所找到的存储块800是否为空;如存储块800为空,则在所找到的存储块800中写入新数据;如不为空,则查找一个空的新块900;将存储块800中要保留的数据复制到所述的新块900中,并将所述新块900中至少一页的冗余区状态标志设置为未完成状态;向所述新块900中写入新数据;将所述原块800擦除;将所述新块900中所述状态标志由未完成状态设置为完成状态。
上述写数据方法中,所述要保留的数据是原块记录的原始数据中,不会被要写入的新数据覆盖的部分。所述要保留的数据可能是原块中的全部原始数据,也可能是原始数据中的一部分。
根据本发明的又一目的,提供在闪存介质中的数据恢复方法,所述闪存介质采用上述的数据管理方法,当所述闪存介质的使用过程中每次加电时,对有可能因断电而产生的数据损坏情况采用以下步骤进行数据恢复:通过检查状态标志设置为未完成状态的存储块,找出要保留的数据所在的存储块,并进行数据恢复操作。
根据本发明的另一目的,提供在闪存介质中确保空白存储块确实可用的方法,所述闪存介质在上述操作过程中断电后,再次加电时找出冗余区全为逻辑“1”而数据存储区不全为逻辑“1”的存储块并擦除,以保证所有冗余区为空的存储块都可使用。
所述逻辑值可以数值、字符串或数字与字符串的组合来表示,例如逻辑“1”。
采用本发明提供的数据管理方法,通过对存储块设置状态标志,可以确保在对闪存介质写入新数据过程中,无论是人为的非法操作或是意外断电等情况,都不会丢失闪存介质中原有的要保留的数据,并且可以避免因上述原因造成的存储块没有被完全擦除以致再次读写出错的情况。
【附图说明】
图1是本发明数据管理方法中闪存介质原存储块和存储块的示意图;
图2示意性地说明闪存介质中存储块和页的组织结构;
图3示意性地说明闪存介质的存储块中冗余区的划分;
图4是根据本发明的闪存介质中数据管理方法写入新数据的实施例流程图;
图5是快闪存储装置加电后的数据恢复过程的实施例流程图。
【具体实施方式】
如图2所示,其示出了现有闪存介质的物理构造。所述闪存介质的最小物理存储单位是页(Page),由多个页组成一个存储块(Block,即物理块)。每一片芯片包括多个存储块。所述每个页包含若干字节的数据存储区和若干字节的冗余区,例如每页可包含512字节的数据存储区和16字节的冗余区,或者每页可包含2K字节的数据存储区和64字节的冗余区。
所述冗余区中的字节分配方法多种多样,例如可以采用一个或多个字节来设置状态标志以表示该页所在存储块的数据状态和/或工作状态。图3是闪存介质的冗余区中字节分配的一种示例。
根据本发明,在所述页的冗余区中设置状态标志以表示该页所在的存储块的状态。所述状态标志可包括完成状态(Complete)和未完成状态(Incomplete)。上述的未完成状态表示对所述存储块的数据存入操作尚未完成;所述的完成状态表示对所述存储块的数据存入操作已完成。此外,当所述冗余区的所有位都为逻辑“1”时,标志整个页为“空”,可在该页中写入新数据。
如图3所示,根据本发明的一个实施例,采用冗余区的第0个字节作为设置状态标志的标志位。然而,本领域普通技术人员可以了解,本发明并不局限于此。
接下来,结合图1和图4来说明本发明的闪存介质的数据管理方法,并进一步说明根据该管理方法,在闪存介质中存入数据的任何时刻发生非法断电均可确保数据安全的可能性。
如图1所示,所述闪存介质中采用本发明提供的数据管理方法时,数据操作可以在存储块800和900之间进行。
如图4所示,当所述闪存介质接收到来自操作系统的写入新数据指令后(步骤1),存储装置的控制器根据所述写入新数据指令所指定的逻辑地址寻找要写入新数据的存储块(以下简称原块),如步骤2所示。
在步骤3中,判断所找到的存储块800是否为空。
如果存储块800为空,则在所找到的存储块800中写入新数据,如步骤3’;
如果存储块800不为空,则查找一个空白存储块900(以下简称新块)。,如步骤4
接下来在步骤5中,存储装置的控制器要将所述原块800中要保留的数据复制到新块900中,即对原块中的要保留的数据进行搬迁。在实施搬迁的同时将新块900中的每一页的状态标志设置为未完成状态。
接着,将所述要写入的新数据写入到所述新块900中,同时将其相应页面的状态标志设置为未完成状态(步骤6)。此后,将所述原块800中数据全部擦除(步骤7)。
将新块900所有页的冗余区状态标志从未完成状态设置为完成状态(步骤8)。
根据本发明的另一种实施方式,在找到新块后,可以先在其中写入新数据,并且将新块的状态标志设置为未完成状态,然后将原块中的要保留的数据复制到所述新块中,再将新块的状态标志设置为完成状态。
在新块中复制要保留的数据步骤(步骤5)和写入新数据步骤(步骤6)也可以同时进行,在进行过程中,将新块的状态标志设置为未完成状态;对新块的复制操作和写入操作都完成之后,再将新块的状态标志设置为完成状态。
事实上,写入新数据步骤(步骤6)还可以与复制要保留的数据步骤(步骤5)混合交叉进行。
所述向存储块写数据的过程可以和对其状态标志的设置过程也可以混合交叉进行。
而擦除原块的步骤(步骤7)也可安排在将新块的状态标志设置为完成状态步骤(步骤8)之后进行。
从对上述本发明的实施方式的描述可以理解,本发明的数据管理方法的特征在于在对新块进行操作的过程中,如将原块的要保留的数据复制到新块或者在新块中写入新数据时,将新块的状态标志设置为未完成状态;对新块的数据操作完成之后,再将新块的状态标志从未完成状态设置为完成状态。
利用该数据管理方法,在对所述闪存介质进行数据写入时,即使发生非法断电,也可以保证闪存介质中原有数据不会丢失。
也就是说,通过上述的闪存介质的数据管理方法,无论在操作过程的哪一步骤发生突然断电,所述闪存介质在重新加电时都可以恢复要保留的数据。
对于上述实施例来说,如附图4,例如在将要保留的数据复制到新块,并正在将新块的状态标志设置为未完成状态时(在步骤5中)发生断电,由于对原块中的原始数据作复制操作,原块中仍然保存着原始数据,断电发生破坏的只是复制到新块中的不完整的要保留的数据。因此在重新加电时只需先擦除新块,再重复一次复制操作即可。
又例如,在原块中的要保留的数据已复制到新块中并且新块中的状态标志都已设置为未完成状态之后,还未开始向新块中写入新数据之前(即步骤5完成之后,步骤6进行之前)发生中断的情形下,新块中要保留的数据是完整的,原块中的原始数据也仍然保存着,而新数据尚未写入,中断的发生所影响的仅仅是新块的状态标志为未完成状态。因此在重新加电时只需向新块中写入新数据,然后将新块中的状态标志接着设置为完成状态。即使在向新块写入新数据的过程中发生中断(步骤6进行过程中),断电发生后只有部分数据写入到新块中,此时在重新加电时只需继续写入余下的新数据即可。
若中断发生在已将所有要写入的新数据都写入新块后,但还未开始擦除原块中的数据(步骤6完成之后,步骤7开始之前),此时原块中仍有原始数据,而且要保留的数据和新数据都已经存在于新块中,此时在重新加电时只需将新块中状态标志设置为完成状态并擦除原块。
若在将新块的状态标志设置为完成状态的过程中(步骤8进行过程中)发生中断,可能造成修改状态标志操作失败,因此在重新加电时只需将新块中状态标志再次置为完成状态即可。
在找到一个新块之前,由于尚未发生数据读写,即使发生中断,也不会丢失数据。在擦除原块中原始数据的过程中如果发生中断,其后果是原块中数据擦除不完全,在重新加电时不需进行数据恢复操作。
以上是说明在实施本发明数据管理方法的闪存介质遭遇非法断电后数据恢复的可能性。
接下来结合附图4及附图5具体说明闪存介质中实施了上述的数据管理方法,当该闪存介质因非法断电造成操作中断后,对该闪存介质再次加电时的数据恢复方法。所述存储装置的控制器在闪存介质中寻找状态标志设置为未完成状态的存储块(即前述的新块)。根据上述的数据管理方法可知,只要是在存储块中的状态标志为未完成状态,就说明该存储块在中断前的写数据步骤中使用过,并且可能含有错误数据,需要恢复。于是,控制器寻找与所述新块具有相同逻辑地址的存储块,该存储块就是在断电前写数据过程中记录原始数据的原块。
如果能够找到原块,说明中断发生在擦除原块的步骤(步骤7)前。判断所述未完成块所有页的冗余区状态标志是否都是未完成状态;若是,说明所有需要保留的数据已被搬迁完毕,要写入的新数据也已存储完毕,则擦除原块并将找到的新块的状态标志设置为完成状态;若所述新块的全部页状态标志不全是未完成状态,则擦除新块,将原块状态标志设置为完成状态,修改对照表。
如果无法找到原块,则说明中断可能发生在擦除原块的过程中(步骤7过程中)或者发生在擦除原块步骤完成后。此时将新块的页状态标志设置为完成状态,同时如前述修改对照表。
所述对照表是所述闪存介质中的物理地址与逻辑地址的映射表,所述修改对照表是将对照表中对应新块的逻辑地址改为指令中的逻辑地址。
从对上述本发明的实施方式的描述可以理解,本发明的数据恢复方法的特征在于根据闪存介质中存储块的各页的冗余区状态标志的检查,判断中断发生时刻存储块的状态,进而找出要保留的数据,进行相应的数据恢复操作。因此,对于写数据方法中的步骤调整而造成恢复数据方法的改变,是不偏离本发明思想的。
在对可能由于中断而丢失的原始数据进行恢复完成后,为确保闪存介质中存储块的冗余区所有位全为逻辑“1”的存储块确实全部为空,排除因擦除操作中断而遗留的数据,从而可能造成下次读写操作出错,因此需要对所述空白存储块进行检查排错操作。
根据本发明,可采用如下方式检查空白存储块并排错:
首先找出第0页冗余区所有位为逻辑“1”的存储块,再检查该存储块所有页的所有位是否全为逻辑“1”,如果不全为逻辑“1”,则对该存储块执行擦除操作。
根据本发明,在恢复数据过程完成之后,最好要对所有空白存储块进行上述检查排错处理,这样可以将未完全擦除的原块清空,确保所有冗余区为空的存储块可用。
根据本发明方法的另一个实施例,根据SSFDC协议将所述闪存介质分成若干个区(Zone),每个区由若干个存储块构成,并且每个区都有设置至少一个空白存储块,用于将要保留的数据复制到该存储块中。
在本实施例中,采用与前述实施例类似的数据管理方法对各区内的数据进行管理,其不同之处在于寻找新块的范围局限在原块所在的区中,并且在恢复数据操作阶段,寻找状态标志设置为未完成状态的存储块(新块)的范围也局限在该区中。借此,提高了在所述闪存介质中写数据的速度及恢复数据的速度。而且,由于数据读写操作只是在同一区内的两个存储块之间进行,所述闪存介质的其他区在上述写数据过程中不会出错,故只需查找本区内的空白存储块并排错即可。
以上是对本发明示例性地说明,本领域普通技术人员可以理解,对冗余区状态标志的设置的方案不是唯一的,搜寻新块的途径也可采用各种已知的技术。本发明的精髓是在写数据时增加状态标志的设置以鉴别所涉及的存储块的状态,从而在发生非法断电后能有效地恢复数据,保证数据的完整性。因此,不偏离本发明思想的对本发明技术方案的各种改型将落入所附本发明权利要求所限定的保留范围中。