引导扇区通常指设备的第一个扇区,用于加载并转让处理器控制权给操作系统。引导扇区的大小为512字节。
计算机启动的时候,会从最初一个扇区读取设备,然后检查这个扇区的最后两个字节,即第511和512字节。如果最后两个字节是0x55和0xAA,那它就认为这个扇区的开头是启动程序,并开始执行这个程序,否则就会报一个不能启动的错误。
我们将我们所写的操作系统存储在一个虚拟软盘里,为了加载操作系统,我们需要自己来编写一个引导扇区,将操作系统内核加载到内存中。那么如何知道操作系统文件在软盘的哪个位置呢?这就需要文件系统,而不同的文件系统有它不同的格式。文件系统一般会把磁盘划分为若干层次以方便组织和管理,这些层次包括:
- 扇区(Sector):磁盘上的最小数据单元
- 簇(Cluster):一个或多个扇区
-
分区(Partition):通常指整个文件系统
对于软盘,笔者采用的是FAT12格式。FAT12格式的结构如下:
- 引导扇区(Boot Sector)
位于第一个扇区,在软盘上就是0柱面(磁道)0磁头1扇区
- 文件分配表(FAT)
紧接着引导扇区的是两个完全相同的FAT表,每个FAT表占用9个扇区
- 根目录区
FAT表之后是根目录区,长度不固定
- 数据区
根目录后面是数据区
引导扇区中有一个叫作BPB(BIOS ParameterBlock)的数据结构,主要用来描述磁盘的结构组成,引导扇区的格式如下(其中以BPB_开头的域属于BPB结构,以BS_开头的域不属于BPB,只是引导扇区的一部分):
|
名称 |
开始字节 |
长度 |
内容 |
|
BS_jmpBoot |
0 |
3 |
一个短跳转指令 |
|
BS_OEMName |
3 |
8 |
厂商名 |
|
BPB_BytePerSec |
11 |
2 |
每扇区字节数(Bytes/Sector) |
|
BPB_SecPerClus |
13 |
1 |
每簇扇区数(Section/Cluster) |
|
BPB_RsvdSecCnt |
14 |
2 |
Boot记录占用多少扇区 |
|
BPB_NumFATs |
16 |
1 |
共有多少FAT表 |
|
BPB_RootEntCnt |
17 |
2 |
根目录文件数最大值 |
|
BPB_TotSec16 |
19 |
2 |
扇区总数 |
|
BPB_Media |
21 |
1 |
介质描述符 |
|
BPB_FATSz16 |
22 |
2 |
每FAT扇区数 |
|
BPB_SecPerTrk |
24 |
2 |
每磁道扇区数 |
|
BPB_NumHeads |
26 |
2 |
磁头数(面数) |
|
BPB_HideSec |
28 |
4 |
隐藏扇区数 |
|
BPB_TotSec32 |
32 |
4 |
如果BPB_TotSec16是0,则由这个值记录扇区数 |
|
BS_DrvNum |
36 |
1 |
中断13的驱动器号 |
|
BS_Reservedl |
37 |
1 |
未使用 |
|
BS_BootSig |
38 |
1 |
拓展引导标记(0x29) |
|
BS_VolID |
39 |
4 |
卷序列号 |
|
BS_VolLab |
43 |
11 |
卷标 |
|
BS_FileSysType |
54 |
8 |
文件系统类型 |
|
引导代码及其它 |
62 |
448 |
引导代码,数据及其它填充字符 |
|
结束标志0xAA55 |
510 |
2 |
第510字节为0x55,第511字节为0xAA |
引导扇区是设备的第一个扇区,大小为512字节,负责加载操作系统。计算机启动时检查扇区最后两个字节确定是否可启动。本文以FAT12文件系统为例,解释了其在软盘的分布:引导扇区、FAT表、根目录区和数据区。BPB结构在引导扇区中描述磁盘结构,包含如BPB_FATSz16(FAT数量)、BPB_RootEntCnt(根目录项数)等信息。

488

被折叠的 条评论
为什么被折叠?



