FAT12/FAT16 - что определяет количество секторов?

В настоящее время я читаю исходный код 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 ответ

Просто прокрутите несколько строк вверх: http://jcomeau.unternet.net/src/ramdisk/RAMDISK.C

Непосредственно перед цитируемым кодом происходит вычисление fatEntries и комментарий:

//
// 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-диска, который находится (в непрямом) входе этой функции, он вычислит, сколько секторов (сектор =512 байт) имеется в RAM disk, а затем - насколько огромная таблица FAT потребуется (FatEntries) для описания все сектора. Каждая запись в таблице FAT описывает отдельный кластер, и по умолчанию установлено значение 2 сектора = 1 кластер.

Если имеется небольшое количество кластеров, маленькие таблицы FAT будут лучше, и FAT12 будет выбран в качестве формата диска. Если кластеры RAM-диска не могут быть описаны с использованием такой короткой таблицы FAT, как в FAT12; Функция выберет FAT32.

Фактические ограничения: http://en.wikipedia.org/wiki/File_Allocation_Table

FAT12 - до 4084 кластеров (2^12‑12); 32 МБ с огромным кластером.

FAT16 - до 65524 кластеров (2^16‑12); до 2 ГБ с огромным кластером

Итак, FAT12 хорош для флоппи-диска или нескольких МБ RAM-дисков; FAT16 будет работать на любом диске, вплоть до ГБ.

Другие вопросы по тегам