闪存的区块管理方法

文档序号:6573625阅读:231来源:国知局
专利名称:闪存的区块管理方法
技术领域
本发明涉及半导体存储领域,更具体的来讲,涉及一种能使闪存区块的损耗均衡化的闪存区块管理方法。。
背景技术
闪存因为其具有高密度、大容量、较低的读写操作耗时,非易失性等特点而越来越广的被用于各种领域;同时,闪存芯片自身存在的一些缺陷限制了这类存储器的应用。其一,由于闪存芯片特殊的写和块擦除特征,导致了存储器的一些特殊操作,一般闪存的写操作过程是需要先将本次操作的目的块里的旧数据读出来,放进RAM(随机存取存储器)里面,然后,对目的块做擦除操作,由于闪存芯片区块是按照页面顺序写入,所以,要先把在区块中页面顺序在前排列的旧数据写入擦除后的目的区块,然后把新的操作数据写入,其次再把排列顺序在后的目的块旧数据写入,最后更新区块管理信息;在这样一个复杂的操作过程中有可能出现不可恢复的错误,例如,在目的块擦除过程中系统掉电,而操作目的块的数据没能及时写回,映射表信息也没有更新,原来的旧数据变成了无效数据。另一方面,一般的闪存都有一个使用的寿命,这是由闪存单元自身的存储原理所决定的,闪存单元的操作方式通常是,首先将存储单元的浮置栅极放电也就是常说的擦除,到一个通用的状态,然后在写数据过程中,再将浮置栅极充电也就是常说的编程,使它们达到存储数据的需要状态,在重复的擦除和编程过程中,浮置栅极由于隧道效应捕获的电子逐渐增多,当达到一定程度之后,如果再想对浮置栅极充电,就需要更大的电压,这时,也就是我们说的这个闪存芯片结束了它的使用周期。对于NOR型闪存被擦除或者重新编程次数一般为十万次左右,NAND型闪存擦除或者重新编程次数一般是百万次左右。
上述只是一个理论上的平均值,在闪存芯片的实际应用中,闪存设备的实际寿命远远低于这样的理论值。其主要原因是闪存芯片区块被操作的频率是不同的,有一些闪存区块被擦除或者重新编程的频率的比较高,导致很快就被操作坏了,当坏块达到一定的积累之后,闪存芯片就不能够再使用了,那么这个闪存设备结束了它的寿命,而有一些区块却不经常被操作到,甚至直到存储设备被用坏了,也没有操作几次,这样就会造成很大的浪费。目前,一般的闪存生产厂商都会采用在闪存芯片中,预留一部分空间用来替换这些坏块,但是这种做法也只能适当的延长闪存寿命,而不能够充分的使用这些闪存区块,浪费了许多闪存资源。中国发明专利申请《闪存介质数据保护方法》(申请号03137423)公开了一种闪存介质写数据方法,其技术方案包含将本次写操作目的区块的数据搬迁至一个空白区块,并在其执行数据操作的页加注标注信息,而操作过程中通过地址对照表可对原块和新块进行寻址。该发明目的在于通过这种管理方法,在写数据的同时保护在非法断电前已写入到闪存介质中的数据文件。

