FAT12文件系统之引导扇区结构

文件系统即文件管理系统,是操作系统的重要组成部分之一,如果需要开发底层磁盘驱动或编写自己的操作系统,就必须详细了解文件系统。

FAT12是Microsoft公司DOS操作系统所支持的文件系统之一,此外还有FAT16和FAT32,之后会分别详述这些文件系统。当软盘被标准格式化后,磁盘被格式化为:每磁头80个柱面(磁道),每个柱面有18个扇区,每个扇区有512字节空间。所以标准软盘的总空间(容量)为:

2*80*18*512=1474560B=1440K=1.44M

FAT12文件系统将按照下表所示的方式划分全部的容量,即文件系统数据结构:

FAT12
2880扇区
(1474560B)
逻辑扇区 占用扇区 内容 磁盘CHS参数(磁头/柱面/扇区)
0 1(512B) 引导程序 起:0/0/1
1 9(4608B) FAT文件分配表1 起:0/0/2 止:0/0/10
10 9(4608B) FAT文件分配表2 起:0/0/11 止:1/0/1
19 14(9728B) 根目录  
33 14(9728B) 文件数据区  

操作系统之所以认识FAT12格式的磁盘,其秘密就在于逻辑0扇区这512B上。如果这512字节的最后两个字节的内容分别是55和AA(0xAA55低字节在前,高字节在后)的话,BIOS在启动时会将这个扇区读取到0:7C00h-0:7DFFh处,然后跳转到0:7C00h处继续执行指令,操作系统即用此来达到引导系统的目的,而这个磁盘就称为可引导磁盘。操作系统标识FAT12文件系统是因为在逻辑0扇区(即引导扇区)处还存储着一个特定的数据结构,此结构有固定的格式,在操作系统将此磁盘格式化时自动生成,具体数据结构如下表所示:

标识 偏移量 类型 大小 说明 默认值
 

0

db

3

跳转指令  
BS_OEMName

3

db

8

OEM字符串,必须为8个字符,不足以空格填空 MSWIN4.1
BPB_BytsPerSec

11

dw

2

每扇区字节数 200h
BPB_SecPerClus

13

db

1

每簇占用的扇区数 1
BPB_RsvdSecCnt

14

dw

2

保留扇区数 1
BPB_NumFATs

16

db

1

FAT表的记录数 2
BPB_RootEntCnt

17

dw

2

最大根目录文件数 0e0h
BPB_TotSec16

19

dw

2

逻辑扇区总数 0b40h
BPB_Media

21

db

1

媒体描述符 0f0h
BPB_FATSz16

22

dw

2

每个FAT占用扇区数 9
BPB_SecPerTrk

24

dw

2

每个磁道扇区数 12h
BPB_NumHeads

26

dw

2

磁头数 2
BPB_HiddSec

28

dd

4

隐藏扇区数 0
BPB_TotSec32

32

dd

4

如果BPB_TotSec16是0,则在这里记录扇区总数 0
BS_DrvNum

36

db

1

中断13的驱动器号 0
BS_Reserved1

37

db

1

未使用 0
BS_BootSig

38

db

1

扩展引导标志 29h
BS_VolID

39

dd

4

卷序列号 0
BS_VolLab

43

db

11

卷标,必须是11个字符,不足以空格填充  
BS_FileSysType

54

db

8

文件系统类型,必须是8个字符,不足填充空格 FAT12  
 

62

引导代码,由偏移0字节处的短跳转而来  
 

510

dw

2

系统引导标识 0aa55h  

首先是跳转指令,偏移0处的跳转指令必须是合法的可执行的基于x86的CPU指令,如:jmp start,这样可以生成3字节长的指令,(加关键字short的短跳转指令的长度是2字节),指向操作系统引导代码部分。Windows和MS-DOS生成的FAT12启动扇区中的跳转指令是短跳转,如:jmp short start,然后加一个nop的空指令来保持3字节的长度。

接着是位于偏移3处的OEM字符串,它必须是一个8字节长的字符串,标识了格式化此磁盘的操作系统的名称和版本号,为了保留与MS-DOS的兼容性,通常Windows 2000系统格式化的磁盘上在此记录中的字符串是“MSDOS5.0”,在Windows 95系统格式化的磁盘上在此记录中的字符串是“MSWIN4.0”,在Windows 95 OSR2和Windows 98系统上格式化的磁盘上在此记录中的字符串是“MSWIN4.1”。

接下来是每扇区的字节数,类型是双字节长,标准分区上的每扇区字节数一般是512B,但也可以是其它的数字,如1024,2048和4096,FAT12的格式下设置为512(200h)。

