0

現在、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;
}

その意味を私に説明してもらえますか?

4

1 に答える 1

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ディスクサイズに基づいて、RAMdiskにあるセクター(sector = 512bytes)の量を計算し、次に、説明するために必要なFATテーブル(FatEntries)の大きさを計算しますすべてのセクター。FATテーブルの各エントリは単一のクラスターを記述し、デフォルト値は2セクター=1クラスターです。

クラスタの数が少ない場合は、FATテーブルが小さい方が適切であり、ディスクフォーマットとしてFAT12が選択されます。FAT12で使用されているような短いFATテーブルを使用してRAMディスクのクラスターを記述できない場合。関数はFAT32を選択します。

実際の制限: http: //en.wikipedia.org/wiki/File_Allocation_Table

FAT12-最大4084クラスター(2 ^ 12‑12); 最大のクラスターで32MB。

FAT16-最大65524クラスター(2 ^ 16‑12); 最大のクラスターで最大2GB

したがって、FAT12はフロッピーまたは数MBのRAMディスクに適しています。FAT16は、GBRAMディスクまでの任意のサイズで動作します。

于 2011-11-18T03:46:55.427 に答える