操作系统中的文件系统:文件分配表(FAT)文件系统详解
字数 1301 2025-11-21 21:38:42
操作系统中的文件系统:文件分配表(FAT)文件系统详解
一、问题描述
文件分配表(File Allocation Table, FAT)是一种经典的文件系统,曾广泛应用于DOS、Windows 9x系列和早期移动存储设备(如U盘)。其核心设计目标是通过简单的表结构管理磁盘块的分配与文件寻址,适应资源受限的环境。面试中常围绕FAT的数据结构、文件存储机制、优缺点及与现代文件系统(如NTFS、ext4)的对比展开。
二、FAT的核心组成
-
磁盘分区结构
FAT文件系统将存储空间划分为三个连续区域:- 引导扇区(Boot Sector):存储分区信息(如扇区大小、FAT表数量)、引导代码。
- 文件分配表(FAT区):一个或多个FAT表(互为备份),每个表项对应一个磁盘簇(Cluster),记录簇的分配状态或指向下一个簇的编号。
- 数据区(Data Region):实际存储文件内容的簇集合。
-
簇(Cluster)的概念
- 簇是FAT中空间分配的基本单位,由连续扇区组成(如1个簇=4个扇区=2KB)。
- 文件可能占用多个簇,这些簇在磁盘上不一定连续,通过FAT表链式连接。
三、文件存储与寻址机制
-
目录项(Directory Entry)
- 每个文件/目录在父目录的数据区中对应一个32字节的目录项,存储:
- 文件名(8.3格式)、属性(如目录/隐藏)、创建时间、起始簇号。
- 示例:文件"ABC.TXT"的目录项中记录其第一个簇的编号为5。
- 每个文件/目录在父目录的数据区中对应一个32字节的目录项,存储:
-
FAT表的链式寻址
- 步骤1:系统读取目录项,获取起始簇号(如簇5)。
- 步骤2:查询FAT表第5项,若值为6,表示文件下一部分在簇6;若值为特殊标记(如0xFFF8),表示已是最后一簇。
- 步骤3:按链式顺序(5→6→7→...)读取所有簇,完成文件访问。
-
空闲空间管理
- FAT表中值为0的项表示空闲簇;分配时扫描FAT表找到连续或分散的空闲簇。
四、FAT的变体与演进
-
FAT12/FAT16/FAT32的区别
- FAT12:表项为12位,最多支持4096个簇,适用于小容量软盘。
- FAT16:16位表项,最大分区2GB(簇大小64KB时)。
- FAT32:32位表项(实际用28位),支持更大分区和更小簇,兼容性极佳。
-
FAT的局限性
- 单文件大小限制:FAT32单文件最大4GB(因目录项中文件大小字段为32位)。
- 无日志功能:断电可能导致文件系统损坏(需
chkdsk修复)。 - 低效的碎片化:文件分散存储时访问性能下降。
五、对比现代文件系统
-
与NTFS的对比
- NTFS使用元数据日志提升可靠性,支持权限控制、硬链接等高级特性。
- FAT无需日志,结构简单,适合闪存设备(减少写入次数)。
-
与ext4的对比
- ext4采用extent(区间) 管理连续块,减少碎片;FAT依赖链式结构。
六、总结
FAT的核心思想是通过集中式表结构实现文件的非连续存储,平衡了简单性与功能性。尽管逐渐被替代,但其设计理念仍影响嵌入式系统和便携存储设备。理解FAT有助于深入掌握文件系统在数据结构、空间分配、可靠性权衡方面的基础问题。