Filesystems FAT16文件系统

Filesystems FAT16文件系统,filesystems,fat,Filesystems,Fat,我正在构建一个类似于FAT的文件系统。 它具有以下设置: |MBR | FAT区|数据区| 因此,如果给定扇区大小(以字节为单位的扇区大小)、集群大小(以扇区为单位的集群大小)和磁盘大小(以集群为单位的磁盘大小),我如何计算FAT区域的长度 我知道MBR从集群0开始,FAT区域从集群1开始。但是我不知道我可以用什么信息来计算脂肪区域的长度 此外,根目录从数据区域的第一个集群开始,因此如何计算根目录的长度?这就是FAT12(MSDOS 6.22)软盘映像的外观: 左上角是根目录的NC/VC样式

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

|MBR | FAT区|数据区|

因此,如果给定扇区大小(以字节为单位的扇区大小)、集群大小(以扇区为单位的集群大小)和磁盘大小(以集群为单位的磁盘大小),我如何计算FAT区域的长度

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

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

这就是FAT12(MSDOS 6.22)软盘映像的外观:

  • 左上角是根目录的NC/VC样式视图
  • 左下角是解码信息
  • 右边是扇区的曲面图
  • 高亮显示的绿色扇区是MSODS.SYS文件
驱动几何图形

  • 头部-使用的表面侧数
  • 磁道-每个磁头的磁道数
  • 扇区-每条轨道的扇区数
  • cluster-群集的大小
脂肪

  • 扇区大小是驱动器的最小单位
  • 集群大小是FAT表的最小单位
  • 所以
    cluster=N*sector
    where
    N={1,2,3,4,…}
  • 驱动器大小为
    磁头*磁道*扇区*扇区大小
  • 现在FAT表必须覆盖数据可用的整个区域(整个绿色/灰色内容)
  • 确切地说,每个集群需要1个值
  • 此值是关于以下内容的编码信息:
    • 下一个群集文件将继续
    • 这是文件的最后一个群集
    • 该集群是为系统保留的、空闲的、坏的、未匹配的等等
  • 因此,首先需要确定每个值要使用多少位
  • 例如,8位值将每个驱动器的cca限制为250个群集
  • 这不算太多
  • 这也限制了最大文件数和由于集群大小而造成的空间浪费
  • 某些系统(如FAT)不包括整个驱动器区域(仅包括数据区域)
  • 因此,只有第一个和最后一个逻辑集群/扇区之间的区域存储在FAT中
  • 这样可以节省一些空间,并为数据释放更多的集群索引
脂肪大小

  • 脂肪可以是固定大小(如FAT12、MDO等)
    • 所以FAT表应该包含所有可能的条目,即2^FAT\u条目\u位
    • 对于12位FAT12,它是2^12=4096个条目
    • 到单扇区配合
      楼层(512*8/12)=341个
      条目
    • 因此,对于您的FAT,您需要
      ceil(4096/341)=12个
      扇区
  • 或变量
    • 在这种情况下,它的长度应该像MBR一样编码
    • 真正的问题是你知道集群的大小还是脂肪的大小
    • 因此,请使用以下方法之一:
    • FAT\u条目=(驱动器大小保留)/群集大小
    • cluster\u size=(驱动器大小保留)/FAT\u条目
    • 保留的区域不包括在FAT中(现在设为0)
    • 现在将FAT条目设置为
      16位
      (2字节)
    • 并且具有大小为
      2heads*1024track*64sectprs*512Byte=64MByte的驱动器
    • 并希望拥有
      群集\u size=4096字节
    • 所以
      FAT_条目=64*1024*1024/4096=16*1024
    • 现在只需计算is所需的扇区/集群数量,如上例所示