FAT16簇概念
磁盘上最小可寻址存储单元称为扇区,通常每个扇区为512个字节(或字符)。由于多数文件比扇区大得多,因此如果对一个文件分配最小的存储空间,将使存储器能存储更多数据,这个最小存储空间即称为簇。根据存储设备(磁盘、闪卡和硬盘)的容量,簇的大小可以不同以使存储空间得到最有效的应用。在早期的360KB磁盘上,簇大小为2个扇区(1,024字节);第一批的10MB硬盘的簇大小增加到8个扇区(4,096字节);小型闪存设备上的典型簇大小是8KB或16KB。2GB以上的硬盘驱动器有32KB的簇。表2列出在给定簇大小和FAT类型的最大分区。
为什么采用簇呢?通常,存储设备上的空间分配是随机的。在一个新存储设备上,文件连续存储,并知道开始和结束扇区和长度,在读取时可以根据这些信息重新得到所存储的文件。但是,过一段时间后,有些文件将会被擦掉,同时可能有些文件增大,这时不能保证同一个文件存储在连续的一系列扇区里。因此,需要一种方法来辨别哪个扇区被分配到某些文件,以及还有哪些扇区可用。这时可以采用一种表结构来实现这种功能,使每个扇区对应一个表记录。然而,由于大多数文件存储在多个扇区,一个记录对应一个扇区的作法将造成一些浪费。因此,采用每个记录代表一个固定数量扇区将更有意义,这个固定扇区被称为簇。
FAT16分配扇区
如果给一个文件(簇)分配的最小存储空间大小取决于保存该文件的介质类型,我们必须有一种方法来标明某个簇是否可用或者已分配给一个文件。如果已将一个簇分配给一个文件,我们必须知道这个簇分配给文件的哪部分了,这就是通过一个链接列表来实现,即文件分配表(FAT)。FAT仅仅是一个包含N个整数的列表,N是存储设备上最大的簇数。表中每个记录的位数称为FAT大小,是12、16或32三个数之一。早期的存储设备使用12位(1.5字节)FAT以减少浪费,12位可以提供4,096个簇。假定一个簇具有两个扇区(1,024字节),则代表存储设备将近有4.2MB存储容量。更大的簇就能实现更大的存储空间,但是在存储较小文件时,由于簇没有完全装满而将造成存储空间的浪费。
操作系统根据表现整个磁盘空间所需要的簇数量来确定使用多大的FAT。如果磁盘要求的簇少于4,096个,则可以使用12位FAT;如果小于65,536但大于4,096个簇,就使用16位FAT;否则,必须采用32位FAT。在存储设备的第一个扇区内以数据列表的形式定义了簇的大小,该数据列表被称为BIOS参数块。在系统引导期间操作系统可以读该扇区,这样就能设定如何从存储设备中读取文件。
FAT是一种链接列表,链接列表中相关记录之间互相指向对方。在存储设备目录中包含了FAT表名称、该文件大小和分配给该文件的第一个簇的编号。存储该文件的第一个簇所对应的表记录中包含了该文件的第二个簇号码。同样,第二个簇对应的记录里包含有存储该文件的第三个簇编号,以此类推直到该文件的最后一个簇。在新存储设备上存储的第一个文件将保存在连续的簇内,因此第一个簇会指向第二个,第二个指向第三个,如此类推。
实际上,第一个簇(簇0)总是保留用于存储操作系统信息、根目录和两份FAT。系统建立两份FAT,其目的是在当修改其中一个时如果系统发生中断(崩溃),另一份还完整无缺,恢复程序会检查FAT并使用这份FAT来恢复。