操作系统开发基础教程:古老软盘的FAT12文件系统
本文章仅提供学习,切勿将其用于不法手段!
你有没有想过:电脑里的文件为什么能“想存就存,想找就找”?其实背后有个“隐形管理员”——文件系统,它像图书馆的管理员一样,负责给文件“安排座位”“记位置”“找回来”。
今天我们要聊的是最古老的文件系统之一:FAT12。它诞生于上世纪80年代,专门给软盘(比如1.44MB的“小方片”)管文件。虽然现在很少用了,但它是理解文件系统的“入门钥匙”——搞懂了FAT12,再看NTFS、FAT32甚至Linux的EXT4,都会觉得“不过如此”。
一、FAT12的名字里,藏着它的核心秘密
FAT12的全称是File Allocation Table 12(文件分配表,12位版本)。拆开名字看:
- FAT:就是“文件分配表”——相当于图书馆的“图书位置登记本”,记录每本书(文件)存在哪个书架(磁盘块)上;
- 12:每个“登记项”用12位二进制数表示——这是FAT12的“身份证”,决定了它能管多少文件、多大空间。
二、FAT12的“图书馆布局”:软盘是怎么装下文件的?
要理解FAT12,先想象一个微型图书馆——软盘的结构,刚好对应FAT12的四大核心区域:
| 区域 | 类比图书馆的部分 | 作用 |
|---|---|---|
| 引导扇区 | 图书馆大门 | 开机时BIOS先读这里,里面有“怎么用FAT12管文件”的说明书(比如簇大小、FAT表位置)。 |
| FAT表(双份) | 图书借阅登记本 | 记录每个“文件块”的下一个位置,有两份——防止单本丢了找不到文件。 |
| 根目录 | 大厅索引卡柜 | 存所有文件的“名片”:文件名、起始位置、大小……找文件先查这里。 |
| 数据区 | 书架 | 真正放文件的地方,分成一个个“文件块”(专业叫“簇”),文件就躺在这里。 |
1. 引导扇区:FAT12的“说明书”
引导扇区是软盘的第一个扇区(512字节),里面装着BIOS启动时要执行的代码,以及FAT12的“配置参数”:
- 每扇区多少字节?(固定512字节,就像每个书架格子的大小);
- 每簇多少扇区?(比如1.44MB软盘是1扇区/簇,即每个文件块512字节);
- FAT表有多少个扇区?(比如1.44MB软盘是9扇区/个FAT表);
- 根目录有多少个扇区?(比如14扇区,能存224个文件——因为每个文件名占32字节)。
这些参数像图书馆的“规则”:格子多大、登记本有几本、索引卡能写多少本书。
2. 数据区:“文件块”的排列方式
数据区是软盘的“存书区”,被分成一个个簇(Cluster)——这是FAT12中文件的最小存储单位。
比如1.44MB软盘,每个簇是1个扇区(512字节),相当于每个“文件块”只能放512字节的文件。哪怕你要存一个1KB的文件,也得占两个簇(1024字节),剩下512字节就“浪费”了——这就是传说中的簇碎片。
为什么要这样设计?因为管理“半个文件块”比管理“整块”麻烦得多。就像图书馆不会给你留“半格书架”,要么占一格,要么不占。
3. FAT表:文件的“位置链”
FAT表是FAT12的“灵魂”,它是一个数字链表,记录每个簇的“下一个归属”。
比如:
- 簇1存了文件A的前512字节,FAT表中“簇1”对应的条目是“3”——意思是“文件A的下一个部分在簇3”;
- 簇3存了文件A的中间512字节,FAT表中“簇3”对应的条目是“5”——下一个在簇5;
- 簇5存了文件A的最后512字节,FAT表中“簇5”对应的条目是“FFF”(十六进制)——意思是“文件A结束了”。
这样,文件就被拆成一个个“簇链”,通过FAT表连起来。就像图书馆的登记本上写着:“《红楼梦》在3号格子,下一本在5号,再下一本在7号……直到最后一本。”
关键细节:
- FAT表的每个条目是12位(1.5字节),所以两个簇的条目会凑成3字节(比如“003”+“005”=6字节),节省空间;
- FAT表有两份副本——就像登记本有两本,一本丢了还能用另一本恢复,防止数据丢失。
4. 根目录:文件的“名片盒”
根目录是FAT12的“文件索引”,里面存着所有文件的目录项(每个32字节)。每个目录项相当于文件的“名片”,写着:
- 文件名(8字节)+ 扩展名(3字节):比如“LOADER BIN”(主名8字节,扩展名3字节,不足补空格);
- 起始簇号(2字节):比如“0002”——文件从这个簇开始存;
- 文件大小(4字节):比如“00001234”——文件总共1234字节;
- 其他属性(比如是否只读、隐藏)。
找文件的过程,就像“查名片→找登记本→找书架”:
- 先翻根目录的“名片盒”,找到“LOADER BIN”的名片,拿到起始簇号“2”;
- 去FAT表查“簇2”的条目,得到下一个簇“3”;
- 再查“簇3”的条目,得到“4”……直到遇到“FFF”,把所有簇连起来,就读到了整个文件。
三、FAT12的“天花板”:它能管多大?
FAT12的设计目标是小存储设备(比如1.44MB软盘),所以它的局限很明显:
1. 最大分区大小:128MB
因为FAT表是12位,最多能管理4096个簇(2¹²=4096)。如果每个簇是32KB,总空间就是4096×32KB=128MB——超过这个数,FAT表就不够用了。
2. 最大文件大小:16MB
如果每个簇是4KB,最大文件是4KB×4096=16MB——存不下大电影、大游戏。
3. 文件名太短:最多11字节
主名8字节+扩展名3字节,比如“INSTALL.EXE”可以,但“VERY_LONG_FILE_NAME.TXT”不行——这就是早期电脑“文件名不能太长”的原因。
四、FAT12的“遗产”:它给我们留下了什么?
虽然现在FAT12已经被FAT32、NTFS取代,但它的设计思想影响至今:
- 按块存储:不管是FAT32还是EXT4,都是把文件拆成“块”存,用表记录块的位置;
- 双备份:FAT表的双副本,后来变成了NTFS的MFT备份、EXT4的日志;
- 简单易实现:FAT12的代码量很小,适合嵌入式设备(比如早期的U盘、MP3播放器)。
五、动手试试:用WinHex看FAT12的真实样子
如果你想亲眼看看FAT12的结构,可以用WinHex(一款十六进制编辑器)打开一张1.44MB的软盘镜像:
- 引导扇区:前几个字节是“EB 3C 90”——这是BIOS要执行的跳转指令;后面是BPB参数(比如每扇区512字节、每簇1扇区);
- FAT表:从第19扇区开始(引导扇区是第0扇区),里面是一串1.5字节的条目,比如“03 00”代表簇1的下一个是簇3;
- 根目录:从第14扇区开始,每个32字节的条目对应一个文件,比如“LOADER BIN”的条目里,起始簇号是“02 00”(小端序,即簇2)。
结语:FAT12是“文件系统的童年”
FAT12像一个简单的图书馆管理系统——没有复杂的算法,没有华丽的界面,但它解决了最核心的问题:把文件存下来,再找回来。
搞懂FAT12,你会发现:文件系统不是“黑魔法”,而是“用最笨的方法解决最实际的问题”。就像图书馆的管理员,不需要懂人工智能,只要把登记本写清楚,就能帮你找到想要的书。
下次你插U盘的时候,不妨想一想:里面的文件,可能正躺在某个“簇链”里,等着FAT表把它“串”起来——这就是FAT12的遗产,也是计算机最浪漫的“细节”。
(全文完)
延伸阅读:如果想动手写FAT12的读取程序,可以参考《Assembly Language for x86 Processors》中的软盘读取例子,或者用QEMU模拟一个1.44MB软盘启动,调试FAT12的加载过程~
注:本文仅用于教育目的,实际渗透测试必须获得合法授权。未经授权的黑客行为是违法的。


被折叠的 条评论
为什么被折叠?



