报告一 FAT32文件系统的实现
文件系统(File System)是计算机系统必不可少的组成部分,可以说除了部分结构简单的单片机系统之外,文件系统是支撑每一个计算机系统运行的最重要的支撑,无论是操作系统、应用程序、文档还是音视频都是基于文件系统的。所以由此可见文件系统在计算机上的重要地位。
起初所有的FAT文件系统都是为PC机器设计的,这说明了一个重要的问题:FAT文件系统在磁盘上的数据是以“小端”结构存储的。我们使用4个8-bit字节----起始字节为byte[0],结束字节为byte[3],类存储一个32-bit的FAT项。然后分别给这32位编号为00—31,从下表可以看出这32位如何排序。
Byte[3] 3 3 2 2 2 2 2 2
1 0 9 8 7 6 5 4
Byte[2] 2 2 2 2 1 1 1 1
3 2 1 0 9 8 7 6
Byte[1] 1 1 1 1 0 0 0 0
5 4 3 2 1 0 9 8
Byte[0] 0 0 0 0 0 0 0 0
7 6 5 4 3 2 1 0
这对于那些使用“大端”存储结构的机器就显得尤为重要,因为在磁盘存取数据之前,必须完成big-endian和little-endian之间的转换。
每个FAT32文件系统由DBR及其保留扇区,FAT1,FAT2和DATA四个部分组成,其结构如下图:
这些结构是在分区被格式化时创建出来的,含义解释如下:
DBR及其保留扇区:DBR的含义是DOS引导记录,也称为操作系统引导记录,在DBR之后往往会有一些保留扇区。
FAT1:FAT的含义是文件分配表,FAT32一般有两份FAT,FAT1是第一份,也是主FAT。
FAT2:FAT2是FAT32的第二份文件分配表,也是FAT1的备份。
DATA:DATA也就是数据区,是FAT32文件系统的主要区域,其中包含目录区域。
FAT32文件系统的DBR有5部分组成,分别为跳转指令,OEM代号,BPB,拓展BPB,引导程序和结束标志。
跳转指令将呈现执行流程跳转到引导程序处;
OEM ID由厂商指定,这里是MSDOS5.0;
BPB记录文件系统相关的重要信息,由BPB和拓展BPB组成。
接下来一个重要的数据结构就是FAT表,它是一一对应与数据区簇号的列表。
文件系统分配磁盘空间按簇来分配的。因此,文件占用磁盘空间时,基本单位不是字节,而是簇。即使某个文件只有一个字节,操作系统也会给他分配一个最小单元----即一个簇。
磁盘格式化后,用户文件是以簇为单位存放在数据区中,一个文件至少占用一个簇。当一个文件占用多个簇时,这些簇的簇号不一定是连续,但这些簇号间有由存储该文件时确定了的顺序,即每个文件都有其特定的“簇号链”。
在磁盘上的每一个可用的簇在FAT中就只有一个登记项,通过在对应簇号的登记项内填入“表项值”来表明数据区中的该簇是否占用、空闲或是已损坏的。损坏的簇是在格式化的过程中,通过FORMAT命令发现。在一个簇中,只要有一个扇区有问题,该簇就不能够使用。
现将FAT表