FAT:磁盘上数据组织格式综述 (阿甘译)

本文档详细介绍了FAT文件系统,包括其数据结构、存储方式和基本组成区域。重点讨论了启动扇区的BIOS参数块(BPB),以及FAT12、FAT16与FAT32在BPB结构上的差异,强调了小端存储和大端机器之间的数据转换问题。
摘要由CSDN通过智能技术生成


   这篇文档中记法的约定:
    
   有前缀"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 只分一个区的磁盘上。

     FAT32的BPB结构能够完美的向下兼容FAT12/FAT16的BPB结构,并增加了一个域——BPB_TotSec32。它们从偏移36处开始根据是FAT12/FAT16还是FAT32,而有所不同(请看下面关于FAT类型的讨论)。这里相关点是:FAT系统启动扇区里的BPB结构应该总是含有新增的BPB域,以便于FAT12/FAT16或者FAT32都可以使用。这样,既能保证FAT文件系统有最好的兼容性,又能保证所有的FAT系统的驱动都能分辨,以便于更好的支持文件系统。因为总是包含了所有定义过的域。
    
    注意:在下面的描述中,所有以BPB_为前缀命名的域都是BPB的一部分。所有以BS_为前缀命名的域都是启动扇区的一部分,并不属于BPB。下面显示了一个FAT文件系统的0扇区的起始部分,它包含了BPB结构。

图1

从这里开始,FAT12和FAT16的BPB结构/启动扇区开始和FAT32的有所不同,下面第一个表显示了FAT12和FAT16启动扇区偏移36以后的结构:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值