概述

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构。FAT(File Allocation Table,文件配置表)是Microsoft发明的文件系统。初期的FAT就是现在所称的FAT12,后来还有FAT16,FAT32和NTFS,FAT也被Linux所支持。
FAT12包含以下四个部分:引导扇区,FAT表,根目录区和数据区。下面分别介绍。
FAT12文件系统结构

引导扇区

引导扇区包含引导程序和FAT12文件系统的整个组成结构信息,这些信息描述了FAT文件系统对磁盘扇区的管理情况。结构如下图所示。
在这里插入图片描述
第一个字段是一个跳转指令:

jmp short Label_Start
nop

因为BS_jmpBoot后面不是可执行程序,所以需要跳过这一部分。

FAT表

FAT表一般有两个,FAT1是活动FAT,FAT2是备份FAT,FAT2存在的意义就是修复FAT1。所以这里只介绍FAT1。
首先需要明确簇的概念。在磁盘中最小的单位是簇,它由几个扇区组成。也就是说,就算你放一个1字节的文件,也需要占据一个簇。
注意此处所说的簇是数据区的组织方式。从前面的表中可以看出:
BPB_BytePerSec(每扇区字节数)为512
BPB_SecPerClus(每簇扇区数)为1
因此在FAT12中每个簇就是512个字节。
另一方面,如果文件比较大,需要占据多个簇时,文件不一定在连续的簇内,这时就需要一种方法寻找到完整的文件,这个功能由FAT表完成。
FAT表中,表项位宽和FAT类型有关,FAT12对应的表项位宽就是12。
表项0和1的值是无关紧要的。其他表项每个对应数据区的一个簇,而表里保存的数据是下一个簇的簇号,这样,就形成了一个链表一样的结构了。具体的,表项保存的数据有以下的取值:

  • 000h:可用簇
  • 002h-FEFh:已用簇,标识下一个簇的簇号
  • FF0h-FF6h:保留簇
  • FF7h:坏簇
  • FF8h-FFFh:文件最后一个簇

根目录区和数据区

根目录的开始扇区号是19,它由最多BPB_RootEntCnt个目录项。这些目录项可能存储了指向文件和目录的信息。目录项是一个32B的结构体。它的结构如下:
在这里插入图片描述
数据区不仅可以保存目录项信息,也可以保存文件内的数据。对于树状的目录结构,树的层级结构可以通过目录的目录项简历起来,从根目录开始,经过目录项的逐层嵌套,形成了树状结构。

参考文献:
1.《一个64位操作系统的设计与实现》
2.FAT12文件系统介绍
3.fat文件系统

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