偏移13处的是每簇所占用的扇区,类型是字节,簇是数据存储的最小单位,此字段的值取决于分区的大小,在FAT12格式下一般为1,即每簇只有1个扇区(512字节),簇越大,那么分区的容量也就越大,通过增加簇的扇区数,可以支持更大的磁盘分区,标准的簇大小为1、2、4、8、16、32、64和128,FAT12格式下只能管理2^12个簇(4096),所以在FAT12格式下能管理和分配的最大空间为:4096*1*512=2097152B=2M,所以FAT12一般只适合3.5寸高密度软盘(1.44M)。

保留扇区指的是在第一个FAT文件分配表之前的引导扇区,一般情况下只保留1个扇区(512B)。

接下来是类型为1字节长的FAT表的总数,默认情况下此字段的值为2,也就是有两个FAT表,FAT1和FAT2的内容相同,当FAT1表出错的时候可以使用FAT2来恢复文件分配表。

位于偏移17处的字段是类型为双字节长的能够储存在根目录下的最大文件(包含子目录)数量,默认为224,每个目录或文件名占用32B的空间,因此根目录的大小为:224*32=7168B=7KB,如果使用长文件名的话,根目录文件数还可能无法达到224的数量。

接下来是位于偏移19处的逻辑扇区总数,类型是双字节,如果此磁盘的逻辑扇区总数大于2^16位(65536)的话,就设置此字段为0,然后使用偏移32处的双字来表示逻辑总扇区数。

位于偏移21处的是单字节长的磁盘类型标识符,使用0f0h表示3.5寸高密码软盘,用0f8h来表示硬盘。此字段主要用于FAT12或FAT16的分区格式中,在Windows 2000中未使用。

偏移22处双字节长的是每个FAT文件分配表所占用的扇区数,操作系统用这个字段和FAT表数量以及隐藏扇区数量来计算根目录所在的扇区。还可以根据最大根目录数来计算用户数据区从哪里开始。

根目录扇区位置=FAT表数量*FAT表所占用的扇区数量+隐藏扇区数量

用户数据开始位置=根目录扇区位置+根目录所占用扇区(FAT12格式下为224*32/512)

此处所说的扇区指的是逻辑(线性)扇区,需要通过转换才能得到CHS磁盘参数,然后通过CHS参数来读写磁盘扇区。

接下来是位于偏移24处的每磁道扇区总数,类型是双字节长,软盘的默认值为18,即每个磁道有18个扇区。

然后是双字节长的磁头数,磁头数指的是磁盘面数,每面都有一个磁头,软盘都是2面的,所以在FAT12格式下此字段固定为2。

接下来是的位于偏移28处类型为双字(4B)长的隐藏扇区数,指的在引导扇区之前的隐藏扇区,在FAT12格式上此字段默认为0,即不隐藏任何扇区,此字段参与计算根目录区和用户数据区位置。

偏移32处的是类型为双字(4B)长的逻辑扇区总数,如果此分区或磁盘的逻辑扇区总数大于65536则用这个字段来表示逻辑扇区总数,否则设置此字段为0后用位于偏移19处的双字节字段来表示。

偏移36处的是物理驱动器号,类型是字节长,它与BIOS物理驱动器相关,在磁盘中断Int13h相关的操作中使用,第一个软盘驱动器设置为0,第一个硬盘驱动器设置为80h,第二个硬盘驱动器设置为81h,以此类推。此字段的值可以在系统引导时用dl寄存器得到。

位于偏移37处的字节没有使用,保留并设置为0。

位于偏移38处的是扩展引导标识,类型是字节,操作系统用它来识别引导信息,值可以是28h或29h。

接下来的是位于偏移39处的卷标号,类型是双字(4B)长,在格式化磁盘时所产生的一个随机序号,有助于区分磁盘,可以为0。

然后是位于偏移43处的卷标,长度必须是11字节长(不足以空格20h填充),此字段只能使用一次,用来保存磁盘卷的标识符,再次设置的时候被保存到根目录中作为一个特殊的文件来储存。

最后是位于偏移54处的是长度为8字节的文件系统类型标识符,不足8字节则以空格20h来填充。FAT12格式下此字段为“FAT12   ”,相应的还有“FAT16   ”和“FAT32   ”。但要注意的是,操作系统并不使用这个字段来识别此磁盘所用的文件系统。

