一种闪存块磨损平衡的方法和系统的制作方法

文档序号:6472080阅读:174来源:国知局
专利名称:一种闪存块磨损平衡的方法和系统的制作方法
技术领域
本发明涉及存储技术领域,特别涉及一种闪存块磨损平衡的方法和系统。
背景技术
随着计算机的普及,各种存储介质越来越受到人们的关注。而闪存由于其 存储的便捷性和传输速率的高速性受到了人们的重视,并被很块地应用到了各 个领域。闪存釆用的是半导体技术,与普通硬盘、光盘类的存储介质相比,闪
存是相对静态的;并且拥有较小的体积,便于携带;而且随着半导体技术的发 展,闪存的价格也在不断地下降,因此,目前大多存储介质采用闪存技术。
闪存也可以称为Flash ROM,它是一种电擦除非易失性(在断电的情况下 仍能够保持所存储的数据信息)存储器,由浮;败型场效应管构成。写入数据时, 利用热电子注入,使浮栅带电;擦除数据时,利用高压下的隧道效应,使浮栅 失去电子。通过改变浮栅的状态进行数据的存储,具有可多次擦写的特点。
闪存的存储方式通常是这样的为了增加传输的速度,大部分闪存都不是 采用单字节的方式进行数据传输,而是以(逻辑)块为单位进行的。由于闪存 的工作方式是通过采用热电子注入使浮栅带电来存储信息的,因此其存储信息 的过程具有一定的特殊性。闪存在写入数据时,所要写入的块的写入区必须是 空白的,存储有信息的闪存都不能满足这个条件。所以在写入数据之前,必须 先进行块的擦除操作,将块中写入区域存储的信息变为空白,然后才能进行写 操作,这就是一个写的生命周期。由于数据的传输、访问是以块为单位进行的, 因此每次修改,即使是一个字节数据的修改,也要将数据所在的逻辑块擦除干 净,再将新的信息写入。因此,如果频繁的更改某一块的数据就会造成该块的 寿命减少,最终使该块成为坏块。现有技术中,闪存的逻辑块通常都是被编号的。假设一个闪存共有100个 逻辑块,每个逻辑块的大小是512字节,但是在闪存实际工作过程中,每个逻 辑块的实际存储量是511字节,因为每个逻辑块的首字节是不存储数据的,这 个字节用来存储逻辑块的逻辑块号信息。
在存储一个文件时,闪存会查找一系列空的逻辑块,并用逻辑块号将这一 系列逻辑块联系起来。假设创建一个大小为1024字节的文件,需要三个逻辑块 才能存储下,该文件数据区的存储可以如图1所示。每个逻辑块块头标志该逻 辑块的逻辑块号。需要说明的是,在一个文件所包含的逻辑块中,逻辑块号不 一定按顺序相连。
为了操作简单,闪存进行擦除写入时都是先将编号靠前的块进行擦写,久 而久之就会影响闪存的寿命。经过实验证明,闪存的可擦写寿命一般是十万次。 如果我们每次都利用编号靠前的逻辑块进行写操作而忽视了编号靠后的逻辑 块,导致的后果就是,编号靠前的逻辑块在不断的加电失电的过程中被大大的 磨损,而编号靠后的逻辑块却几乎没有被应用,这必然会大大减少闪存的寿命, 造成资源的极大浪费,同时也会使闪存使用者的利益受到损害。
目前出现了利用平衡的方法增加闪存寿命的技术,所谓平衡就是将对逻辑 块擦写的次数平均到每一个逻辑块,使其受到的磨损状况大致相同,避免坏块 的提早产生。
现在所采取的平衡技术, 一般都是这样进行的在每一个逻辑块上取两个 字节单位,第一个字节对逻辑块进行编号,记录其逻辑块的ID;另一个字节为 计数器,记录该ID的逻辑块擦写的次数。在每次将要进行擦写操作时,系统寻 找计数器中被擦写次数最小的逻辑块进行擦写,使每个逻辑块受到的磨损的几 率相同,能够延长闪存的寿命。
发明人认为现有技术至少存在以下缺点
1、需要为计数器单独设置一个空间,造成了存储空间的额外开支,实际上 减少了存储空间;2、 由于每次都是寻找计数器最小的逻辑块,而不是连续的进行擦除写入,
导致了存储信息的不连贯,不便于管理;
3、 存储过程中需要对计数器进行查找等操作,程序控制复杂,降低了执行 效率;
4、 在发生异常的情况下,逻辑块中用来存储计数器擦写次数的信息容易发 生丢失,不能完全保障达到磨损平衡。

