一种NAND闪存的转换层读写方法
技术领域
本发明涉及嵌入式系统存储器读写技术领域,具体来说涉及一种NAND闪存的转换层读写方法。
背景技术
目前的随身电子产品,如手机、随身听所用的储存装置大都是闪存(以下称flashmemory或者直接称为flash),但flash的特性是无法重复在同一块内存位置做写入的动作,必须事先擦除该块内存位置,亦即将其充电,才能再做写入的动作,因此一般使用的文件系统,如FAT16、FAT32、NTFS、ext2等将无法直接用在flash memory上。如果想要沿用这些文件系统,则必须透过一层转换层(以下称为Translation Layer)来将逻辑块地址(以下称为Logical BlockAddress)对应到实体的flash memory的位置(以下简称为物理地址),这种映射关系称之为逻辑到物理的映射关系,并透过一些机制能让系统能把flash memory当作一般的硬盘一样处理,我们称这层为NAND闪存的转换层(即NAND Flash Translation Layer,以下简称为NFTL)。
在目前一些现有NFTL,也简称为存储技术设备层(即Memory Technology Drivers,简称为MTD层),都使用逻辑到物理的一对一的映射关系,即,当系统格式化时,先建立映射关系,并将这些映射关系写入到NAND闪存的SPARE区,因为NAND闪存的数据块一般分为两个区域:数据区(即DATA区)和文件系统信息区(即SPARE区),以便掉电后再上电时的信息还原。如果以后对相同的逻辑页进行操作时,会先拿另外一个备用块来先做数据交换。如果切换到其它块写操作,将这两块的数据进行合并,擦除原来老的块,然后重新组合。如此循环更替,经过长时间使用后,备用块全部变成坏块后,系统将无法工作。
另外,现有技术方法无法使用NAND闪存的新特性——多平面(MULTIPLANE)方式。由于现在市场上主流的多级单元(multi level cell,简称MLC)NAND闪存都有单平面(即单plane)操作和双平面(即双plane)操作两种模式,双plane又可以称为2plane操作。
如图l所示为一款MLC NAND闪存:Samsung K9LBG08U0M的PLANE切分图,单片的K9LBG08U0M共有8192个block,被切分为4个plane。Plane 0包括了block 0、block 2、……、block 4094,Plane 1包括了block 1、block 3、……、block 4095,Plane2包括了block 4096、block 4098、……、block 8190,Plane 3包括了block 4097、block4099、……、block 8191。Plane 0与plane 1互为奇偶交替,plane 2和plane 3也互为奇偶交替,如上的这样奇偶交替的一对plane称为paired plane。
NAND闪存的普通操作,如擦除(erase)、写(program)、读(read)、页对拷(copyback),都是单plane的操作,即erase只能够擦除某个plane的一个block,program只能够写某个plane的一个page,其他操作依此类同。
MLC NAND闪存除了提供单plane的操作,还提供2plane的操作选择,这里的2plane只能互为paired plane。如双平面擦除(2plane-erase),可对plane 0的block 2和plane 1的block 3同时进行擦除。双平面写(2plane-program)或双平面读(2plane-read),则可对block 2和block 3的page126同时进行写或读,其他操作依此类同。
2 plane的操作,大大减少了NAND闪存的操作时间。相同数据量的操作中,写速度可以提高到原来的1.5倍,擦速度可以提高到原来的1.5倍。因此,合理地利用NAND闪存的2plane操作将有助于提高NAND闪存的读写时间。
综上,现有技术存在以下缺点:第一、当系统格式化时就建立起映射关系,这样会增加系统的格式化的时间,而且浪费了一次写NAND闪存;第二、当坏块数目大于备用块时,系统将无法启动;第三、没有实现擦写的均衡;第四、对逻辑地址的跳写时会发生块的数据搬移,从而此时效率低下;第五、无法使用NAND闪存的新特性多平面(MULTIPLANE)方式写;第六、在发生数据搬移时,无法使用页对拷(COPYBACK)功能,使得数据搬移时效率过低。
发明内容
本发明的目的在于提供一种NAND闪存的转换层读写方法,它能够实现NAND闪存的均衡擦写,提高NAND闪存的寿命,使用NAND闪存的MULTIPLANE方式写,从而为整体写文件提速,从而提高读写的性能,实现NAND闪存的逆序写,提升跳写、回头写的性能。
本发明的目的可通过以下的技术措施来实现:
一种NAND闪存的转换层读写方法,其特征在于包括以下步骤:
(1)、系统启动,从NAND闪存中读出所有物理块中的数据链的信息,还原掉电前NAND闪存的转换层的数据链;
(2)、检查数据链是否因坏块或者掉电而被损坏,并对所述数据链进行修复;
(3)、检查当前可用块的数目,如果可用块的数目小于系统给定的一个阀值时,则进行垃圾块回收过程;
(4)、等待系统调用;
(5)、根据系统调用命令中所要求的NAND闪存的转换层的逻辑地址找到与所述逻辑地址对应的数据链;如果系统调用命令为读命令将转向第(6)步,如果为写命令将转向第(8)步;
(6)、查找读命令所要求的当前数据链的逻辑页,如果所述逻辑页中的所有物理页都是空页,将直接返回0Xff数据;否则,读出逻辑页中的最靠近数据链表头的非空物理页中的数据,并返回;
(7)、读完操作后,返回第(4)步继续等待;
(8)、查找写命令所要求的当前数据链的逻辑页,如果所述逻辑页的物理页中存在可用的物理页,则对该物理页进行写操作,如果不存在可用的物理页,则执行第(9)步;
(9)、从系统可用块中分配一组新的物理块,并将数据写入所述新的物理块中;
(10)、如果写成功,则将新的物理块加入到当前数据链中,并返回到第(4)步等待系统调用,如果写失败,则将该新的物理块标记为坏块,退回到第(9)步。
所述数据链信息记录在数据链中每个物理块的页的SPARE区。
所述逻辑页是指某个数据链中所有物理块的同一页面号的所有物理页的组合。
所述步骤(8)中如果当前数据链上没有物理块节点,则从可用块中分配一组新的物理块加入到数据链中。
所述一组新的物理块优先地为两个可以使用多平面方式的物理块,当可用块中不存在可以使用多平面方式的物理块时,所述一组新的物理块就为一个普通的物理块。
所述数据链是由多个物理块组成的数据链,每个数据链对应一个逻辑地址,所述数据链表示逻辑地址到物理地址的映射关系,所述映射关系为一对多的映射关系。
所述对数据链进行修复的过程为:如果数据链中有一个物理块变为坏块,则根据数据链上其它物理块的信息进行数据链的修复。
所述可用块为NAND闪存的所有物理块中垃圾块和空闲块的总和;所述空闲块是指已经被擦除的且可直接使用的物理块;所述垃圾块是指垃圾块回收过程中被释放的物理块。
所述垃圾回收的过程为:查找所有的数据链,找到符合以下条件的数据链:a、数据链长大于1;b、擦除次数最小;c、数据链最长;所述三个条件的优先级依次降低,如果找到这样的数据链,则将该数据链中的数据全部复制到一个可用块上,并将该可用块加入到该数据链中,再释放该数据链上的原有的物理块,这些被释放的物理块就作为垃圾块。
所述系统调用的读操作如果符合多平面读操作,则使用这种方式读,如果系统调用的读命令为单平面读操作,则直接读出相应页数据;所述系统调用的写命令如果符合多平面写操作,则使用这种方式写入数据,如果系统调用的写命令为单平面写操作,则直接写入相应页数据。
本发明方法相对与现有技术存在以下有益效果:
1、本发明方法的写操作中,只是对存在空的物理页的物理块进行写,如果不存在空的物理页,并不会擦除旧的物理块,而是会分配一组新的物理块进行写操作,即,不是每一次的写操作都进行擦除操作,因此实现了NAND闪存的均衡擦写,提高NAND闪存的寿命;
2、在读或者写操作是可以使用NAND闪存的MULTIPLANE方式写,从而为整体写文件提速,从而提高读写的性能;
3、由于每个逻辑地址中存在多个物理块,因此可以对该逻辑地址中的任意一个逻辑页面进行逆序写操作,从而实现NAND闪存的逆序写,同时,提升跳写、回头写的性能。
附图说明
图1是一款多级单元NAND闪存的平面切分图;
图2是本发明的NAND闪存的转换层读写方法的流程图;
图3是本发明方法中各种类型的物理块的转换关系示意图;
图4是本发明方法中的逻辑地址到物理地址的映射关系图;
图5是本发明的NAND闪存中一个数据链的结构示意图;
图6是图5所示的数据链中物理块的使用状态图。
具体实施方式
图2示出了本发明的NAND闪存的转换层读写方法的流程图,该方法包括以下步骤:
(1)、系统启动,从NAND闪存中读出所有物理块中的数据链中每个物理块的页的SPARE区的数据链信息,还原掉电前NAND闪存的转换层的数据链;多个物理块组成数据链,每个数据链对应一个逻辑地址,数据链表示逻辑地址到物理地址的映射关系,映射关系为一对多的映射关系。如图4的逻辑地址到物理地址的映射关系图中示出了一个逻辑地址为1(Logical add=1)的数据链表的结构示意图,该数据链表中包含三个物理块(block),块号分别为:2、1、5。图中示出了这三个物理块分别为不同plane上的物理块,物理块2为该数据链的表头元素,其中物理块2的物理页中的空闲区记录数据链表信息,物理块1和5的物理页中的空闲区则记录下一个物理块的信息。
(2)、根据SPARE区记录的数据,检查数据链是否因坏块或者掉电而被损坏,并对数据链进行修复;对数据链进行修复的过程为:如果数据链中有一个物理块变为坏块,则根据数据链上其它物理块的信息进行数据链的修复。
(3)、检查当前可用块的数目,如果可用块的数目小于系统给定的一个阀值时,则进行垃圾块回收过程;可用块为NAND闪存的所有物理块中垃圾块和空闲块的总和;空闲块是指已经被擦除的、且可直接使用的物理块;垃圾块是指垃圾块回收过程中被释放的物理块。当垃圾块和空闲块的总和小于系统给定的一个阀值时,则进行垃圾块回收过程。垃圾回收的过程为:查找所有的数据链,找到符合以下条件的数据链:a、数据链长大于1;b、擦除次数最小;c、数据链最长;上述三个条件的优先级依次降低,如果找到这样的数据链,则将该数据链中的数据全部复制到一个可用块上,并将该可用块加入到该数据链中,再释放该数据链上的原有的物理块,这些被释放的物理块就作为垃圾块。
图3示出了数据块、空闲块和垃圾块之间的转换关系。当空闲块和垃圾块的总和小于系统阈值时,对已有的数据块进行垃圾回收并产生新的垃圾块,该系统阈值对于不同系统为不同的值;当空闲块少于一定的阈值时,则将已有的垃圾块进行擦除生成新的空闲块,该空闲块的阈值也可根据系统需求进行调节;当系统需要分配新的物理块进行写入操作时,则从空闲块中取出所需要的物理块写入数据,使之成为有效的数据块。
(4)、等待系统调用;
(5)、根据系统调用命令中所要求的NAND闪存的转换层的逻辑地址找到与逻辑地址对应的数据链;如果系统调用命令为读命令将转向第(6)步,如果为写命令将转向第(8)步;
(6)、查找读命令所要求的当前数据链的逻辑页,如果逻辑页中的所有物理页都是空页,将直接返回0Xff数据;否则,读出逻辑页中的最靠近数据链表头的非空物理页中的数据,并返回;其中,逻辑页是指某个数据链中所有物理块的同一页面号的所有物理页的组合。
如图5至图6所表示的某个数据链,数据链状态为图5所示(52→88→8→5→21),其中物理块号为52的物理块为数据链的表头,物理块号为21的数据块为数据链的表尾。各个物理块可能每个块的使用状态如图6所示,图6中标明“USE”(被使用)所对应的页为已经写有数据的页,没有标志“USE”的页为没有写过数据的页。
对于读操作,如果系统需要读这个数据链的第0个逻辑页时,因为整个数据链的第0页都没有数据,证明这页从来没有被写过数据,则将返回全0XFF数据,如果读第1个逻辑页,将会从表头开始查找数据链,直到找到不为空的页,读出并返回其中数据,因为物理块52、物理块88的第1页都为空,所以将读块8的数据,并返回。如果读第5个逻辑页,因为表头物理块52的第5页已经有数据了,所以将直接读出物理块52的数据,并返回。下表1出了所有逻辑页的有效数据所在的物理块的号:
逻辑页 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
有效页的块 |
无 |
8 |
无 |
88 |
88 |
52 |
52 |
无 |
表1
(7)、读完操作后,返回第(4)步继续等待;
(8)、查找写命令所要求的当前数据链的逻辑页,如果逻辑页的物理页中存在可用的物理页,则对该物理页进行写操作,如果不存在可用的物理页,则执行第(9)步;如果当前数据链上没有物理块节点,则从可用块中分配一组新的物理块加入到数据链中。一组新的物理块优先地为两个可以使用多平面方式的物理块,当可用块中不存在可以使用多平面方式的物理块时,一组新的物理块就为一个普通的物理块。
(9)、从系统可用块中分配一组新的物理块,并将数据写入所述新的物理块中;
(10)、如果写成功,则将新的物理块加入到当前数据链中,并返回到第(4)步等待系统调用,如果写失败,则将该新的物理块标记为坏块,退回到第(9)步。
由于NANDFLASH有一种特性,不能重复写和回写,不能重复写的意思是,如果块的某页已经被写过就不能再写,必须擦写才能写,不能回写的意思是当第N页被写过后,不管第0页到第N-1页是否被写过,都不能再使用。对于图5至图6所示的数据链的写操作过程如下:下表2示出了可以写的页的块号信息,因为物理块52的第6页已经被使用,所以第0到5页都不能再使用了,只有第七页没有使用,但是因为整个数据链的第七页都没有被使用,所以将会优先使用块尾的第七页,如果写其它页的话,将会需要分配一个空闲块,写相应页,并加入到数据链表中。
逻辑页 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
可用页的块 |
无 |
无 |
无 |
无 |
无 |
无 |
无 |
21 |
表2
对于如图1所示NAND闪存,Plane 0的block 2和Plane 1的block 3分别位于两个对应plane之内,逻辑上把它们当作一个整体block来使用,也就是上述的一组物理块,则这两个物理块的物理页page则重新相间排布,形成新的“大block”:block 2的page 0、1、2、……、126、127变成了新的“大block”的page 0、2、4、……、252、254;block 3的page 0、1、2、……、126、127变成了新的大block的page 1、3、5、……、253、255。
这样把原本不相干的page当作了连续的page,系统分配时则分配一组这样的物理块,这样的好处是便于读写操作中可以使用2 plane方式。
从而,在上述的读写过程中:系统调用的读操作如果符合多平面读操作,则使用这种方式读,如果系统调用的读命令为单平面读操作,则直接读出相应页数据;系统调用的写命令如果符合多平面写操作,则使用这种方式写入数据,如果系统调用的写命令为单平面写操作,则直接写入相应页数据。如图1所示,当上层逻辑要求读、写连续的page(如page 0到page 3)时,则使用“大block”的page 0和page 1组成符合2plane操作的两个page,一次性读、写这两个page。同理page 2和page 3也是如此组合使用。从而,系统的读、写性能大为提升。
此外,在垃圾块的擦除操作的时候也是如此,可以使用block 2和block 3组成的“大block”,使用2plane的操作,一次性擦除block 2和block 3。
综上,本发明的NAND闪存的转换层读写方法,能够实现NAND闪存的均衡擦写,提高NAND闪存的寿命,使用NAND闪存的MULTIPLANE方式写,从而为整体写文件提速,从而提高读写的性能,同时配合由硬件对数据区与文件系统信息区分别进行的ECC(Error Correction Code,纠错码)校验,实现NAND闪存的逆序写,提升跳写、回头写的性能。本发明方法中使用的数据链可以为普通的数据链,当然也可以为双向链表或者其他格式的数据链表。在Plane的基础上的“大block”的划分当然也可以根据系统的性能采用两个以上的物理块组成新的“大block”从而可以采用多Plane的读写等操作,因此,在不脱离本发明构思的基础上所作出的修改都属于本发明的保护范围。