文件分配表与文件目录表

Author: 袁洪强 Date: 1997-01-01

  在任何一张通过FORMAT命令之后的磁盘上,都存在着三个重要的数据表,这就是:DOS引导记录中的BPB参数表、文件分配表(FAT表)和文件目录表(FDT表)。如果是硬盘,则在主引导记录中还有一个分区表。这些表对于计算机的磁盘管理乃至计算机的启动,都有极其重要的作用。
  这里仅简要介绍一下文件分配表(FAT表)与文件目录表(FDT表)它们各自的作用。搞清这两个表的区别与联系,对今后掌握磁盘管理与计算机维护都有巨大的帮助。

#1  一、文件分配表(FAT表)
  顾名思义,文件分配表是用于表示存储磁盘文件空间分配信息的。它仅仅记录数据区文件所用的磁盘空间的信息,而对引导区、两个FAT表、文件目录区等信息占据的空间并不在FAT表中表示。此表包含所有可使用的空间(0000H即自由簇)、不能使用的空间(FFF7H即坏簇)以及已被使用的空间(其它内容)等信息。DOS是以簇为单位给文件分配磁盘空间的,簇是DOS进行磁盘空间分配的最小单位,一个簇占用扇区的大小,依据DOS版本及硬盘分区的大小而不同。
  FAT表的产生是这样的:首先在对磁盘格式化过程中通过FORMAT命令发现坏的盘簇,并作好标记。同时在FAT表的表头对磁盘介质的性质进行说明:
  例如:
  FF 软盘  双面  每道8扇区
  FE 软盘  单面  每道8扇区
  FD 软盘  双面  每道9扇区
  FC 软盘  单面  每道9扇区
  F8 硬盘
  而对于磁盘上的可用盘簇都用0000H填充。以后在增加文件时,必须首先在FAT表中寻找可用的盘簇进行注册。也就是说:磁盘上的每一个文件在FAT表中都有所表示。
  每个簇在FAT表中占一个表项,簇编号即为表项。FAT表在磁盘上的每一簇由一个12位(1.5字节)项或由一个16位项(2字节)组成,对所有小于20740个扇区(10MB)的硬盘或软盘,DOS分区用12位映象一个簇,若多于20740个扇区(大于10MB)则采用16位FAT。FAT表的表项对每个文件来说其数据结构是一个单向链表,从文件目录表FDT表中查出文件的首簇号,再将首簇号乘以2(对于16位)或乘以1.5(对于12位)便得到该文件在FAT表头的偏移地址,并得到下一簇的簇号,由该文件的单链表继续查找,直到FFFF,即可找到它的全部内容。
  FAT表放在DOS引导扇区之后的若干个紧挨着的扇区中,它在磁盘上有两个相同的文本。两个FAT拷贝连在一起存放。一个文件分配表占多少个扇区随硬盘分区情况的不同而不同。但文件分配表的起始存放点总是从逻辑1扇区开始的。FAT表的地位非常重要,如果FAT表被破坏,不仅使文件无法使用,甚至会造成计算机无法启动。

#1  二、文件目录表(FDT表)
  FDT表是用于登记管理磁盘文件的名称、类型、文件属性、文件建立或修改时间和日期、文件的首簇号以及文件长度等信息的表格。在FORMAT命令一开始就为整个磁盘建立根目录,每个DOS盘卷只有一个根目录,磁盘的卷标也可以看成是根目录名。因此,DOS盘卷标也在根目录下管理。DOS通常用“[驱动器符号:]\”表示在根目录下。在根目录下可以登记文件名,也可以建立下一级的子目录。每个目录区的FDT表中文件的目录项都是一样的。
  FDT表的结构是这样的:每个目录项占32个字节,FDT的目录项内容及含义如下表所示:  
#2  字节位置   内容及含义
  第0~7字节  表示文件名
  第8~10字节 表示文件的扩展名
  第11字节   表示文件属性,其中值
                    为:00h(读写)
            01h(只读)
            02h(隐含)
                      04h(系统)
            08h(卷标)
                      10h(子目录)
            20h(归档)
  第12~21字节 保留未用
  第22~23字节 文件建立或修改时间
  第24~25字节 文件建立或修改日期
  第26~27字节 表示文件的起始簇号(首簇号)
  第28~31字节 表示文件的字节数(长度)
  第11字节的文件属性是一个综合值。如:IO.SYS文件的属性是隐含的系统只读文件,所以,第11字节的值为07H即01H+02H+04H的和。
  FDT表的地位同样非常重要,如果FDT表被破坏,将会使文件无法使用,但是它不会使计算机无法启动。

#1  三、文件分配表与文件目录表的联系
  FAT表与FDT表统一地管理着整个磁盘的文件,当文件需要分配数据区空间时,空间是在FAT表中按每次一个簇的方式来分配的,分配时系统跳过已分配的族,每一个遇到的空簇就是下一个将要分配的簇,如果一簇不够再分配下一簇,系统并不考虑簇在磁盘上的物理位置,这样可使磁盘空间得到有效的利用;同时在FDT表中列出文件的各个目录项。当文件被删除以后不仅在FDT表中将目录项的首字节改为E5,同时在FAT表中释放被删除文件所占用的簇。