FAT16文件系统

时间:2014-11-25 22:20:59

标签: filesystems fat

我正在构建一个类似于FAT的文件系统。 它有以下设置:

  

| MBR | FAT区域|数据区|

因此,如果给出sector_size(以字节为单位的扇区大小),cluster_size(扇区中簇的大小)和disk_size(簇中磁盘的大小),我该如何计算FAT的长度?区域?

我知道MBR从群集0开始,FAT区域从群集1开始。但我不知道可以用什么信息来计算FAT区域的长度。

此外,根目录从数据区中的第一个群集开始,那么如何计算根目录的长度呢?

1 个答案:

答案 0 :(得分:0)

这是FAT12(MSDOS 6.22)软盘图像的样子:

FAT12 image example

    左上角的
  • 是根目录的NC / VC样式视图
  • 左下角的
  • 是解码信息
  • ,右边是扇区的表面图
  • 突出显示的绿色部分是MSODS.SYS文件

驾驶几何

  • head - 使用过的表面边数
  • 曲目 - 每人的曲目数量
  • sector - 每个轨道的扇区数
  • 群集 - 群集大小

<强> FAT

  • sector_size是驱动器的最小单位
  • cluster_size是FAT表的最小单位
  • 所以cluster=N*sector N={1,2,3,4,...}
  • 驱动器尺寸为heads*tracks*sectors*sector_size
  • 现在FAT表必须覆盖DATA可用的整个区域(整个绿色/灰色的东西)
  • 确切地说,每个群集需要1个值。
  • 此值是关于以下内容的编码信息:
    • 下一个群集文件正在继续
    • 这是文件的最后一个集群
    • 该群集是为系统保留的,免费,不良,未格式化等...
  • 首先,您需要确定每个值要使用的位数
  • 例如,8位值将您限制为每个驱动器cca 250个群集
  • 这不是太多......
  • 这也限制了文件的最大数量以及由于群集大小而浪费的空间
  • 像FAT这样的系统不包括整个驱动器区域(只是数据区域)
  • 所以只有第一个和最后一个逻辑集群/扇区之间的区域存储在FAT
  • 可节省一点空间并为DATA
  • 释放更多集群索引

FAT尺寸

  • FAT可以是固定大小(如FAT12,MDOS等)
    • 所以FAT表应该涵盖所有可能的条目,即2 ^ FAT_entry_bits
    • 对于12位FAT12,它是2 ^ 12 = 4096个条目
    • 到单个扇区适合floor(512*8/12)=341条目
    • 所以对于你的FAT你需要ceil(4096/341)=12个扇区
  • 或变量
    • 在这种情况下,它的长度应该像MBR
    • 那样编码
    • 真正的问题是你知道群集大小或FAT大小吗?
    • 请使用以下方法之一:
    • FAT_entries=(drive_size-reserved)/cluster_size
    • cluster_size=(drive_size-reserved)/FAT_entries
    • 其中保留的区域不包括在FAT中(现在让它为0)
    • 现在让FAT条目为16bit(2Byte)
    • 并且驱动器的大小为2heads*1024tracks*64sectprs*512Byte=64MByte
    • 并希望拥有cluster_size=4096Byte
    • 所以FAT_entries=64*1024*1024/4096=16*1024
    • 现在只计算所需的扇区/群集数量,如上例所示