NAND Flash虚拟层的建立需要对NAND Flash虚拟层进行初始化,根据相应的NAND Flash的物理结构参数建立逻辑结构,并建立索引表来管理逻辑虚拟层与物理虚拟层之间的联系;而在NAND Flash虚拟层运行过程中需要对NAND Flash虚拟层进行相应的垃圾回收、坏块管理和平滑处理操作,从而提高NAND Flash的性能和寿命,以下是对NAND Flash虚拟层的主要模块进行简要介绍:
初始化
主要完成对NAND Flash虚拟层硬件初始化、扫描NAND Flash以获取其物理结构参数、NAND Flash虚拟层索引表的查找与建立、NAND Flash逻辑虚拟层初始化、NAND Flash虚拟层重要数据结构的初始化,例如索引表、缓存页等结构;
索引表机制
在NAND Flash虚拟层中对于索引表的操作,主要包括在初始化过程中对于索引表的查找与重建的操作、在读写过程中对于如何获取与读写操作对应的块索引表与页索引表;
垃圾回收机制
NAND Flash虚拟层垃圾回收机制的触发条件是获取不到日志块中的日志页进行写操作的情况;其主要是对日志块进行合并,回收无效数据从而腾出空间容纳新写入的有效数据;
坏块管理机制
NAND Flash虚拟层坏块管理机制是在对NAND Flash进行擦除和写操作出现错误时触发的,其主要是确定坏块、坏块有效数据恢复、写入坏块标志、获取新的好块来替代坏块等操作;
平滑处理机制(静态磨损均衡策略)
当NAND Flash虚拟层整体擦除次数超过某个阈值时,触发NAND Flash虚拟层的平滑处理,其主要是将低擦写次数的数据块(存放数据的物理块)与高擦写次数的空闲块进行交换,从而平衡NAND Flash中各个块的擦写次数,提高整体寿命;
读写操作
NAND Flash虚拟层的读写操作都包含对于逻辑地址的转换、获取相应的索引表等操作,而NAND Flash虚拟层的写操作相比于读操作,写操作一定要获取到相应的日志页来进行写入,在这过程中包括对NAND Flash虚拟层的垃圾回收和平滑处理;
主要实现思想概述
NAND Flash虚拟层采用集中索引的方式,并将索引表存放在一个固定范围内,在运行过程中将要操作的索引表读取到RAM中,从而根据RAM中的索引表来对NAND Flash进行相应的读写、擦除操作;对于有改动的索引表则需要写回到NAND Flash中;而对于索引表的建立是通过读取每个物理块的逻辑信息来完成的;
NAND Flash虚拟层通过日志块-数据块的方式来管理整个虚拟层的,所谓的日志块-数据块方式,是指逻辑块至多对应一个日志块和一个数据块,因为NAND Flash具有写前擦除和读写操作单位和擦除操作单位不一致的限制(读写是以页为单位的、擦除是以块为单位的),因此在进行写入操作时,数据都是写入日志块中,这样可以很好的避免在更新一个页的情况擦除一个块;当获取不到新的日志块来进行写入操作时,会触发垃圾回收机制来处理这种情况;
NAND Flash虚拟层的垃圾回收机制通过合并日志块来实现的,在这个过程中获取新的空闲块是获取低擦写次数的空闲块来代替日志块的(日志块需要进行频繁的写和擦除操作);在垃圾回收机制中,针对要回收的日志块的情况分三种情况进行处理:
1. 日志块中有效页小于整块容量的一半,则将日志块中的有效页的数据拷贝到新的空闲块中,然后将原来的日志块擦除并设置为空闲块,原来的空闲块设置为日志块;
2. 日志块中都为有效页,此时日志块中的剩余空闲采用其相对应数据块的相同位置的数据进行填充,然后将原来的日志块设置为数据块,而对原来的数据块进行擦除并设置为空闲块;
3. 除以上两种情况外,则需要对日志块中的每个页进行判断,对于日志块的有效页则将其中的数据拷贝到空闲块中,若不为有效页,则拷贝数据块中相同页的数据到空闲块中,最后擦除原来的日志块和数据块,并设置其为空闲块,而对于原来的空闲块设置为数据块;
NAND Flash虚拟层的平滑处理机制,通过将数据块表中对应的低擦写次数的物理块和空闲块表中对应的高擦写次数的物理块两者的角色进行互换,即将低擦写次数的物理块数据拷贝到高擦写次数的物理块,然后擦除后加入到空闲表中,而高擦写次数的物理块加入到数据块表中;
NAND Flash虚拟层的坏块管理,首先要做的就是判断是否“误杀”,即再对发生错误的物理块进行擦除操作,若还是出错,则确定为坏块;然后获取新的空闲块将坏块中的有效数据拷贝到新的空闲块中,然后往坏块中写入坏块标志;
NAND Flash虚拟层的动态磨损均衡策略,是通过获取空闲块时候来实现的,获取空闲块时获取低擦写次数的空闲块就是动态的使NAND Flash的整体擦写次数趋于平衡;