卓一笔记---FAT12系统介绍

      

        FAT12是DOS时代就开始使用的文件系统(File System),直到2009年仍然在软盘上使用。 具体结构如下图:

  • 引导扇区(Boot Sector)

    位于第一个扇区,在软盘上就是0柱面(磁道)0磁头1扇区,开机引导程序在这里。

  • 文件分配表(FAT)

    紧接着引导扇区的是两个完全相同的FAT表,每个FAT表占用9个扇区,数据区的物理映射图,FAT中每个条目占用12字节,该条目代表文件在数据区中的扇区编号,每个条目和数据区中的扇区编号一一对应。

  • 根目录

    FAT表之后是根目录区,根目录区长度不固定。文件路径(文件名)存放的位置。根目录区每一个条目占用32字节,存放着文件的名称、大小、数据区起始扇区号等信息。

  • 数据区

    根目录后面就是数据区 ,文件内容存放的地方。

1)引导扇区

引导扇区是软盘的第0个扇区,在这个扇区中有一个很重要的数据结构叫BPB(BIOS Parameter Block),下面是引导扇区格式,其中BPB_开头的属于BPB,以BS_开头的只是BOOT Sector的一部分,不属于BPB。

 

名称开始字节长度内容参考值
BS_jmpBOOT03一个短跳转指令jmp Label_07c00H
nop
BS_OEMName38厂商名'QingFeng'
BPB_BytesPerSec112每扇区字节数(Bytes/Sector)0x200
BPB_SecPerClus131每簇扇区数(Sector/Cluster)0x1
BPB_ResvdSecCnt142Boot记录占用多少扇区ox1
BPB_NumFATs161共有多少FAT表0x2
BPB_RootEntCnt172根目录区文件最大数0xE0
BPB_TotSec16192扇区总数0xB40[2*80*18]
BPB_Media211介质描述符0xF0
BPB_FATSz16222每个FAT表所占扇区数0x9
BPB_SecPerTrk242每磁道扇区数(Sector/track)0x12
BPB_NumHeads262磁头数(面数)0x2
BPB_HiddSec284隐藏扇区数0
BPB_TotSec32324如果BPB_TotSec16=0,则由这里给出扇区数0
BS_DrvNum361INT 13H的驱动器号0
BS_Reserved1371保留,未使用0
BS_BootSig381扩展引导标记(29h)0x29
BS_VolID394卷序列号0
BS_VolLab4311卷标'QingFeng'
BS_FileSysType548文件系统类型'FAT12'
引导代码及其他内容62448引导代码及其他数据引导代码(剩余空间用0填充)
结束标志0xAA555102第510字节为0x55,第511字节为0xAA0xAA55

紧接着引导扇区的是两个完全相同的FAT表,每个占用BPB_FATSz16(0x9)个扇区;

第二个FAT之后就是根目录区的第一个扇区,根目录区后面是数据区。
根目录区中由若干个目录入口(Directory Entry)组成,最多有BPB_RootEntCnt个,所以根目录区大小不固定。

根目录区的位置:引导扇区占1个Sec,两个FAT表共18Sec,所以根目录区开始扇区号为19。

每个Directory Entry占32字节。

2)FAT表条目

FAT表占1-18扇区,共两个FAT表,FAT1和FAT2,一般FAT2不用,FAT2仅是FAT1的拷贝,每个FAT表占9个扇区,即 (512*9=4608)字节,FAT表由FAT项组成,每个FAT项占12位,共3072个FAT项,去掉两个不用的FAT的项(0和1,这是因为数据区的簇号是从2开始的0和1不用,故对应的FAT表中的0和1也不用),故FAT12功能管理3070个扇区。

 

     要注意的是,由于每个FAT项占12位,包含一个字节和另一个字节的一半。如上图所示连续的3个字节表示两个FAT项,BYTE1是Fat Entry1的低8位,BYTE2的低4位是Fat Entry1的高4位,BYTE2的高4位是Fat Entry2的低4位,BYTE3是Fat Entry2的高8位。

3)根目录条目:

紧跟FAT表的是根目录,从第19个分区开始,它是由若干个目录条目(Directory Entry)组成,条目最多有BPB_RootEntCnt个。由于根目录区的大小依赖于BPB_RootEntCnt的大小,所以长度不固定。

根目录中的每一个条目占用32字节,它的格式如下表所示:

名称开始字节长度内容
DIR_Name00xB文件名8字节,扩展名3字节
DIR_Attr0xB1文件属性
保留位0xC10保留
DIR_WrtTime0x162最后一次写入的时间
DIR_WrtDate0x182最后一次写入的日期
DIR_FstClus0x1A2此文件在数据区和FAT表中的开始簇号
DIR_FileSize0x1C4文件大小

4)数据区

      需要注意的是数据区的第一个簇号是2,而不是0或者1,(簇号和扇区号在这里是一样的,因为一簇只有一个扇区)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值