一、 Nandflash简介
基本概念:flash芯片、block、page、附加页
1.1结构
Flash芯片的擦除以块为单位,写以页为单位。在每个flash芯片中包括非常多的块,同款芯片上每个块的大小相同(2MB、4MB..),在每个块上包含多个页,每个页大小相同。在每个页面后都跟随着一个附加页,用来对对应页面进行标记或者对页上的数据进行校验,页面通常的大小为2Kb+64byte、512byte+32byte、1024byte+64byte等。结构如图1.1所示:
图1.1,nand flash结构示意图
1.2 特点(对于flash的研究主要是针对其特点优化其性能或者克服其缺点)
1. Nand flash不是通常意义上的块设备,块设备的特点是可以对数据块进行读、写操作(如磁盘,文件系统等),但是对于Nand flash来说有三种操作分别是:读、写、擦除。只有对已擦除的块才能进行写操作。所以为了使其兼容传统的硬件和系统,需要对其进行特殊处理;
2. 当一个闪存处在干净状态时(被擦除过,但是还没有写操作发生),这块flash上的每一位(bit)都是逻辑1;
3. nand flash不可以片上执行,但是存储密度大,因此常作为存储介质使用;
4. Nand flash是按位寻址的,意味着可以从一块闪存的任意偏移地址读数据;
5. 闪存的使用寿命是有限的,具体来说,闪存的使用寿命是由擦除块的最大可擦除次数来决定的。超过了最大可擦除次数,这个擦除块就成为坏块(bad block)了。因此要避免某个擦除块被过度使用,以至于先于其他擦除块变成坏块,应该在尽量少影响性能的前提下,使擦写操作均匀分布在每个擦除块上,叫做损耗均衡(wear leveling)。
二、文件系统简介
文件系统是对于文件和存储空间的组织和管理,并对内核提供调用接口。主要是对数据结构的设计。在一定程度上类似数据库ACID(原子性、一致性、隔离性、持久性)的设计理念。
2.1文件系统结构
传统文件系统ext2与基于flash设备的文件系统在系统中的位置对比图。
图2.1各文件系统对比图
2.2 目前成熟的可以使用在非易失存储器上的典型的文件系统
为了在掉电或者系统崩溃情况数据的一致性,很多文件系统都增加了日志的功能。日志文件系统(journaling file system)一般执行步骤如下:
1. 预备:当系统要写入一个文件时,会现在日志记录块中记录某个文件准备要写入的信息;
2. 实际写入:开始写入文件的权限与数据;开始更新meta data的数据;
3. 结束:完成数据与meta data的更新后,在日志记录块中完成该文件的记录
在日志系统的帮助下,万一的记录过程中发生了问题,那么系统只需要检查日志记录块就可以知道哪个文件发生了问题,针对该问题做一致性检查即可,不必对整个文件系统做检查,从而达到快速修复文件系统的目的。
2.2.1 Ext2\ext3\ext4文件系统
Ext2可以通过FTL实现对flash的支持,FTL可以将闪存flash模拟成磁盘结构,从而实现对基于磁盘的文件系统的支持,但是效率比较低。Ext2文件系统结构如图2.2.1.1所示
图2.2.1.1 ext2文件系统结构图
各名词解释如下:
1. 超级块(super block):记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息;
2. i节点(inode):记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码;
3. block:实际记录文件的内容,若文件太大时会占用多个block。
由于每个inode与block都有编号,而每个文件都会占用一个inode,inode内则有文件数据放置的block号码。Inode索引结构如