发明内容
本发明所解决的技术问题在于,提出一种闪存的区块管理方法,能使闪存损耗更加均衡以有效延长其使用寿命,并可进一步提高闪存操作速度及数据安全性。
为实现上述目的,本发明采用如下技术方案一种闪存的区块管理方法,所述闪存包括若干个区块,每块由多个页构成,每页分为数据存储区和冗余区,其特征在于在所述区块中划定一块或多块作为地址映射表保留区,以页为单位保存闪存区块的逻辑地址与物理地址的映射表;初始选定一个空白区块作为交换块,在所述映射表保存页的冗余区建立该交换块的地址映射表项;当进行写操作时,根据地址映射表信息,将新数据和/或被操作的目标区块的旧数据对应地写入所述交换块,擦除目标区块,然后将映射表页中交换块逻辑地址对应的物理地址与目标区块逻辑地址对应的物理地址互换。
进一步地,每次操作更新的映射表信息保存到所述保留区的一页中,并随操作次数的增加按预定的规律在所述保留区的各页面中循环地保存。
优选地,更新过的映射表信息保存到所述保留区的下一页中,并随操作次数的增加从所述保留区的第一页到最后一页中循环地保存。
优选地,其中的写操作包括如下步骤1)读取保留区中的地址映射表信息;2)根据映射表与映射表冗余区记载的信息,判断上次操作是否正常结束;3)如果为非正常结束,则进入异常处理程序;如果为正常结束,则进入写数据步骤;4)写数据时,先将目的块中页面位置在前的旧数据写入交换块,其次将本次操作的新数据写入交换块,再将剩余旧数据写入交换块;5)将目标区块擦除;6)将映射表中交换块逻辑地址对应的物理地址与目标区块逻辑地址对应的物理地址互换;7)将更新后的地址映射表和交换块地址映射表项,分别存入保留区下一页的映射表区及映射表冗余区。
优选地,在所述步骤4)之前还包括判断是否写入新数据的步骤,若无新数据写入,则依页面顺序将旧数据写入交换块后进入步骤5),若有新数据,则进入步骤4)。
所述异常处理程序可包括,判断是否在向交换块写数据的过程中掉电,如果是则将写入了部分内容的交换块擦除。
所述异常处理程序还可包括,判断是否在目标区块擦除过程中掉电,如果是则将目标区块擦除,然后将交换块的数据拷贝到目标区块,最后将交换块擦除。
所述异常处理程序还可包括,判断是否在映射表更新过程中掉电,如果是则根据映射表与映射表冗余区的信息,找到上次操作的目标区块和交换块,然后将交换块的数据拷贝到目标块,并擦除交换块。
进一步地,建立一个参数seed,其值与所述映射表保存页面保存位置的循环次数相关,并与设定的闪存区块的逻辑地址相对应,当seed值变化时,根据地址映射表信息,将其值相应逻辑地址对应的闪存区块的数据写入所述交换块,再将映射表中交换块逻辑地址对应的物理地址与seed值相应逻辑地址对应的物理地址互换。
优选地,更新映射表的时候将seed值保存到映射表冗余区。
优选地,设置一个循环参数N,每经历N次所述映射表保存页面保存位置的循环时,seed的值加1。
优选地,所述映射表的保存位置每次回到所述保留区的第一页时计为一次循环。
所述seed值还可用于判断闪存的损耗程度。
所述闪存为一颗闪存芯片或包含多颗闪存芯片的闪存阵列。
本发明有益的技术效果在于本发明的闪存区块管理方法,通过在闪存区块中划定地址映射表保留区,保存闪存区块的逻辑地址与物理地址映射表,并在映射表保存页的冗余区建立交换块的地址映射表项,在进行写操作时,根据地址映射表信息,将数据对应地写入交换块中,擦除目标区块,然后将映射表页中交换块逻辑地址对应的物理地址与写操作目标区块逻辑地址对应的物理地址互换。这种区块管理方法相当于将物理地址分散地对应到闪存区块逻辑地址中,虽然主机的文件系统在操作过程中对闪存逻辑地址的调用是不均衡的,但是从逻辑地址到物理地址的映射被打乱了,这种地址映射是一种动态的变化的对应关系,能够实现把操作均衡地分配给参与到管理中来的实际的物理闪存区块,因此可有效地延长闪存的使用寿命。
进一步地,可通过建立个参数seed,强制性地把seed值大小相应的闪存逻辑块推入到上述实现地址均衡调用的管理过程中,随着seed值的增加,逐次推动所有的块加入损耗均衡的操作,有效地避免了不参与损耗均衡的死块的出现。
本发明在一个闪存芯片中只动态地保持一个交换块,同时,交换块有独立的交换块映射地址保存区,这种把交换块信息独立出来的方法可以有效地减少闪存芯片查找交换块的时间,同时不需要在数据区花费更多的冗余区记录交换块信息,因此,可以有效地节省操作时间和节约空间。
本发明在数据的写操作过程中,先把目标区块的部分旧数据写入交换块,其次把新数据写入交换块,接着,把剩余旧数据写入交换块,然后,把目标区块擦除,在这样一个过程中,擦除操作是在整个操作的最后完成,即使有异常情况发生,也能够保留有效的数据和提供线索,实现正常数据的恢复。


