在Nand Flash上构建FAT文件系统摘要:本文介绍了Nand Flash存储器的结构,介绍了Fat文件系统的结构,介绍了Nand Flash 基础上实现Fat文件系统的初步构想,分析了工作中的难点。
是对之前阅读FA T文件系统资料工作的总结。
目录1Nand Flash的结构 (3)1.1Nand Flash一般结构 (3)1.2Nand Flash数据完整性 (4)1.3建立在Flash上的文件系统的要求 (4)2FA T文件系统 (5)2.1FA T文件系统简介 (5)2.2FA T文件系统的组成 (5)2.2.1引导扇区 (5)2.2.2保留扇区 (7)2.2.3FA T表和数据的存储原则 (7)3Nand Flash上的文件系统 (13)4工作分析 (14)5参考文献: (15)1Nand Flash的结构1.1Nand Flash一般结构Flash是一种非易失性的存储器,允许用户进行电擦除和电写入。
NOR和NAND是现在市场上两种主要的非易失闪存技术。
NOR的特点是芯片内执行(XIP, eXecute In Place),应用程序可直接在flash闪存内运行,传输效率很高,很低的写入和擦除速度。
NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。
应用NAND的困难在于flash的管理和需要特殊的系统接口。
K9F2808U0C是Sunsang公司的一块16MB 的Nand Flash芯片,其结构图如图1.1所示,Flash按照结构分为,区(Partion),块(Block),扇区(Sector)。
该Flash芯片的列地址被分为3种,A区(0-255byte),B区(256-511byte),C区(512-527byte)图1.1 K9F2808U0C结构图Flash设备的编程只允许从1写到0,而不能将某位数据从0写到1,只能通过擦除的方式将一整块的数据写为1,如图1.2所示。
图1.2 Flash设备写入特点1.2Nand Flash数据完整性Nand Flash 使用中要数据完整性,主要有两个因素的影响:1)Flash中的坏块,可能在出场的时候Flash设备中就存在坏块,也可能随着Flash设备的使用,在使用的某刻,出现坏块。
但块与块之间是独立的,某Flash设备中出现坏块不影响其它块的使用。
处理方法是建立和维持一个坏块的列表,使用软件进行坏块的检测和屏蔽;2)写操作时因掉电而造成的数据的丢失。
通过文件系统来处理这一问题。
1.3建立在Flash上的文件系统的要求1)写分布。
由于每块都是独立的,具有有限的擦写次数,因此在进行写入或者擦除时避免一直对某块进行反复的擦写,而应将对Flash设备的擦除或者写入分布到所有的块中;2)存储回收。
改动的数据往往并不是被写回原有的块中,而是写到一个新的可编程的块中,这就需要对原有的块进行回收,以使其变成新的可编程的块;3)读写同时进行。
对于多分区的Flash,可以在对某区进行读的同时,对另一区进行写操作。
如果是同时对某分区进行读写操作,只能通过软件进行控制;4)对Flash设备的统一管理。
使用软件的方法能将不同的Flash统一管理。
2FAT文件系统2.1FAT文件系统简介FA T文件系统是File Allocation Table的简称,一共有三种,分别是FAt12、FA T16、FA T32。
FA T12是最早的FA T文件系统,伴随着Dos诞生,在DOS3.0以前使用,采用12位文件分配表,Fat12可以管理的磁盘容量是8M,现在主要用在软盘驱动器中。
Fat12文件系统有如下限制:1) 文件名:只能是8.3格式的文件名;2) 磁盘容量:最多8M(4096clusters×4sectors/clusters×512bytes/sectors);3) 文件碎片严重。
在Dos3.0中,微软推出了新的文件系统Fat16。
除了采用了16位字长的分区表之外,Fat16和Fat12在其他地方都非常的相似。
字长增加4位,可以使用的簇的总数增加到了65546=216。
在总的簇数在4096之下的时候,应用的还是Fat12的分区表,当实际需要超过4096簇的时候,应用的是Fat16的分区表。
FA T16分区格式存在严重的缺点:大容量磁盘利用效率低。
为了解决磁盘浪费问题,微软推出了一种全新的磁盘分区格式FA T32,应用在Windows 95 OSR2及以后的Windows 版本中。
这种格式采用32位的文件分配表,磁盘的管理能力大大增强,突破了FA T16 2GB的分区容量的限制。
FA T32的限制:1)最大的限制在于兼容性方面,Fat32不能保持向下兼容。
2)当分区小于512M时,Fat32不会发生作用。
4)单个文件不能大于4G。
(精确数据是4G-2bytes)。
2.2FAT文件系统的组成每个FA T文件系统由4部分组成,这些基本区域按照一下顺序排列:0 -保留区(Reserved Region)1 -FA T区(FA T Region)2 -根目录区(Root Directory Region,FA T32卷没有此域)3 -文件和目录数据区(File and Directory Data Region)下面依次解释DBR、FA T1、FA T2、根目录、数据区、剩余扇区的概念。
2.2.1引导扇区引导扇区,又叫DBR区(DOS BOOT RECORD)即操作系统引导记录区的意思,通常占用分区的第0扇区共512个字节。
在这512个字节中,其实又是由跳转指令,厂商标志和操作系统版本号,BPB(BIOS Parameter Block),扩展BPB,OS引导程序,结束标志几部分组成,以FA T32为例说明分区DBR各字节的含义,见图2.1。
图2.1 FA T32分区DBR扇区图2.1的对应解释见图2.2图2.2 FA T32上DBR扇区解释详细的DBR扇区各字段的偏移及解释参见FA T file system specification。
2.2.2保留扇区在上述FA T文件系统DBR的偏移0x0E处,用2个字节存储保留扇区的数目。
所谓保留扇区(有时候会叫系统扇区,隐藏扇区),是指从分区DBR扇区开始的仅为系统所有的扇区,包括DBR扇区。
在FA T16文件系统中,保留扇区的数据通常设置为1,即仅仅DBR 扇区。
而在FA T32中,保留扇区的数据通常取为32。
FA T32中的保留扇区除了磁盘总第0扇区用作DBR,总第2扇区(win98系统)或总第0xC 扇区(win2000,winxp)用作OS引导代码扩展部分外,其余扇区都不参与操作系统管理与磁盘数据管理,通常情况下是没作用的。
操作系统之所以在FA T32中设置保留扇区,是为了对DBR作备份或留待以后升级时用。
FA T32中,DBR偏移0x34占2字节的数据指明了DBR 备份扇区所在,一般为0x06,即第6扇区。
当FA T32分区DBR扇区被破坏导致分区无法访问时。
可以用第6扇区的原备份替换第0扇区来找回数据。
2.2.3FAT表和数据的存储原则FA T表(File Allocation Table 文件分配表),是Microsoft在FA T文件系统中用于磁盘数据(文件)索引和定位引进的一种链式结构。
在FA T文件系统中,文件的存储依照FA T表制定的簇链式数据结构来进行。
同时,FA T文件系统将组织数据时使用的目录也抽象为文件,以简化对数据的管理。
FA T表项的大小与FA T类型有关,FA T12的表项是12bit,FA T16为16bit,FA T32为32bit。
我们把数据区空间分成BPB_BytsPerSec*BPB_SecPerClus字节长的簇来管理,对于大文件,需要分配多个簇,同一个文件的数据并不一定完整的存放在磁盘上一个连续的区域内,而往往会分成若干段,象链子一样存放。
这种存放方式称为文件的链式存储。
为了实现文件的链式存储,文件系统必须准确的记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后继内容的下一个簇的簇号,对文件的最后一簇,则要指明本簇无后继簇。
这些都是由FA T表来保存的,FA T表的对应表项中记录着它所代表的簇的有关信息:诸如是否空,是否是坏簇,是否已经是某个文件的尾簇等。
FAT16存储原理当把一部分磁盘空间格式化为fat文件系统时,fat文件系统就将这个分区当成整块可分配的区域进行规划,以便于数据的存储。
1扇区实际情况取大小同FAT132个扇区开始簇编号(从2开始)不足一簇图2.3 FA T12/16 文件系统组织形式FA T16是Microsoft较早推出的文件系统,具有高度兼容性,目前仍然广泛应用于个人电脑尤其是移动存储设备中。
FA T16简单来讲由图2.3所示的6部分组成(主要是前5部分)。
首先是引导扇区(DBR),已经说过,FA T16在DBR之后没有留有任何保留扇区,其后紧随的便是FA T表。
FA T表是FA T16用来记录磁盘数据区簇链结构的。
FA T将磁盘空间按一定数目的扇区为单位进行划分,这样的单位称为簇。
通常情况下,每扇区512字节的原则是不变的。
簇的大小一般是2n (n为整数)个扇区的大小,像512B,1K,2K,4K,8K,16K,32K,64K。
实际中通常不超过32K。
之所以簇为单位而不以扇区为单位进行磁盘的分配,是因为当分区容量较大时,采用大小为512b的扇区管理会增加fat表的项数,对大文件存取增加消耗,文件系统效率不高。
FA T16分区中簇的大小的取值是有关系的,见图2.4。
格式化FA T16分区时,格式化程序根据分区的大小确定簇的大小,然后根据保留扇区的数目、根目录的扇区数目、数据区可分的簇数与FA T表本身所占空间来确定FA T表所需的扇区数目,然后将计算后的结果写入DBR的相关位置。
FA T16 DBR参数的偏移0x11处记录了根目录所占扇区的数目(记录了根目录所包括的目录项数,每项32Byte)。
偏移0x16记录了FA T表所占扇区的数据。
偏移0x10记录了FA T 表的副本数目。
系统在得到这几项参数以后,就可以确定数据区的开始扇区偏移了。
FA T16文件系统从根目录所占的32个扇区之后的第一个扇区开始以簇为单位进行数据的处理,这之前仍以扇区为单位。
对于根目录之后的第一个簇,系统并不编号为第0簇或第1簇(可能是留作关键字的原因吧),而是编号为第2簇,也就是说数据区顺序上的第1个簇也是编号上的第2簇。
FA T表实际上是一个数据表,以2个字节为单位,我们暂将这个单位称为FA T记录项,通常情况其第1、2个记录项(前4个字节)用作介质描述。
从第三个记录项开始记录除根目录外的其他文件及文件夹的簇链情况。