防断电的损耗平衡存储方法

文档序号:6353634阅读:290来源:国知局

专利名称::防断电的损耗平衡存储方法
技术领域
:本发明涉及一种存储方法,更具体地涉及一种防断电的损耗平衡存储方法。
背景技术
:随着存储设备的迅速发展和广泛应用,大量需要一种能够实现多次编程、容量大,读写、擦除快捷、方便、简单,外围器件少、价格低廉的存储器件。闪存(FlashMemory)存储介质就是在这种需求下应运而生的,例如NANDFLASH。闪存是基于半导体的存储器,具有系统掉电后仍可保留内部信息,及在线擦写等功能特点,是一种替代EEPROM存储介质的新型存储器。由于它的读写速度比EEPROM更快,在相同容量的情况下成本更低,因此目前以闪存(Flash存储器)构成的存储卡正在逐步取代软磁盘,并被大量用于便携式计算机、数码相机、MP3、MP4播放器等设备中。非易失性存储器指掉电后在相当长时间内依然能有效保存数据的存储器,如EEPR0M,EPR0M,Flash等。基于Flash存储器具有非易失的特点,其常在信息安全设备中作为固件程序或数据的载体。信息安全设备是一种带有处理器和存储器的小型硬件装置,它可通过计算机的数据通讯接口与计算机连接,具有密钥生成功能,并可安全存储密钥,可预置加密算法功能。只能密钥装置与密钥相关的运算完全在装置内部运行,且智能密钥装置具有抗攻击性的特性,安全性极高。然而各类存储器,包括Flash存储器的使用寿命都是有限的。具体来说,在正常使用状态下,其使用寿命是由擦写块的最大可擦写次数决定的。超过了最大的可擦写次数,这个擦写块就成为坏块了。因此为了避免某个擦写块被过度擦写,以至于它先于其他的擦写块达到最大可擦写次数,应该考虑在尽量小的性能影响的前提下,使擦写操作均勻的分布在每个擦写块上,这一般称为损耗平衡的存储方法。然而各类存储器的一些特性造成了其在应用上的不足,特别是其读写操作做防断电保护处理这个难题一直没有很好的解决。以闪存为例,由于闪存介质固有的特性,目前运行在闪存上的文件系统要改写一个块设备的扇区时,通常是将这个扇区所在擦写块的数据读到内存中,放在缓存中,然后将缓存中与这个扇区对应的内容用新的内容替换掉,再对该擦写块执行擦写操作,最后将缓存中的数据写回该擦写块。这种实现方式的缺点是很明显的效率低,对一个扇区的更新要重写整个擦写块上的数据,也造成内存空间很大的浪费;没有提供损耗平衡,那些被频繁更新的数据所在的擦写块将首先变成坏块。
发明内容本发明提供一种防断电的损耗平衡存储方法,以克服现有技术无法实现出现断电后均衡擦写存储器物理块的技术问题。为实现上述目的,本发明采用如下技术方案一种防断电的损耗平衡存储方法,包括如下步骤步骤1扫描存储器,关联物理4块和与其对应的逻辑块号、物理块使用次数;步骤2判断是否存在两个相等且有效的物理块的逻辑块号;若是,则删除其中一个使用次数较少的物理块后进入步骤3;若否,则直接进入步骤3;步骤3生成块链表,将逻辑块号与完好的物理块一一对应以生成关联表,以及将未使用的物理块按照使用次数排序形成映射表;步骤4判断是否为读操作;若是则直接进入步骤10;若否则进入步骤5;步骤5判断是否为擦除操作;若是,则进入步骤6;若否,则进一步判断是否为写操作,是写操作则进行写操作后进入步骤10,否则直接进入步骤10;步骤6判断物理块的使用次数是否超过设定的阈值;若是,则进入步骤7;若否,则进入步骤10;步骤7搜索一个已被使用且使用次数最少的第一物理块以及一个已被使用且使用次数最多的第二物理块,将第一物理块的数据拷贝到第二物理块中;步骤8更新所述第一物理块和第二物理块的逻辑块号;步骤9删除源数据块并更新块链表和映射表;步骤10结束。上述方法有效地实现了存储器在出现断电情况下,一旦上电后就能自动恢复到损耗平衡的存储过程中,更好地提高了存储器的存储使用次数和损耗平衡存储的有效性。图1是本发明的防断电的损耗平衡存储方法的流程图。图2是本发明的防断电的损耗平衡存储方法中的块链表的格式示意图。图3是本发明的防断电的损耗平衡存储方法中的关联表的示意图。图4是本发明的防断电的损耗平衡存储方法中的NANDFLASH类型存储器格式示意图。图5是本发明的防断电的损耗平衡存储方法中的块链表和映射表的示意图。具体实施例方式为了便于本领域技术人员的理解,下面将结合具体实施例及其附图对本发明进一步详细描述。图1示出了本发明的防断电的损耗平衡存储方法的流程。如图1所示,本发明包括如下的步骤1)如果程序是第一次上电运行,那么首先扫描整个存储器,把可使用的物理块(以下简称块,此处的物理块包括已使用的和未使用的)和不可使用的坏物理块在主存中建成一个链表,在此称之为块链表(简称为BBTJadblocktable),然后把这个块链表存储到可靠的物理块中。对于NANDFLASH这种类型的存储器来说,一般是存储在block0中。如果程序不是第一次上电运行,那么将检查是否有块链表(BBT)?如果有,直接把这个块链表从存储器读到主存中,否则就像前面的第一次上电那样操作。块链表的格式见图2,块链表包含物理块号以及该物理块是否完好和是否已使用的状态数据。2)程序通过逻辑块号访问块链表中的物理块。每一个逻辑块号都对应一个物理块,当检测到物理块损坏时,重新选择一个物理块与逻辑块号对应。如图3所示,当物理块1损坏了,逻辑块号1重新对应物理块号k。这样就生成一个关联表,将每个所述逻辑块号与一个完好的物理块的物理块号关联。逻辑块号的存放位置是所述存储器的备份区,如图4所示。3)物理块使用次数的存放位置如图4所示,如果是NANDFLASH这种类型的存储器,那么每个块的使用次数存储在某页的sparearea区域。一般而言,只需存在page0的sparearea,其余的页不需要保存这个数据。4)扫描所有可用物理块的块使用次数的位置和逻辑块号,得到所有可用物理块的使用次数和逻辑块号。如果有两个逻辑块号相等的物理块存在,把使用次数最少的物理块的数据给删除掉。以物理块的使用次数为依据,把未使用的物理块重新排序生成一个链表,称之为映射表。(可以是最少使用的块排在最前,最多使用的块排在最后;也可以最多使用的块排在最前,最少使用的块排在最后)。5)当每次对物理块进行擦除时,如果擦除失败,那么把这个块标记为坏物理块,同时更新块链表(BBT)并把这个块链表存储到存储器中;如果这个物理块也在映射表中,那么把这个物理块从映射表中删除掉。否则,物理块的使用次数加一,把物理块的使用次数写入到物理块使用次数的位置;如果这个物理块不在映射表中,那么把它插入到映射表中,重新对映射表进行排序。在擦除过程中,如果物理块的使用次数超过某个阈值(这个值由用户指定),那么搜索所有已被使用的物理块,从中找出一个使用次数最少的物理块,且该物理块的使用次数要小于阈值。如果找到了这样的物理块,那么把这个物理块的数据块拷贝到使用次数最多,且未被使用的、可用的物理块,如果写入失败,把这个块标记为坏块,更新BBT,把它写入block0中,重复刚才的查找块和写块的步骤,如果到最后一个块,仍然不成功,则直接返回,否则继续进行下去。最后把对应的逻辑块号,写入对应的位置。然后,把源数据的物理块的数据给删除掉,如果删除数据后的该物理块是可用的,那么把它插入到映射表中,否则,把这个物理块标记为坏块,同时把这个块链表存储到存储器中。6)当每次对逻辑块进行写操作时,首先查询当前的逻辑块所对应的物理块是否被使用?如果未被使用,则从映射表中,找出一个使用次数最少的物理块来使用。同时更新逻辑块号与物理块号的映射关系,把这个物理块从映射表中删除掉。如果已被使用,则使用当前物理块。7)在使用过程中,如果有物理块损坏了,把它在块链表中标记出来,再把这个块链表写到存储器中。如果这个物理块也在映射表中,那么把这个物理块从映射表中删除掉。前面提供了对较佳实施例的描述,以使本领域内的任何技术人员可使用或利用本发明。对该较佳实施例,本领域内的技术人员在不脱离本发明原理的基础上,可以作出各种修改或者变换。应当理解,这些修改或者变换都不脱离本发明的保护范围。权利要求1.一种防断电的损耗平衡存储方法,包括如下步骤步骤1扫描存储器,关联物理块和与其对应的逻辑块号、物理块使用次数;步骤2判断是否存在两个相等且有效的物理块的逻辑块号;若是,则删除其中一个使用次数较少的物理块后进入步骤3;若否,则直接进入步骤3;步骤3生成块链表,将逻辑块号与完好的物理块一一对应以生成关联表,以及将未使用的物理块按照使用次数排序形成映射表;步骤4判断是否为读操作;若是则直接进入步骤10;若否则进入步骤5;步骤5判断是否为擦除操作;若是,则进入步骤6;若否,则进一步判断是否为写操作,是写操作则进行写操作后进入步骤10,否则直接进入步骤10;步骤6判断物理块的使用次数是否超过设定的阈值;若是,则进入步骤7;若否,则进入步骤10;步骤7搜索一个已被使用且使用次数最少的第一物理块以及一个已被使用且使用次数最多的第二物理块,将第一物理块的数据拷贝到第二物理块中;步骤8更新所述第一物理块和第二物理块的逻辑块号;步骤9删除源数据块并更新块链表和映射表;步骤10结束。2.如权利要求1所述的防断电的损耗平衡存储方法,其特征在于,所述块链表包含物理块号以及该物理块是否完好和是否已使用的状态数据。3.如权利要求2所述的防断电的损耗平衡存储方法,其特征在于,所述块链表建于主存中。4.如权利要求3所述的防断电的损耗平衡存储方法,其特征在于,所述存储器为NANDFLASH存储器。5.如权利要求4所述的防断电的损耗平衡存储方法,其特征在于,所述块链表建于block0中。6.如权利要求4所述的防断电的损耗平衡存储方法,其特征在于,所述物理块使用次数存储在存储器的备份区中。7.如权利要求4所述的防断电的损耗平衡存储方法,其特征在于,所述物理块使用次数存储在存储器的page0的备份区中。8.如权利要求2所述的防断电的损耗平衡存储方法,其特征在于,所述生成关联表的步骤为在所述存储器的备份区存储逻辑块号,将每个所述逻辑块号与一个物理块的物理块号关联,当关联的物理块为损坏的时,重新选择物理块与逻辑块号关联。9.如权利要求2所述的防断电的损耗平衡存储方法,其特征在于,所述进行写操作包括如下步骤步骤9-1判断当前的逻辑块号所对应的物理块是否被使用;若否,则进入步骤9-2,若是则继续使用当前物理块并进入步骤9-3;步骤9-2从映射表中找出使用次数最少的物理块来使用,并更新映射表;步骤9-3向当前使用的物理块中写入数据;步骤9-4判断写操作是否成功;若是则进入步骤10;若否则更新物理块链表后进入步骤10。10.如权利要求2所述的防断电的损耗平衡存储方法,其特征在于,当有物理块损坏时,块链表进行标记后写入存储器中。11.如权利要求10所述的防断电的损耗平衡存储方法,其特征在于,当损坏的物理块在映射表中,则将该物理块从映射表中删除。12.如权利要求1所述的防断电的损耗平衡存储方法,其特征在于,所述映射表中,使用次数最少的物理块排在最前,使用次数最多的物理块排在最后。13.如权利要求1所述的防断电的损耗平衡存储方法,其特征在于,所述映射表中,使用次数最多的物理块排在最前,使用次数最少的物理块排在最后。14.如权利要求1或2所述的防断电的损耗平衡存储方法,其特征在于,所述擦除操作成功后,被执行擦除操作的物理块的使用次数加一。全文摘要本发明提供一种防断电的损耗平衡存储方法,包括扫描存储器,关联物理块和与其对应的逻辑块号、物理块使用次数;判断是否存在两个相等且有效的物理块的逻辑块号;若是,则删除其中一个使用次数较少的物理块;生成块链表、关联表、映射表;判断物理块的使用次数是否超过设定的阈值;若是则搜索一个已被使用且使用次数最少的第一物理块以及一个已被使用且使用次数最多的第二物理块,将第一物理块的数据拷贝到第二物理块中;更新所述第一物理块和第二物理块的逻辑块号;删除源数据块并更新块链表和映射表。上述方法有效地实现了存储器在出现断电情况下,一旦上电后就能自动恢复到损耗平衡的存储过程中,更好地提高了存储器的存储使用次数和损耗平衡存储的有效性。文档编号G06F3/06GK102073595SQ20111002602公开日2011年5月25日申请日期2011年1月24日优先权日2011年1月24日发明者梁丰申请人:华亚微电子(上海)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1