- 作者:zhaozj
- 发表时间:2020-12-23 10:35
- 来源:未知
这篇文档中记法的约定: 有前缀"0x"的数字都是16进制数字。 任何其他没有前缀"0x"的数字都是10进制数字。 本文档里面所有代码片段都是使用的'C'语言。但没有严格遵从其代码输入规范和语法。 本文档中某些代码片段混合使用了32位和16位的数据元素。我们假设你是一个知道怎样正确将32位数据转换成16位数据(保证数据不丢失)的程序员。同时,必须注意,所有的数据类型都是无符号的。不要使用有符号整型数据来进行FAT表所需的计算,因为这样计算得到的结果对某些FAT系统是错误的。 一般性概念(适合所有类型的FAT文件系统) 所有的FAT文件系统最早是为IBM PC架构开发的。很重要的一点是:磁盘上FAT文件系统的数据结构都是"小端的"(一种数据存储组织形式)。让我们先看看一个32位的FAT表项,它是以4个8位字节形式存储在磁盘上的-----第一个字节是byte[0],最后一个字节是byte[4]------下面显示的是一个32位的数据,从00标识,一直到31。(00位是最不重要的一位)<原文如此!"00 being the least significant bit">
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 1 1 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
如果你使用的机器是基于"大端"的,上面的一些原则就显得很重要了。因为当你想和磁盘进行数据交换,你就必须在大端和小端之间转换。
一个FAT文件系统是由以下四个基本区组成的,它们是:
0 --- 保留区 1 --- FAT区 2 --- 根目录区(在FAT32系统中不存在) 3 --- 文件和目录数据区
启动扇区和BPB(Bios Parameter Block)
在FAT系统中,首先碰到的一个很重要的数据结构就是BPB(BIOS Paramerer Block),它被放在保留区的第一个扇区中。这个扇区也被叫做"启动扇区"、"保留扇区"或者"第0扇区",很重要的一点就是,它处在系统的第一个扇区。 关于FAT文件系统,有一点常常被混淆。在MS-DOS 1.x 版本中,启动扇区里并没有BPB结构。在FAT文件系统的第一个版本中,仅仅有两中不同的形式,一个支持单面,一个支持双面360K 5.25-inch的软盘。要判断磁盘上的文件系统的类型,必须查看FAT表的第一个字节(FAT[0]的低8位)。 上面这种媒体类型的判断方法已经被在MS-DOS 2.x中,放入一个BPB结构到启动扇区的方法取代了,并且老式的方法 (通过查看FAT表的第一个字节)已经不再被支持。所有FAT系统都有一个BPB结构放置在启动扇区。 这又会给我们带来FAT系统类型辨别的第一点困惑:BPB结构到底象什么样子呢?MS-DOS 2.x 启动扇区里的BPB结构严格限制FAT系统的大小不能大于65,536个扇区(32MB,每扇区512字节)。这个限制是由于FAT表中的"total sectors"域是一个16位域。这个限制在MS-DOS 3.x中被修正了,通过将BPB结构修改成能够包含32位域来扩大支持的扇区总数。 下一个BPB的变化发生在WINDOWS 95操作系统下,同时FAT32被引进。FAT16限制了FAT表的最大尺寸和最大可用簇的大小不能超过 2GB (假定磁盘是512字节每扇区)。FAT32修改了这个磁盘容量的限制,使得FAT系统能够存在于容量大于2GB 只分一个区的磁盘上。