FAT16文件系统

原文地址:FAT16文件系统 作者:yoyoone

1.基本知识

扇区:每个磁道被分为若干个弧段,这些弧段就是扇区。通常情况下,每个扇区512个字节。

簇:FAT将磁盘空间按一定数目的扇区为单位进行划分,这样的单位称为簇。簇的大小一般为2的N次方。

 

2.FAT16表的组织形式

    使用FAT文件系统必须具有几个部分:保留区,存放FAT的文件系统的重要参数和引导程序;FAT表,记录簇的使用情况;根目录区,记录根目录信息。

 

Fat16的组织形式
引导扇区FAT1FAT2(重复的)根文件夹其他文件夹及所有文件剩余扇区
1扇区实际情况取大小同FAT132个扇区开始簇编号(从2开始)不足一簇

    保留区的第一个扇区是DBR区,称为引导扇区。它是系统可访问的第一个扇区,主要包括与引导操作系统有关的引导参数和引导程序,还有与FAT文件系统有关的BPB参数

1)DBR参数的偏移0x11处记录了根目录所占扇区的数目;偏移0x16记录了FAT表所占扇区的数据;偏移0x10记录了FAT表的副本数目。系统在得到这几项参数以后,就可以确定数据区的开始扇区偏移。
2)FAT16文件系统从根目录所占的32个扇区之后的第一个扇区开始以簇为单位进行数据的处理,对于根目录之后的第一个簇,编号为第2簇。

3)FAT文件系统之所以有12,16,32不同的版本之分,其根本在于FAT表用来记录任意一簇链接的二进制位数。以FAT16为例,每一簇在FAT表中占据2字节(二进制16位)。所以,FAT16最大可以表示的簇号为0xFFFF(十进制的65535)。

 

3.FAT

    FAT表的作用是记录磁盘上簇的分配情况,系统中,会把FAT表全部读到内存中区。一个文件往往需要占用很多个簇。同一个文件不一定会完整地存放在一个连续的存储空间内,而是分成若干段,像链子一样地存放。在文件名记录中,指向文件存储的链头所在的FAT簇,而该簇的FAT表存放下一个链子的FAT簇值。

FAT16记录项的取值含义(16进制)
FAT16记录项的取值对应簇的表现情况
0000未分配的簇
0002~FFEF已分配的簇
FFF0~FFF6系统保留
FFF7坏簇
FFF8~FFFF文件结束簇

 

1)FAT表以"F8 FF FF FF" 开头。

2)FAT表记录了磁盘数据文件的存储链表。

 

4.FDT

 

    根目录区记录着SD卡里存储的所有文件和目录信息,如图所示。得到文件信息后,便可对相应文件进行操作。

 

FAT16目录项32个字节的表示定义
字节偏移(16进制)字节数定义
0x0~0x78文件名
0x8~0xA3扩展名
0xB1属性字节00000000(读写)
00000001(只读)
00000010(隐藏)
00000100(系统)
00001000(卷标)
  00010000(子目录)
00100000(归档)
0xC~0x1510系统保留
0x16~0x172文件的最近修改时间
0x18~0x192文件的最近修改日期
0x1A~0x1B2表示文件的首簇号
0x1C~0x1F4表示文件的长度

 

1)0x0偏移处的取值若为00H,表明目录项为空;若为E5H,表明目录项曾被使用,但对应的文件或文件夹已被删除。

 

5.DBR

 

表6  一个FAT16分区上的引导扇区段
字节位移字段长度(字节)字段名称
0x003跳转指令(Jump Instruction)
0x038OEM ID
0x0B25BPB
0x2426扩展BPB
0x3E448引导程序代码(Bootstrap Code)
0x01FE4扇区结束标识符(0x55AA)

 

 

 

表7  FAT16分区的BPB字段     
字节位移字段长度(字节)例值名称和定义
0x0B20x0200扇区字节数(Bytes Per Sector) 硬件扇区的大小。本字段合法的十进制值有512、1024、2048和4096。对大多数磁盘来说,本字段的值为512
0x0D10x40每簇扇区数(Sectors Per Cluster) 一个簇中的扇区数。由于FAT16文件系统只能跟踪有限个簇(最多为65536个)。因此,通过增加每簇的扇区数可以支持最大分区数。分区的缺省的簇的大小取决于该分区的大小。本字段合法的十进制值有 1、2、4、8、16、32、64和128。导致簇大于32KB(每扇区字节数*每簇扇区数)的值会引起磁盘错误和软件错误
0x0e20x0001保留扇区数(Reserved Sector) 第一个FAT开始之前的扇区数,包括引导扇区。本字段的十进制值一般为1
0x1010x02FAT数(Number of FAT)该分区上FAT的副本数。本字段的值一般为2
0x1120x0200根目录项数(Root Entries) 能够保存在该分区的根目录文件夹中的32个字节长的文件和文件夹名称项的总数。在一个典型的硬盘上,本字段的值为512。其中一个项常常被用作卷标号(Volume Label),长名称的文件和文件夹每个文件使用多个项。文件和文件夹项的最大数一般为511,但是如果使用的长文件名,往往都达不到这个数
0x1320x0000小扇区数(Small Sector) 该分区上的扇区数,表示为16位(<65536)。对大于65536个扇区的分区来说,本字段的值为0,而使用大扇区数来取代它
0x1510xF8媒体描述符( Media Descriptor)提供有关媒体被使用的信息。值0xF8表示硬盘,0xF0表示高密度的3.5寸软盘。媒体描述符要用于MS-DOS FAT16磁盘,在Windows 2000中未被使用
0x1620x00FC每FAT扇区数(Sectors Per FAT) 该分区上每个FAT所占用的扇区数。计算机利用这个数和FAT数以及隐藏扇区数来决定根目录在哪里开始。计算机还可以根据根目录中的项数(512)决定该分区的用户数据区从哪里开始
0x1820x003F每道扇区数(Sectors Per Trark)
0x1A20x0040磁头数(Number of head)
0x1C40x0000003F隐藏扇区数(Hidden Sector) 该分区上引导扇区之前的扇区数。在引导序列计算到根目录和数据区的绝对位移的过程中使用了该值
0x2040x003EF001大扇区数(Large Sector) 如果小扇区数字段的值为0,本字段就包含该FAT16分区中的总扇区数。如果小扇区数字段的值不为0,那么本字段的值为0

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值