发明内容
为了提高闪存的使用寿命、达到闪存存储空间的磨损平衡,本发明提供了 一种闪存块磨损平衡的方法和系统。所述技术方案如下 一种闪存块磨损平衡的方法,包括 接收到向第 一逻辑块写入新数据的指令; 获取备份块的位置;
将所述第一逻辑块中的数据读入内存,在所述内存中将所述第一逻辑块中 的数据更新为欲写入所述第一逻辑块中的写入数据; 将所述写入数据写入所述备份块; 擦除所述第一逻辑块;
按照预先设定的规则获取第二逻辑块的位置; 将所述第二逻辑块中的凄t据写入所述第一逻辑块; 擦除所述第二逻辑块,并设置所述第二逻辑块为新的备份块。 所述获取备份块的位置之前,所述方法还包括 判断所述第一逻辑块的写入区域是否为空;
当判断结果为所述第一逻辑块的写入区域为空时,在所述第一逻辑块的写 入区域中写入新数据,完成一次写入操作;
相应地,所述获取备份块的位置,具体包括
当判断结果为所述第一逻辑块的写入区域不为空时,获取所述备份块的位置。
将所述第 一逻辑块中的数据读入内存,在所述内存中将所述第 一逻辑块的
数据更新为欲写入所述第 一逻辑块中的写入数据,具体包括
将所述第一逻辑块中的数据读入内存,所述第一逻辑块中的数据包括逻辑
块号和所述第一逻辑块写入区域的数据;
在所述内存中将所述第一逻辑块中的数据进行拆分,将所述第一逻辑块的
逻辑块号和所述新数据结合生成所述写入数据。 将所述写入数据写入所述备份块,具体包括
擦除所述备份块中存储的逻辑块号信息,将所述新数据写入所述备份块的 写入区域;
所述新数据写入完成后,在所述备份块存储逻辑块号的区域写入所述第一 逻辑块的逻辑块号。
所述擦除所述第一逻辑块,具体包括
擦除所述第 一逻辑模块中存储的逻辑块号和写入区域的数据。 所述按照预先设定的规则获取第二逻辑块的位置,具体包括 获取所述备份块对应的物理块; 寻找所述物理块的下一个或者上一个物理块; 获取所述下一个或者上一个物理块对应的逻辑块;
记录所述下一个或者上一个物理块对应的逻辑块,并将所述下一个或者上 一个物理块对应的逻辑块作为第二逻辑块。
一种闪存块磨损平衡的系统,包括主机和闪存; 所述主机包括
发送模块,用于向第一逻辑块发送写入新数据的指令; 内存模块,用于为所述闪存提供内存存储数据; 所述闪存包括
接收模块,用于接收向第一逻辑块写入新数据的指令;第一获取模块,用于获取备份块的位置;
更新模块,用于将所述第一逻辑块中的数据读入内存,在所述内存中将所 述第一逻辑块中的数据更新为欲写入所述第一逻辑块中的写入数据; 第一写入模块,用于将所述写入数据写入所述备份块;
第一擦除模块,用于擦除所述第一逻辑块;
第二获取模块,用于按照预先设定的规则获取第二逻辑块的位置;
第二写入模块,用于将所述第二逻辑块中的&据写入所述第一逻辑块;
第二擦除模块,用于擦除所述第二逻辑块;
设置模块,用于设置擦除后的所述第二逻辑块为新的备份块。
所述闪存还包括
判断模块,用于判断所述第 一逻辑块的写入区域是否为空; 相应的,所述第一获取模块具体用于
当所述判断模块的判断结果为所述第一逻辑块的写入区域不为空时,获取 所述备份块的位置。
所述更新模块具体包括
读入单元,用于将所述第一逻辑块中的数据读入内存,所述第一逻辑块中 的数据包括逻辑块号和所述第一逻辑块写入区域的数据;
拆分组合单元,用于在所述内存中将所述第一逻辑块中的数据进行拆分, 将所述第一逻辑块的逻辑块号和所述新数据结合生成所述写入数据。
所述第 一写入模块具体用于
擦除所述备份块中存储的逻辑块号信息,将所述新数据写入所述备份块的 写入区域;
写入完成后,在所述备份块存储逻辑块号的区域写入所述第一逻辑块的逻 辑块号。
所述第一擦除模块具体用于
擦除所述第一逻辑模块中存储的逻辑块号信息和写入区域的数据。所述第二获取模块具体包括
第一获取单元,用于获取所述备份块对应的物理块; 寻找单元,用于寻找所述物理块的下一个或者上一个物理块; 第二获取单元,用于获取所述下一个或者上一个物理块对应的逻辑块; 记录单元,用于记录所述逻辑块的逻辑块号,并将所述逻辑块作为第二逻 辑块。
本发明实施例提供的技术方案带来的有益效果是
通过设立一个空白的备份块,并通过不断移动备份块的方法,达到了闪存 块真正的磨损平衡。另外,本发明不需要使用计数器,节省闪存的空间,实现 简单,可以达到掉电保护的目的。