【转载】FAT12文件系统之引导扇区结构的更多相关文章

  1. FAT文件系统规范v1.03学习笔记---1.保留区之 Fat32 FSInfo扇区结构和备份启动扇区

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...

  2. 《Orange‘s》FAT12文件系统

    FAT12 层次 扇区(Sector):磁盘上的最小数据单元 簇(Cluster):一个或多个扇区 分区(Partition):通常指整个文件系统 引导扇区 引导扇区是整块软盘的第0个扇区,在这个扇区 ...

  3. FAT12格式的引导区实现

    org 07c00h ;================================================ jmp short START nop ; 这个 nop 不可少 ;这个结构将 ...

  4. MBR主引导扇区解析

    最近在制作镜像的时候由于需要简单研究了下MBR主引导扇区的结构,这里记录下便于后期温习,下面就直接进入正题: MBR主引导扇区位于磁盘的第一个扇区,即0号扇区,主要由引导代码.分区表.结束标志三部分构 ...

  5. 主引导扇区MBR的解析

    http://blog.chinaunix.net/uid-24774106-id-3340397.html 最近排查一个USB相关的故障,由于信息安全就不多说工作上的事情了,顺路学习了MBR的相关知 ...

  6. Linux磁盘管理之逻辑结构主引导扇区02

    一.主引导扇区 主引导扇区位于硬盘的0磁道0柱面1扇区,共占用了63个扇区,但实际上只使用了512字节,由三大部分组成: 1.主引导记录MBR(Master Boot Record):占446字节. ...

  7. 16位cpu下主引导扇区及用户程序的编写

    一些约定 主引导扇区代码(0面0道1扇区)加载至0x07c00处 用户程序头部代码需包含以下信息:程序总长度.程序入口.重定位表等信息 用户程序 当虚拟机启动时,在屏幕上显示以下两句话: This i ...

  8. BOOTICE(引导扇区维护工具) V1.3.3 中文免费绿色版

    软件名称: BOOTICE(引导扇区维护工具)软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 357KB图片预览: 软件简 ...

  9. [转]硬盘的那些事(主分区、扩展分区、逻辑分区、活动分区、系统分区、启动分区、引导扇区、MBR等)

    http://xu3stones.blog.163.com/blog/static/205957136201210309424303 主分区,扩展分区,逻辑分区,活动分区,系统分区,启动分区..... ...

随机推荐

  1. 【11】specified value,computed value,used value计算方法

    [11]specified value,computed value,used value计算方法 specified value(规范值): 计算方法如下: 如果样式表设置了一个值,使用这个值 如果 ...

  2. 【05】project board

    GitHub 上的 project board 我总是用 Jira 做大项目,独立项目用 Trello,这两者我都很喜欢. 后来我知道,GitHub 也有类似的 project board: 我个人为 ...

  3. [!] The ‘Pods-项目名XXX' target has frameworks with conflicting names:XXX.framework.

    在集成网易 即时通讯IM时报如下错误: [!] The ‘Pods-Yepu' target has frameworks with conflicting names: nimsdk.framewo ...

  4. wireshark抓文件上传的包的结果记录

    如果我们再一个表单中放了一个text的input 还放了一个file的input进行文件上传,此时用wireshark抓到的包应该是什么样子的呢 html代码 <form action=&quo ...

  5. Matplotlib基本图形之直方图

    Matplotlib基本图形之直方图 直方图特点 由一系列高度不等的纵向条形组成,表示数据分布情况例如年级同学身高分布注意与条形图的区别 示例代码: import osimport numpy as ...

  6. C/C++复杂类型声明

    曾经碰到过让你迷惑不解.类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明.   我们将从每天都能碰到的较 ...

  7. BZOJ 2595 [Wc2008]游览计划 ——斯坦纳树

    [题目分析] 斯坦纳树=子集DP+SPFA? 用来学习斯坦纳树的模板. 大概就是用二进制来表示树包含的点,然后用跟几点表示树的形态. 更新分为两种,一种是合并两个子集,一种是换根,换根用SPFA迭代即 ...

  8. VS链接错误: LNIK1123

    问题:编译一个VS工程程序,出现连接错误:"LNK1123: 转换到 COFF 期间失败: 文件无效或损坏" 原因分析:连接器LNK是通过调用cvtres.exe完成文件向coff ...

  9. 【bzoj1878】[SDOI2009]HH的项链 - 树状数组 - 离线处理

    [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4834  Solved: 2384[Submit][Status][Dis ...

  10. GDOI2018 新的征程

    看标题您一定以为考得很好.. Bad ending.想看美好结局的出门右转其他大佬博客. Day0 早上去车站的时候心情挺好.倒不是因为自己做足了准备,也不是因为预感到有好事发生,而是心情不好也没有用 ...