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 будет работать на любом диске, вплоть до ГБ.