图l是本发明实施例1中提供的闪存块磨损平衡的方法流程图2是本发明实施例1中提供的闪存块的内部结构示意图3是本发明实施例1中提供的闪存块存储的信息示意图4是本发明实施例1中提供的一种备份块移动的示意图5是本发明实施例1中提供的另一种备份块移动的示意图6是本发明实施例1中提供的第三种备份块移动的示意图7是本发明实施例2中提供的闪存块磨损平衡的系统结构示意图。
具体实施例方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明 实施方式作进一步地详细描述。
实施例1参见图1,本实施例提供了一种闪存块磨损平衡的方法,该方法包括 101:接收到将新数据写入到第 一逻辑块的指令; 102:判断第一逻辑块的写入区域是否为空白区域; 如果不为空白区域,则执行步骤103;
如果为空白区域,直接将新数据写入第一逻辑块的写入区域,完成操作; 103:寻找备份块的位置;
104:将第一逻辑块中存储的数据读入主机的内存,并在内存中更新为欲写 入第 一逻辑块中的写入数据;
这里需要说明的是,将第一逻辑块中存储的内容读入主机的内存时,需要 包括第一逻辑块中第一字节所存储的逻辑块号信息和第一逻辑块的写入区域存 储的数据;
在内存中进行数据更新时,逻辑块号的信息不变,只需要将除逻辑块号信
息之外的其他数据部分更新为新数据。
其中,欲写入第一逻辑模块中的写入数据包括逻辑块号信息和新数据。 105:将内存中更新后的写入数据写入备份块,备份块成为新的第一逻辑块; 其中,将内存中更新后的写入数据写入备份块,是将逻辑块号信息和新数
据都写入备份块,在写入时,先擦除备份块的逻辑块号,在备份块的写入区域
写入新数据,最后写入第一逻辑块的逻辑块号。
更新后的写入数据写入备份块之后,原备份块对应的物理块,现在对应第
一逻辑块。
在本发明实施例中,在写入新数据时,闪存并不是将第一逻辑块擦除后将 新数据和逻辑块号直接写入第一逻辑块中,而是在内存中更新好后,先将更新 好的写入数据写入备份块后再擦除第 一逻辑块,这样做可以防止突然掉电造成 数据丢失。
当然,在将写入数据写入备份块的过程中也可能突然掉电,产生逻辑块号 相同的逻辑块。那么在闪存每次上电时,自动查找相同的逻辑块号,如果有逻辑块号相同的逻辑块,将数据不完整的逻辑块擦除,使其成为备份块,这样就 可以解决掉电产生两个相同逻辑块号的逻辑块的问题。
106:擦除原第一逻辑块,并使其成为新的备份块;
107:闪存按照预先设定的规则找到第二逻辑块,并将第二逻辑块中存储的 数据写入新的备份块,即原第一逻辑块中,使原第一逻辑块成为新的第二逻辑 块,将原第二逻辑块擦除,并设置为最新的备份块,完成操作。
其中,预先设定的规则可以是确定原备份块的位置后,找到与原备份块 对应的物理块,根据物理地址找到该物理块的下一个物理块,选择与该下一个 物理块对应的逻辑块,并记录下来,将该下一个物理块对应的逻辑块作为第二 逻辑块;
或者,确定原备份块的位置后,找到与原备份块对应的物理块,根据物理 地址找到该物理块的上一个物理块,选择与该上一个物理块对应的逻辑块,并 记录下来,将该上一个物理块对应的逻辑块作为第二逻辑块。
当按照上述预先设定的规则记录下来的第二逻辑块与第一逻辑块重合时, 则将内存中更新完毕的写入数据写入备份块,擦除第一逻辑块,并将第一逻辑 块设置为新的备份块。
以存储容量为4K,包含8个物理块的闪存为例,将这个闪存划分为8个逻 辑块,每个逻辑块只有一个物理块,如图2所示,8个逻辑块的逻辑块号分别为 FF、 01、 02、 03、 04、 05、 06、 07,每个块的大小都是512字节。闪存初始化 时,将每个逻辑块的逻辑块号写入每个块的第一个字节中。在闪存中设置一备 份块,备份块是一个空白块,写入区域不存储任何数据。在本实施例中,如图3 所示,设定逻辑块FF为备份块,其他的块中都存有数据。
(1 )以接收到将数据Datal写入逻辑块02的指令为例,参见图4:
判断逻辑块02的写入区域是否为空白区域;
结果为否,寻找备^f分块FF的位置;将逻辑块02中的数据(包括逻辑块号0x02和写入区域的原数据)读入主 机的内存,并将写入区域的原it据更新为Datal;
将在内存中更新后的数据(包括逻辑块号0x02和Datal )写入备份块FF; 擦除原逻辑块02;
找到逻辑块01,将逻辑块01中的数据写入原逻辑块02后,将逻辑块01作 为新的备份块。
完成上述l喿作后,备^f分块FF与物理块01相对应。
(2 )在(1)的基础上,以接收到将数据Data2写入逻辑块02的指令为例, 参见图5:
判断判断逻辑块02的写入区域是否为空白区域; 结果为否,寻找备份块FF的位置;
将逻辑块02中的数据(包括逻辑块号0x02和Datal )读入主机的内存,并 将Datal更新为Data2;
将在内存中更新后的数据(包括逻辑块号0x02和Data2 )写入备份块FF; 擦除原逻辑块02;
找到遝辑块Ol,将逻辑块Ol中的数据写入原逻辑块02后,将逻辑块01作 为新的备份块。
完成上述操作后,备份块FF与物理块02相对应。
(3 )在(2 )的基础上,以又接收到将数据Data3写入逻辑块05的指令为 例,参见图6:
判断判断逻辑块05的写入区域是否为空白区域; 结果为否,寻找备份块FF的位置;
将逻辑块05中的数据(包括逻辑块号0x05和写入区域的原数据)读入主 机的内存,并将逻辑块05中写入区域的原数据更新为Data3;
将在内存中更新后的数据(包括逻辑块号0x05和Data3 )写入备份块FF; 擦除原逻辑块05;
14找到逻辑块03,将逻辑块03中的数据写入原逻辑块05后,将逻辑块03作 为新的备份块。
完成上述操作后,备份块FF与物理块03相对应。
从上述的内容可以看出,通过重复写入某一逻辑块或写入不同的逻辑块, 在实际的写入过程中物理块是顺序写入的,实现了物理块的循环移动,因此可 以达到真正的磨损平衡。
本发明实施例通过设立一个空白的备份块,并控制该备份块在逻辑上不断 移动,节省了内存的存储空间,实现简单,达到了闪存块真正的磨损平衡。同 时,还可以进行掉电保护。
实施例2
参见图7,本发明实施例提供了一种内存磨损平衡的系统,包括主机701 和闪存702;
主机701包括
发送模块701A,用于发送向第一逻辑模块写入新数据的指令; 内存模块701B,用于为闪存702提供内存存储数据; 闪存702包括
接收模块702A,用于接收向第一逻辑块写入新数据的指令; 第一获取模块702B,用于获取备份块的位置;
更新模块702C,用于将第一逻辑块中的数据读入内存,在所述内存中将所 述第 一逻辑块中的数据更新为欲写入第 一逻辑块中的写入数据;
第一写入模块702D,用于将内存中的更新后的写入数据写入备份块; 第一擦除模块702E,用于擦除第 一逻辑块;
第二获取模块702F,用于按照预先设定的规则获取第二逻辑块的位置; 第二写入模块702G,用于将第二逻辑块中的数据写入第一逻辑块; 第二擦除模块702H,用于擦除第二逻辑块;设置模块7021,用于设置擦除后的第二逻辑块为新的备份块。 进一步地,闪存702还包括
判断模块702J,用于判断第一逻辑块的写入区域是否为空; 相应的,第 一获取模块702B具体用于
当判断模块的判断结果为第 一逻辑块的写入区域不为空时,获取备份块的 位置。
其中,更新模块702C具体包括
读入单元,用于将第一逻辑块中的数据读入内存,改第一逻辑块中的数据 包括逻辑块号和第一逻辑块写入区域的数据;
拆分组合单元,用于在内存中将第一逻辑块中的数据进行拆分,将第一逻 辑块的逻辑块号和名欠写入第一逻辑块的新数据结合生成写入数据。
第一写入4莫块702D具体用于
擦除备份块中存储的逻辑块号信息,将所述新数据写入所述备份块的写入 区域,所述新数据写入完成后,在所述备份块存储逻辑块号的区域写入所述第 一逻辑块的逻辑块号。
第一擦除模块702E具体用于
擦除第 一逻辑^t块中存储的逻辑块号信息和和写入区域的数据。
第二获取模块702F具体包括
第一获取单元,用于获取备份块对应的物理块;
寻找单元,用于寻找物理块的下一个或者上一个物理块;
第二获取单元,用于获取下一个或者上一个物理块对应的逻辑块;
记录单元,用于记录逻辑块,并将逻辑块作为第二逻辑块。
本发明实施例通过内存磨损平衡的系统设立一个空白的备份块,并控制该
备份块不断移动,节省了内存的存储空间,实现简单,达到了闪存块真正的磨
损平衡。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的 精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的 保护范围之内。
权利要求
1、一种闪存块磨损平衡的方法,其特征在于,包括接收到向第一逻辑块写入新数据的指令;获取备份块的位置;将所述第一逻辑块中的数据读入内存,在所述内存中将所述第一逻辑块中的数据更新为欲写入所述第一逻辑块中的写入数据;将所述写入数据写入所述备份块;擦除所述第一逻辑块;按照预先设定的规则获取第二逻辑块的位置;将所述第二逻辑块中的数据写入所述第一逻辑块;擦除所述第二逻辑块,并设置所述第二逻辑块为新的备份块。
2、 如权利要求1所述的闪存块磨损平衡的方法,其特征在于,所述获取备 份块的位置之前,所述方法还包括判断所述第 一逻辑块的写入区域是否为空;当判断结果为所述第 一逻辑块的写入区域为空时,在所述第一逻辑块的写 入区域中写入新数据,完成一次写入操作;相应地,所述获取备份块的位置,具体包括当判断结果为所述第一逻辑块的写入区域不为空时,获取所述备份块的位置。
3、 如权利要求1所述的闪存块磨损平衡的方法,其特征在于,将所述第一 逻辑块中的数据读入内存,在所述内存中将所述第一逻辑块的数据更新为欲写 入所述第一逻辑块中的写入数据,具体包括将所述第一逻辑块中的数据读入内存,所述第一逻辑块中的数据包括逻辑 块号和所述第一逻辑块写入区域的数据;在所述内存中将所述第 一逻辑块中的数据进行拆分,将所述第 一逻辑块的 逻辑块号和所述新数据结合生成所述写入数据。
4、 如权利要求3所述的闪存块磨损平衡的方法,其特征在于,将所述写入 数据写入所述备份块,具体包括擦除所述备份块中存储的逻辑块号信息,将所述新数据写入所述备份块的 写入区域;所述新数据写入完成后,在所述备份块存储逻辑块号的区域写入所述第一 逻辑块的逻辑块号。
5、 如权利要求1所述的闪存块磨损平衡的方法,其特征在于,所述擦除所 述第一逻辑块,具体包括擦除所述第一逻辑模块中存储的逻辑块号和写入区域的数据。
6、 如权利要求1所述的闪存块磨损平衡的方法,其特征在于,所述按照预 先设定的规则获取第二逻辑块的位置,具体包括获取所述备份块对应的物理块;寻找所述物理块的下一个或者上一个物理块;获取所述下一个或者上一个物理块对应的逻辑块;记录所述下一个或者上一个物理块对应的逻辑块,并将所述下一个或者上 一个物理块对应的逻辑块作为第二逻辑块。
7、 一种闪存块磨损平衡的系统,其特征在于,包括主机和闪存; 所述主机包括发送模块,用于向第一逻辑块发送写入新数据的指令; 内存模块,用于为所述闪存提供内存存储数据;所述闪存包括接收模块,用于接收向第一逻辑块写入新数据的指令; 第一获^^莫块,用于获取备份块的位置;更新模块,用于将所述第一逻辑块中的数据读入内存,在所述内存中将所 述第 一逻辑块中的数据更新为欲写入所述第 一逻辑块中的写入数据; 第一写入模块,用于将所述写入数据写入所述备份块; 第一擦除模块,用于擦除所述第一逻辑块; 第二获取模块,用于按照预先设定的规则获取第二逻辑块的位置; 第二写入模块,用于将所述第二逻辑块中的数据写入所述第 一逻辑块; 第二擦除模块,用于擦除所述第二逻辑块; 设置模块,用于设置擦除后的所述第二逻辑块为新的备份块。
8、 如权利要求7所述的闪存块磨损平衡的系统,其特征在于,所述闪存还 包括判断模块,用于判断所述第 一逻辑块的写入区域是否为空; 相应的,所述第一获取^f莫块具体用于当所述判断模块的判断结果为所述第一逻辑块的写入区域不为空时,获取 所述备份块的位置。
9、 如权利要求7所述的闪存块磨损平衡的系统,其特征在于,所述更新才莫 块具体包括读入单元,用于将所述第一逻辑块中的数据读入内存,所述第一逻辑块中 的数据包括逻辑块号和所述第一逻辑块写入区域的数据;拆分组合单元,用于在所述内存中将所述第 一逻辑块中的数据进行拆分, 将所述第一逻辑块的逻辑块号和所述新数据结合生成所述写入数据。
10、 如权利要求9所述的闪存块磨损平衡的系统,其特征在于,所述第一 写入模块具体用于擦除所述备份块中存储的逻辑块号信息,将所述新数据写入所述备份块的 写入区域;所述新数据写入完成后,在所述备份块存储逻辑块号的区域写入所述第一 逻辑块的逻辑块号。
11、 如权利要求7所述的闪存块磨损平衡的系统,其特征在于,所述第一 擦除模块具体用于擦除所述第一逻辑模块中存储的逻辑块号信息和写入区域的数据。
12、 如权利要求7所述的闪存块磨损平衡的系统,其特征在于,所述第二 获取模块具体包括第一获取单元,用于获取所述备份块对应的物理块; 寻找单元,用于寻找所述物理块的下一个或者上一个物理块; 第二获取单元,用于获取所述下一个或者上一个物理块对应的逻辑块;记录单元,用于记录所述逻辑块的逻辑块号,并将所述逻辑块作为第二逻 辑块。
全文摘要
本发明公开了一种闪存块磨损平衡的方法和系统,属于存储技术领域。所述方法包括接收到向第一逻辑块写入新数据的指令;获取备份块的位置;将所述第一逻辑块中的数据读入内存,在所述内存中将所述数据更新为欲写入所述第一逻辑块中的写入数据;将所述写入数据写入所述备份块;擦除所述第一逻辑块;按照预先设定的规则获取第二逻辑块的位置;将所述第二逻辑块中的数据写入所述第一逻辑块;擦除所述第二逻辑块,并设置所述第二逻辑块为新的备份块。所述系统包括主机和闪存。通过设立一个空白的备份块,并控制该备份块不断移动,节省了内存的存储空间,实现简单,达到了闪存块真正的磨损平衡。
文档编号G06F12/06GK101458661SQ20081024665
公开日2009年6月17日 申请日期2008年12月29日 优先权日2008年12月29日
发明者于华章, 舟 陆 申请人:北京飞天诚信科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1