FAT12 文件系统

一、FAT12 Spec
http://www.disc.ua.es/~gil/FAT12Description.pdf

一些要点描述:
FAT12, "12"是指FAT的条目的长度为12bits

当使用FAT12作为软盘文件系统时:
扇区 
- 基本存储单位, 512 Bytes
簇 - 多个扇区组成簇, 对于软盘来说,一个簇中只有一个扇区

整个软盘的结构如下:
Boot Sector + FAT tables + Root Directory + Data Area

对于1.44MBytes的软盘来说,总共有2880个扇区
Boot Sector:位于0号扇区
FAT tables:  由FAT1/FAT2,其中FAT1和FAT2完全相同,共占2 * 9 =18扇区,从1 ~ 18号扇区
Root Directory: 目录结构区,共占14个扇区,从19 ~ 32号扇区,每条目录占32Bytes,这样,最大能支持14 *512 / 32 = 224个目录或文件
Data Area:数据区,共2861个扇区,从19 ~ 2879号扇区

二、Boot sector:结构分析
============================================================================================
Offset      Length        Defaultvalue                      Data
============================================================================================
              11                                                                  name
11                                    512                                  Byte per sector
13                                                                          Sectors per cluster
14                                                                          Number of reserved sectors
16                                                                        Number of FATs
17                                    224                                    Maximum number of root directory entires
19                                    2880                                  Total sector count
21                                    0xF0                                  软盘类型,高密度,双面
22                                                                          Sectors per FAT
24                                      18                                    Sectors per track
26                                                                          Number of heads
28                                                                          Hidden sector count
32                                                                          Total sector count for FAT32 (0 for FAT12 and FAT16)
36                                                                          Number of driver
38                                      0x29                                Boot signature, which indicates the following three fields in theboot sector are present
39                                                                           Volume id
43              11                        "NO NAME                  Volume label
54                                      "FAT12                      File system type(e.g. FAT12, FAT16)
62              ...                                                                Data or Boot code
510                                      0xAA55                          Boot sector flag
============================================================================================
也就是说头部占用62Bytes

如何根据上面的结构计算FAT所在扇区位置:
FAT 起始扇区号 = 保留扇区个数 [28] + 隐藏扇区个数 [14]
FAT1 起始扇区号 = FAT 起始扇区号
FAT2 起始扇区号 = FAT 起始扇区号 + 每个FAT占用的扇区数 [22]

根目录起始扇区号 = FAT 起始扇区号 + 每个FAT占用的扇区数 [22] * FAT 个数 [16]
根目录占用扇区数 = 最大根目录条目数[17] * 32 / 每个扇区的字节数 [11]

数据起始扇区号 = 根目录起始扇区号 + 根目录占用扇区数

三、FAT 结构
Val                                  Meaning
==================================
0x00                                Unused
0xFF0-0xFF6                  Reserved cluster
0xFF7                              Bad cluster
0xFF8-0xFFF                  Last cluster in a file
others                            Number of the next cluster in the file
==================================
一个条目占12 比特
FAT表中的每一条对应一个数据区的一个簇号。。
譬如数据区起始扇区号=33
FAT表的头2个条目为保留
FAT表共有条目数= 每个FAT占用的扇区数 [22] * 每个扇区的字节数 [11] * 2 / 3 = 9 * 512 * 2/3 = 3 * 1024 = 3072

数据区起始扇区对应的FAT条目索引为2,即第3条条目,而该条目中的值则根据上表来解释。。
数据区的扇区号 = FAT表的索引号 - 2 + 33

四、根目录的结构
每条目录为32Bytes
============================================================================================
Offset      Length          Description
============================================================================================
                                文件名    (如果第一个字节为0xE5,则表示该目录条未使用;如果第一个字节为0x00,则表示,该条目及后面所有的条目都没有被使用)
                                文件扩展名
11                                文件属性 (bit0 - readonly, bit1 - hidden, bit2 - system, bit3 - volumelabel, bit4 - subdirectory, bit5 - archive, bit6 - unused, bit7 -unused)
12                                Reserved
14                                创建时间
16                                创建日期
18                                最后访问日期
20                                Igore in FAT12
22                                最后写时间
24                                最后写日期
26                                起始簇号 (即对应的FAT表的索引号)
28                                文件大小(字节为单位)
============================================================================================

注意:
文件名和文件扩展名都不包含NULL结束字符;

五、文件分配举例
三个文件
AAAA.txt    100 bytes
BBBB.txt    1400 bytes
CCCC            目录

ROOT[0].[26] = 3
ROOT[1].[26] = 2
ROOT[2].[26] = 5
FAT[0] = 0xFF8 -> 对应的为目录区
FAT[1] = 0xFFF
FAT[2] = 4 -> BBBB.txt (1) ->33号扇区
FAT[3] = 0xFF8 -> AAAA.txt ->34号扇区
FAT[4] = 6 -> BBBB.txt (2) ->35号扇区
FAT[5] = 0xFF8 -> 目录 -> 36号扇区
FAT[6] = 0xFF8 -> BBBB.txt (3) ->37号扇区

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值