1

我尝试了解操作系统引导过程。有些问题我不清楚。其中之一是:卷引导记录中的引导代码如何知道卷引导记录所在的分区 0 扇区的绝对 LBA 地址?

4

1 回答 1

0

VBR 内有一个称为BIOS 参数块的结构,以 BIOS 命名,是传统 MS-DOS 内核结构的下半部分。在 BIOS 参数块中有一个字段,表示分区和包含它的(MBR 样式)分区表条目之间的隐藏扇区数。VBR 代码只是从自身中读取该字段并将其添加到相对于卷的块地址以生成要从磁盘读取的 LBA。

这就是为什么无法在没有帮助的情况下直接从辅助分区引导操作系统(如 Windows NT、MS/PC/DR-DOS 和 OS/2)的原因。在主分区中,BPB 字段只是卷开始的起始 LBA,因为它相对的分区表是磁盘块 #0 中的主 MBR,并且一切正常。在辅助分区中,由于 MS-DOS 版本 3 的一个怪癖,从那以后每个人都必须保持兼容,BPB 字段只是包含它的“扩展分区”中“逻辑驱动器”的偏移量,并且引导代码不起作用,因为它在磁盘上完全错误的位置查找引导卷的其余部分。

引导管理器通过即时修复 BPB 来提供帮助。VBR 代码当然会读取其自身的内存副本,而不是磁盘上的副本。因此,引导管理器只需将辅助分区的 BPB 字段调整为正确的绝对值,因为它们正在将 VBR 加载到内存中。然后一切正常。

于 2011-03-09T00:48:50.810 回答