资源描述
FAT文件系统在NAND Flash存储器上的改进设计
摘要:嵌入式系统的大量数据都存储在其Flash芯片上。根据Flash器件的固有特性,本文构建了一个适合管理NAND Flash存储器的FAT文件系统,并阐述了具体的设计思想。该系统改进了FAT表和FRT表的存储方式,延长了存储器的使用寿命,并提高了稳定性。
关键词:NAND Flash存储器 FAT16文件系统 FAT表 FRT表
FAT File System Designed on NAND Flash Memory
Abstract: A large number of data of embedded system are stored in Flash memory. Based on the intrinsic characteristics of Flash memory, this paper designed a FAT file system which is suitable for NAND Flash, and described the detailed notion. The system changed the storage methods of FAT and FRT, extended its use-life, and improved its reliability.
Keywords: NAND Flash Memory FAT16 File System FAT FRT
随着Flash芯片在各种嵌入式电子产品中的广泛应用,大容量的数据存储已经成为一个不容回避的问题。由于集成电路制造工艺的提高,Flash存储器的容量也呈指数增长。
NAND Flash存储器是一种数据正确性非理想的器件,容易出现位反转现象,同时在使用中可能会有坏损单元。数据写入必须在空白的区块或者擦除后的区块中进行,其底层技术要求以块为单位进行擦除(将“0xff”写入到要擦除的存储块中),再按页写入。Flash存储器的擦除次数是有限的,一般是1,000,000次,当某块执行过度的擦除操作后,这一块的存储空间将会变为“只读”状态,不能再写入数据。根据以上特点,为了避免某些块的过度操作,而导致存储卡使用寿命减少,设计专门针对Flash存储器的文件系统是必要的[2]。
1 NAND Flash存储器的特点
NAND Flash存储器读取操作与普通SRAM存储器类似,可以随机读取,读出的速度也很快。芯片生产厂商规定存储空间的第一块必须是有效块,装载了出厂标识,系统配置等信息,而其它块可能在使用前就是坏块,需要在初次使用时进行坏块检测,并标记,禁止数据写入。由于存储器每一块的内部结构都是相互独立的,坏块并不影响系统的操作[4]。
在设计NAND Flash文件系统前,首先需要了解其内部结构。目前市面上的NAND Flash芯片单片容量已经高达1Gbyte,存储器容量最高达到4Gbyte(由4片大小1G的芯片封装而成)。知名的NAND Flash制造商有Samsung,Tashiba等,下面以Samsung公司的K9WAG08U1M为例,说明大容量的NAND Flash芯片的组织结构。
如图1所示,在K9WAG08U1M中,页(page)是最基本的组织单位,每页有(2048+64)=2112字节,64页构成一个块(block),每块的容量是(2048+64)×64=(128K+4K)byte,芯片共8192块,总存储容量为:(128K+4K)×8192=(1G+32M)字节。存储器每页带有64byte的冗余字节,整个芯片共计32M的冗余空间,用于存放块信息和ECC校验码等[7]。
图1 K9WAG08U1M的结构
2 Flash文件系统的应用特点
目前嵌入式设备的Flash文件系统主要有如下三种[6]:M-Systems公司的TrueFFS、JFFSx以及唯一专门针对NAND Flash设计的YAFFS。这三种Flash文件系统都引入了日志结构(Log-Structured )的思想,其中JFFSx和YAFFS是代码开源的。现在大多数嵌入式手持设备上的操作系统采用FAT文件系统,而DOS下通用的FAT文件系统并不适合直接移植到Flash存储器中,主要有以下三个原因[5]:第一,嵌入式系统的应用条件恶劣,电源电压不稳定,突发性断电以及非法插拔都将对Flash的存储造成灾难性的影响,通用文件系统对于可靠性的设计考虑不足;第二,通用文件系统的记录信息需要被多次改写(如FAT表),而记录信息放在固定的区块中,将导致该区块的频繁使用,影响整个Flash器件的使用寿命;第三,Flash存储器读取速度比磁盘驱动器快,存储的内容很多是多媒体数据资料,这些数据允许一定程度的误码率,未必需要如通用文件系统那样严格保证存储的正确性。如果通过灵活的校验机制与坏损管理,可以达到更高效的存储空间利用率,这对成本敏感的嵌入式系统来说是更加需要考虑的。
针对上述情况,本文构建了一个适合NAND Flash存储器的FAT文件系统,并针对其存储特点,对FAT表和FRT表的存储方式进行了改进,延长了使用寿命,增强了可靠性,使之更有利于Flash存储器的应用。
3 FAT文件系统的结构[1][3]
FAT文件系统技术成熟、结构简单、系统资源开销小,易于在嵌入式系统的硬件平台上实现。
文件系统由以下4部分组成,按如下顺序排列,如表1:
0-系统记录区(System Record Region)
1-FAT表区(FAT Region)
2-文件登记表区(File Register Table Region)
3-数据区(Data Region)
系统记录区
SR(System Record)
文件分配表
FAT(File Allocation Table)
文件登记表
FRT(File Register Table)
数据区
(Data Region)
表1:FAT文件系统结构
(1)系统记录区(SR,System Record Region)存放最重要的文件系统信息。如Flash存储器的类型、容量、版本信息、数据区域的位置和大小,还包括分区表和主引导程序。主引导程序的任务是检查分区表是否正确,自动读取FAT表和FRT表,将其复制到控制终端的内存中。
(2)文件分配表(FAT,File Allocation Table)存放Flash存储器上所有区块的占用与空闲情况以及每个文件的存储连接结构。FAT文件系统中有12位、16位、32位三种不同的格式,不同格式的文件系统管理存储单元的个数不同,如FAT16文件系统采用16位字长的分配表,最多可以管理2的16次方(65536)的基本存储单元。
(3)文件登记表(FRT,File Register Table)紧跟在FAT表之后,存放Flash文件系统中每一个文件的代号、长度、属性、目录、生成或最后修改的时间、以及该文件的存储链在文件分配表中的入口。
(4)数据区域(Data Region)用于存放数据。本Flash文件系统中,数据分配的最小单位是Flash存储器的一个基本擦除单元,即一个物理区块(block)。
考虑到文件系统在嵌入式设备上实现的方便性并权衡Flash存储器的应用规模,我们选择了建立FAT16文件系统。
4 FAT文件系统的改进设计
当文件系统工作时,发生变化的只有FAT表和紧跟在其后的FRT表,因此,只用跟踪记录FAT表和FRT表就能知道文件操作的具体情况,这也是文件系统的核心。但Flash存储器结构跟硬盘不同,不能直接改写其内容。直接移植的FAT文件系统,FAT表和FRT表始终存放在同一个区块中,将会导致该区块的使用寿命明显比其他的区块短,如果这一重要区域失效,将影响整个存储器的使用,因此我们必须改进两个表的存储方式。
Flash生产厂商设定的存储空间的第一区块必定是有效块。在改进的设计中,将第一个区块(128K+4K byte)作为存储器的系统记录区,同时在此区块中建立一个100K(50页)的空白区域用于记录FAT表在Flash中的起始地址(FRT表紧跟FAT表之后,不必再单独记录其首地址)。按照写入操作以页为单位的规则,100K的空间,可以加入FAT表的起始地址50次。Flash第一块的分配信息如下,如表2:
出厂标识,
原始配置信息等
SR系统记录信息
和主引导程序
FAT表首地址
……
……
表2:系统信息区结构
改进设计的文件系统把FAT表和FRT表作为可移动的数据放在某一个区块内,在Flash的系统信息区中记录着FAT表的首地址,并指针指向。每次FAT表存储的位置发生变化时,只用将新位置的首地址添加到系统信息区的空白区域中,再调整指针的指向。这样避免了FAT表和FRT表始终在一个区块中反复擦写,导致该区块被过度使用,减少存储器的寿命。具体如图2所示:
图2 文件系统的操作原理图
图2中,主引导区程序首先读出存储在系统信息区中FAT表的首地址,找到FAT表和FRT表,再将其复制到控制终端的内存中进行操作(内存中可以按位修改,避免了Flash不能按位修改的困难)。由于FAT文件系统是索引的链式结构,在内存中修改FAT表和FRT表的同时,也将两个表的改写情况以链式的方式紧跟在Flash存储器中两个表后面的空白区域里。这样在任何时候发生突然掉电或非法插拔而导致内存中FAT表和FRT表丢失的情况下,也能根据Flash中改写的内容恢复两个表,提高了文件系统的可靠性。
在全部操作完成后,先把内存中的FAT表和FRT表写到存储器的转存区块中,擦除原来表所在的区块,再将转存区块中的内容复制到擦除后的原区块中,最后擦除转存区块,完成整个一次操作。
同时,为了避免表存储区块的过渡使用,当其擦除操作次数到了一个阀值(如500,000次)时,先将FAT表和FRT表移动到其他的空白区块,新区块作为表的存储区块。再把其中FAT表的首地址,写到Flash存储器的系统信息区的预留空白区域中,通过变化指针,程序在下次操作时将读取新地址。原先存放FAT表和FRT表的区块被标志为无效,最后通过Flash的垃圾回收策略,回收此区块。这样可达到将FAT表和FRT表作为移动数据存储的目的,延长了使用寿命。如图3所示:
图3 FAT表和FRT表的存储原理图
上面的设计中,存储器第一区块作为信息记录区块,其中的预留空白空间可以记录50个地址,可以满足FAT表和FRT表移动50次,表存储区块的使用寿命提高了50倍。图4是整个操作的流程图。
图4 操作的流程图
经过上面的改进,我们设计的文件系统不仅避免了FAT表和FRT表始终在一个块中被过度的使用,也避免了在任何时候,发生掉电或非法插拔的情况,仍然可以根据Flash中修改过的内容重新建立新的FAT表和FRT表,使文件系统不至于遭到致命的破坏。这样虽然占用了一些Flash资源,但也确保了文件系统的安全可靠性。通过这样的设计,即使出现了操作异常的情况,错误也只涉及当时被操作的文件,不会扩散给Flash存储器中的其它文件,更不会因此彻底地损坏FAT表和FRT表,造成整个文件系统的瘫痪。
5 结束语
本文根据嵌入式系统中Flash存储器的特点,设计的FAT文件系统对FAT表和FRT表的存储方式进行了改进,使其使用寿命和可靠性都有了较大的提高。即使在嵌入式设备操作异常频发的恶劣工作条件下,文件系统也能够保证安全的工作。此文件系统出于可靠性的考虑,较通常的文件系统会多只占用1个区块(转存区块?该块是否也要移动)的资源,而对于嵌入式上使用的NAND Flash存储器来说,这样的耗费完全是可以接受的。
参考文献
[1]Microsoft Corp. Description of the FAT file system, datasheet. USA : 1999.
[2]普天信息技术研究院. 关于NAND Flash存储空间管理和文件管理方法的研究. 技术报告. 北京:2005.
[3]ANDREW S.TANENBAUM & ALBERT S.WOODHULL. 操作系统:设计与实现(第2版) USA:电子工业出版社. 1998.
[4]罗华春,徐邡. 基于Flash存储器的嵌入式文件管理器设计. 交通与计算机 2005 23(1) .
99-102.
[5]邓剑 杨晓非 廖俊卿. FAT文件系统原理及实现. 计算机与数字工程. 2005 33(9) .105-108.
[6]黄文增,陈俊达,陈彦胜,刘仓吉. 以区块为基础之与非门闪存管理模式:台北科技大学学报 2005 第三十七之二期
[7]K9XXG08UXM. datasheet. Samsung Electronics Corp. 2005.
展开阅读全文