FAT12 / FAT16 - 决定扇区数量的因素是什么?

时间:2011-11-18 03:36:49

标签: c ramdisk fat

目前我正在阅读Ramdisk源代码。在RamDiskFormatDisk函数中,我遇到了问题。

一段代码如下:

if (fatEntries > 4087) {
    fatType =  16;
    fatSectorCnt = (fatEntries * 2 + 511) / 512;
    fatEntries   = fatEntries + fatSectorCnt;
    fatSectorCnt = (fatEntries * 2 + 511) / 512;
}
else {
    fatType =  12;
    fatSectorCnt = (((fatEntries * 3 + 1) / 2) + 511) / 512;
    fatEntries   = fatEntries + fatSectorCnt;
    fatSectorCnt = (((fatEntries * 3 + 1) / 2) + 511) / 512;
}

你能解释一下它对我的意义吗?

1 个答案:

答案 0 :(得分:1)

只需向上滚动一些行:http://jcomeau.unternet.net/src/ramdisk/RAMDISK.C

在引用代码之前,有一个fatEntries和comment的计算:

//
// Calculate number of sectors required for FAT
//
fatEntries =
    (bootSector->bsSectors - bootSector->bsResSectors -
        bootSector->bsRootDirEnts / DIR_ENTRIES_PER_SECTOR) /
            bootSector->bsSecPerClus + 2;

//
// Choose between 12 and 16 bit FAT based on number of clusters we
// need to map
//

此功能为RamDiskFormatDisk

  

此例程格式化新磁盘。

因此,基于RAM磁盘大小(在此函数的(间接)输入中),它将计算RAMdisk中有多少扇区(扇区= 512字节)然后 - 需要多大的FAT表(FatEntries) )描述所有部门。 FAT表中的每个条目描述一个群集,默认值为2个扇区= 1个群集。

如果群集数量较少,则较小的FAT表会更好,FAT12将被选为磁盘格式。如果无法使用FAT12中使用的如此短的FAT表来描述RAM磁盘的簇;功能将选择FAT32。

实际限制:http://en.wikipedia.org/wiki/File_Allocation_Table

FAT12 - 最多4084个集群(2 ^ 12-12);带有最大群集的32 MB。

FAT16 - 最多65524个集群(2 ^ 16-12);带有最大群集的最大2 GB

因此,FAT12适用于软盘或几MB MB磁盘; FAT16可以在任何大小的GB ramdisk下工作。