图1是闪存存储装置的结构示意图。
图2是本发明中闪存芯片的分区划分示意图。
图3是图2中的页面3放大了的示意图。
图4是本发明区块管理方法实施例中的动态均衡示意图。
图5是本发明区块管理方法实施例中的静态均衡示意图。
图6是本发明区块管理方法的实施例流程图。
具体实施例方式
以下利用附图并结合具体实施方式
对本发明作进一步详细的描述。
闪存存储装置一般结构如图1所示,主要包括接口、接口控制器、闪存控制器以及闪存芯片阵列;其中,接口控制器一般包含微控制器(MCU)以及固件(Firmware)。闪存存储装置通过接口接收到主机应用程序发来的操作命令,然后接口把命令传给接口控制器,由接口控制器中的Firmware以及微控制器把主机命令解析成底层的操作命令,然后发给闪存控制器,最后闪存控制器把命令解析成闪存控制信号,来控制闪存阵列的操作。其中Firmware把主机指令解析成底层操作命令,就包含了它对闪存芯片区块的管理方法。
在对闪存芯片进行管理以前,首先要对它进行区域的划分。一般的闪存阵列包含有数行数列个闪存芯片,每个芯片的读写一般以页面(Page)为单位进行,每个页面包括2048Byte的有效数据区和64Byte的冗余信息区,每64个页面组成一个区块(Block),每颗闪存芯片区块的数目取决于芯片记忆空间的大小,本说明主要以单颗闪存芯片存储空间在64MByte以内,当存储空间在64MByte以上时,每64MByte拥有一个地址映射表保留区,操作方法跟单颗64MByte以内类似。
本发明区块管理的方法在于实现以下三个方面其一是尽量少的做闪存擦除或者重新编程操作,这样可以减少闪存芯片的损耗次数;其二是尽可能的把擦除或者重新编程操作平均的分配到所有闪存区块,也就是说让闪存区块拥有相同的操作几率;第三还要提供一种安全的区块管理方法和系统策略,能够确保闪存数据的安全性。本发明兼顾了以上三个方面,在实施过程中主要包括动态均衡和静态均衡两种处理方法。本发明实施例的流程图如图6所示,其中包含了本发明区块管理的动态均衡和静态均衡。下面结合两个具体实施方式
来说明具体实施方式
一本发明实施过程中首先对每颗闪存芯片建立一个地址映射表,用来维护闪存区块在文件系统中的逻辑地址与在闪存芯片中的实际物理地址的映射关系;其次,在每个闪存芯片中,专门划分一块区域用来保存这个地址映射表,区域的大小跟闪存芯片的数据区设计的寿命有关,更新的映射表每次保存在一个页面中;接下来,初始化这个映射关系,然后,在数据块中选定一个空白块作交换块,同时,单独建立一个交换块的地址映射表项,保存在映射区中每次保存数据区块地址映射表页面的冗余位置。
如图2所示,图中1所示的是一颗闪存芯片,它被分成若干个区块,根据需要选定几个区块作为映射表区保留块,区块的块数由设计的存储设备的寿命决定的,一定要保证映射区的寿命比数据区的寿命长。图中2所示是映射表保留区块的划分,其中图中例子划分了2个区块给保留区用,每个区块包括64个页面,每次操作之后的映射表就会被保存在一个页面之中,映射表中主要记录了本颗粒中逻辑块地址(LBA)跟物理块地址(PBA)之间的对应关系,如图3所示。图2中3所示为当前映射表保留区操作页面,图3是这个页面的放大图,是映射表的主要记录信息,4所示为闪存芯片中任意一个区块的逻辑地址与物理地址的映射关系,5所示为闪存芯片中的冗余区交换块地址映射表。
本发明实施例所述的动态均衡包括以下步骤首先,在闪存芯片进行写操作时,先把本次操作目的块中页面位置在前的旧数据写入交换块,其次把本次操作数据写入交换块,再把剩余旧数据写入交换块,之后把本次写操作的目的区块擦除;紧接着,把目的区块的逻辑地址对应的物理地址,跟交换块逻辑地址对应的物理地址进行交换;最后把更新后的数据区块地址映射表和交换块地址映射表,分别存入闪存芯片预留的映射表区及映射表冗余区。
实现闪存损耗均衡的动态均衡管理方法如图4所示,图中6表示的是当前操作中,保存映射表信息的页面,图中8所示的是当前映射表冗余区中的交换块的逻辑地址跟物理地址的对应关系,图中7表示的是当前操作目标区块的逻辑地址与物理地址的对应关系。图中9和10分别是当前操作目标区块和交换块的物理地址在闪存芯片中的实际位置。当进行写操作时,Firmware先把闪存保留区中记录的映射表信息以及交换块信息读出来,按照映射表记录的逻辑地址与物理地址之间的对应关系,根据区块中数据页面的顺序,先把操作目的块顺序在前的旧数据写入交换块中对应位置,再把操作数据写入交换块对应的位置,接着,把剩余旧数据写入交换块,然后,再把本次操作目标区块逻辑地址对应的物理区块作擦除操作,接着,把交换块逻辑地址对应的物理地址跟本次操作目标区块逻辑地址对应的物理地址作交换,最后,在所有操作完成之后,把更新的映射表项在掉电以前保存到保留区下一个物理页面中。在动态均衡过程中,为了保证存储地址映射表的保留区不至于因为反复操作,而导致过早损坏,一般给其分配多个区块,来依照物理地址的次序,循环保存。通过动态均衡,基本可以保证区块能够被平均的操作。
本发明在数据写操作过程中,擦除操作是在整个操作的最后完成,即使有异常情况发生也能够保留有效的数据和提供线索,实现正常数据的恢复。
异常情况一如果当数据在向交换块写的过程中设备非法掉电;由于操作没有完成,映射表没有更新,在存储设备操作正常后,通过映射表仍然可以读到原来的数据,只需要把映射表中的交换块做一次擦除操作,这样,就可以恢复到操作前的状态。
异常情况二如果在所有数据已经写到交换块,但是在目标区块擦除过程中设备非法掉电;由于映射表没有更新,读取映射表发现旧数据由于上次异常操作而被部分删除,而交换块由于上次数据写操作完成所以是非空的,Firmware只需要根据这些判断条件,然后把目标区块擦除,然后把交换块的数据拷贝到目标区块,这样目标区块被写入了新数据,最后再把交换块擦除就可以了。
异常情况三如果在映射表更新过程中设备非法掉电;可以根据上次映射表的记录与映射表冗余区记载的交换块的信息,找到上次操作的目标区块和交换块,这种情况下目标区块是空白块,而交换块是正常非空数据块,Firmware只需要根据这些判断条件,然后把交换块的数据拷贝到目标块,并擦除交换块,最后将更新的映射表写入保留区。
具体实施方式
二虽然通过动态均衡方法能使大部分闪存区块拥有相同的几率被操作到,但是,还会有一些从来没操作到的死块。所谓死块是指从来没有被操作过,没有参与到损耗均衡操作的闪存区块,是上述动态均衡不能解决的问题,因此又提出了一个静态均衡的方法。本发明的映射表保留区中,地址映射表是以页面为单位在闪存区块内依次保存,当一个区块被写过一遍之后,就会按照物理地址的顺序写入下一个区块,直到循环完整个的映射表区,然后,又重新回到映射表保留区开始位置。一般情况下,映射表保留区循环使用一次需要执行映射表保留区块数的64倍次写操作。在静态均衡过程中,首先建立一个参数,将其命名为种子(Seed),并以如下方式维护该种子的值每次执行一次映射表区的循环都要求把种子的值加1,或者设定一个循环次数的参数N,当循环N次之后,种子值加1;然后,在每次更新映射表的时候把种子的值保存到映射表冗余区。当种子值发生变化时,强制把种子值大小相应的闪存逻辑地址对应物理块的数据拷贝到交换块,对交换块和种子值对应的闪存逻辑块进行一次动态均衡,然后,擦除、保存。静态均衡每次都会推动一个逻辑块,强制性地参与动态均衡,当闪存中存在死块时,会随着种子的逐渐增加推动死块加入到这种损耗均衡的管理中来,一旦加入进来,就会被均衡的分配操作。
本实施例中,除了包含实施例一中的动态均衡管理方法和异常操作处理方法,还包括上述的闪存区块静态均衡管理方法。如图5所示,图中11所示为闪存芯片映射表保留块,本实施方式中预先选定了2个区块作保留块。图中12表示的是剩余的区块,本例中把它划为数据区。图中13表示的是当前操作过程中,映射表项保存的物理页面位置,当本次操作进行完之后,按照一般操作方法Firmware会把它的物理地址加1,然后再保存到保留块,但是在本例中如果按照这样的做法,会把映射表保存页面写到数据区所示的位置15,因此在本例中Firmware会把映射表保存页面重新循环到初始位置,如图中14所示。同时,每做这样一个循环操作时,或者设定一个循环参数N,当进行了N次这样的循环时,Firmware维护的种子Seed就会加1,来记录循环次数或者循环参数N,每当Seed值加1时,Firmware会强行启动一次操作,把Seed值大小的逻辑地址对应物理地址的数据写到交换块中,同时,把Seed值对应的目标区块做擦除操作,然后,把交换块的物理地址跟Seed值大小逻辑地址对应块的物理地址交换,把Seed值对应的块作交换块,最后,把数据区块地址映射表项保存到下一个物理的页面中,把交换块地址映射表保存到这个页面的冗余区。这样做,会强行的逐次推动所有的块加入损耗均衡的操作中来,这样做能够有效地避免不参与损耗均衡的死块的出现。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明由所提交的权利要求书确定的专利保护范围。
权利要求
1.一种闪存的区块管理方法,所述闪存包括若干个区块,每块由多个页构成,每页分为数据存储区和冗余区,其特征在于在所述区块中划定一块或多块作为地址映射表保留区,以页为单位保存闪存区块的逻辑地址与物理地址的映射表;初始选定一个空白区块作为交换块,在所述映射表保存页的冗余区建立该交换块的地址映射表项;当进行写操作时,根据地址映射表信息,将新数据和/或被操作的目标区块的旧数据对应地写入所述交换块,擦除目标区块,然后将映射表页中交换块逻辑地址对应的物理地址与目标区块逻辑地址对应的物理地址互换。
2.如权利要求1所述的闪存的区块管理方法,其特征在于,每次操作更新的映射表信息保存到所述保留区的一页中,并随操作次数的增加按预定的规律在所述保留区的各页面中循环地保存。
3.如权利要求2所述的闪存的区块管理方法,其特征在于,所述规律为,更新过的映射表信息保存到所述保留区的下一页中,并随操作次数的增加从所述保留区的第一页到最后一页中循环地保存。
4.如权利要求1或2或3所述的闪存的区块管理方法,其特征在于,其中的写操作包括如下步骤1)读取保留区中的地址映射表信息;2)根据映射表与映射表冗余区记载的信息,判断上次操作是否正常结束;3)如果为非正常结束,则进入异常处理程序;如果为正常结束,则进入写数据步骤;4)写数据时,先将目的块中页面位置在前的旧数据写入交换块,其次将本次操作的新数据写入交换块,再将剩余旧数据写入交换块;5)将目标区块擦除;6)将映射表中交换块逻辑地址对应的物理地址与目标区块逻辑地址对应的物理地址互换;7)将更新后的地址映射表和交换块地址映射表项,分别存入保留区下一页的映射表区及映射表冗余区。
5.如权利要求4所述的闪存的区块管理方法,其特征在于,在所述步骤4)之前还包括判断是否写入新数据的步骤,若无新数据写入,则依页面顺序将旧数据写入交换块后进入步骤5),若有新数据,则进入步骤4)。
6.如权利要求4所述的闪存的区块管理方法,其特征在于,所述异常处理程序包括判断是否在向交换块写数据的过程中掉电,如果是则将写入了部分内容的交换块擦除。
7.如权利要求4所述的闪存的区块管理方法,其特征在于,所述异常处理程序包括判断是否在目标区块擦除过程中掉电,如果是则将目标区块擦除,然后将交换块的数据拷贝到目标区块,最后将交换块擦除。
8.如权利要求4所述的闪存的区块管理方法,其特征在于,所述异常处理程序包括判断是否在映射表更新过程中掉电,如果是则根据映射表与映射表冗余区的信息,找到上次操作的目标区块和交换块,然后将交换块的数据拷贝到目标块,并擦除交换块。
9.如权利要求2或3所述的闪存的区块管理方法,其特征在于,建立一个参数seed,其值与所述映射表保存页面保存位置的循环次数相关,并与设定的闪存区块的逻辑地址相对应,当seed值变化时,根据地址映射表信息,将其值相应逻辑地址对应的闪存区块的数据写入所述交换块,再将映射表中交换块逻辑地址对应的物理地址与seed值相应逻辑地址对应的物理地址互换。
10.如权利要求9所述的闪存的区块管理方法,其特征在于,更新映射表的时候将seed值保存到映射表冗余区。
11.如权利要求9所述的闪存的区块管理方法,其特征在于,设置一个循环参数N,每经历N次所述映射表保存页面保存位置的循环时,seed的值加1。
12.如权利要求11所述的闪存的区块管理方法,其特征在于,所述映射表的保存位置每次回到所述保留区的第一页时计为一次循环。
13.如权利要求9所述的闪存的区块管理方法,其特征在于,所述seed值可用于判断闪存的损耗程度。
14.如权利要求1或2或3所述的闪存的区块管理方法,其特征在于,所述闪存为一颗闪存芯片或包含多颗闪存芯片的闪存阵列。
全文摘要
本发明公开了一种闪存的区块管理方法,所述闪存包括若干个区块,每块由多个页构成,每页分为数据存储区和冗余区,在所述区块中划定一块或多块作为地址映射表保留区,以页为单位保存闪存区块的逻辑地址与物理地址的映射表;选定一个空白块作为交换块,在所述映射表保存页的冗余区建立该交换块的地址映射表项;当进行写操作时,根据地址映射表信息,将新数据和/或被操作的目标区块的旧数据对应地写入所述交换块,擦除目标区块,然后将映射表页中交换块逻辑地址对应的物理地址与目标区块逻辑地址对应的物理地址互换。本发明可在保证操作速度的同时有效延长闪存使用寿命,并提高闪存数据的安全性。
文档编号G06F12/02GK101030167SQ200710072980
公开日2007年9月5日 申请日期2007年1月17日 优先权日2007年1月17日
发明者黄河 申请人:忆正存储技术(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1