每次尝试发现这一点都只能产生大量有关驱动器几何形状和最大卷大小的信息。
另外,如果需要额外的 FAT(对其进行碎片化),额外的范围有多大?
我想知道,这样我就可以考虑将 FAT 缓存在 640K 中。
12
最佳答案
2
刚刚在带有 DOS 3.30 和默认 47MB 硬盘的网页模拟器上进行了尝试。
由于 DOS 3.30 仅支持使用 FDISK 进行最大 32MB 的分区,因此可以在扩展分区中将其划分为 32MB 的 C:驱动器和大约 15MB 的 D:驱动器。
格式化时没有特殊参数,C: 使用 512 字节扇区,每个簇 4 个扇区,簇大小为 2KB。通过使用 echo 创建 3 字节文件并使用 CHKDSK 进行验证,发现它占用 2048 字节。有两个 FAT 副本。磁盘上的总扇区数为 65467。每个 FAT 有 64 个扇区。因此大约有 16366 个簇,这意味着一个 FAT16 系统。每个簇在 FAT 中占用 2 个字节,因此每个 FAT 大约需要 32732 字节。用扇区大小 512 除以该值,您将得到 64 个 FAT 扇区,这与 DOS 所述完全一致。
因此,32MB 驱动器需要 64 个扇区或 32KB 用于单个 FAT,而对于两个 FAT 副本,则需要将其翻倍至 128 个扇区(即 64KB)。
有趣的是,15MB D: 驱动器似乎使用 4KB 簇大小(8 个扇区),每个 FAT 有 12 个扇区。这意味着它使用 FAT12 文件系统。因此,3784 个簇中有 30277 个扇区。
使用更新的 MS-DOS 3.31,可以将整个 47MB 驱动器分区为一个分区,使用 2KB 簇大小。
我没有测试 20MB 驱动器 – 它可以格式化为 FAT16 或 FAT12,具体取决于其选择的阈值。
1
-
谢谢!我的结论是,当您还必须缓存数据缓冲区时,在 640K 系统上默认缓存 32K 可能太多了。我很怀念我不得不考虑这些事情的时光。再次感谢。
–
|
FAT 的大小取决于文件系统的大小。在中,计算方法如下:
; We calculate the number of sectors required in a FAT. This is done as:
; # of FAT Sectors = TotalSectors / SectorsPerCluster * # of bytes in FAT to
; represent one cluster (i.e. 3/2) / BytesPerSector (i.e. 512)
(3/2 适用于 FAT12 文件系统;对于 FAT16,它是乘以 2)。
在 MS-DOS 3.3(Compaq DOS 除外)中,文件系统的最大扇区数为 65536,因此 FAT 所需的最大扇区数为65536 / SectorsPerCluster * 2 / BytesPerSector
(最后一个分区向上舍入)。
因此,FAT 的大小取决于驱动器格式化的簇大小以及正在使用的扇区大小 – 通常是 512 字节,但在方案中,可以增加扇区大小以允许大于 32Mb 的文件系统,同时仍使用 16 位扇区号。
FAT 的大小(以及是否有第二份副本 —— 几乎总是有)是在驱动器格式化时设置的,因此 FAT 永远不会出现碎片。
在 FAT16 文件系统上,FAT 可以获得的最大值是 128k(2 字节/簇,65536 簇),但我认为这仅限于比 MSDOS 3.3 创建的卷大得多的卷。
0
|
–
–
–
–
–
|