我尝试了解os bootstraping过程。有些问题我不清楚。 其中之一是: 卷引导记录中的引导代码如何知道卷引导记录所在的0扇区的绝对LBA地址?
答案 0 :(得分:0)
在VBR中是一个名为BIOS Parameter Block的结构,以BIOS命名,是传统MS-DOS内核结构的下半部分。在BIOS参数块中,分区与包含它的(MBR样式)分区表条目之间是a field denoting the number of hidden sectors。 VBR代码只是简单地读取该字段,并将其添加到卷相对块地址以生成要从光盘读取的LBA。
这就是为什么在没有帮助的情况下直接从辅助分区引导操作系统(如Windows NT,MS / PC / DR-DOS和OS / 2)的原因。在主分区中,BPB字段只是卷开始的起始LBA,因为它相对于的分区表是光盘的块#0中的主MBR,并且一切正常。在辅助分区中,由于MS-DOS版本3的怪癖,每个人都必须保持兼容,BPB字段只是包含它的“扩展分区”中的“逻辑驱动器”的偏移量,并且启动代码不起作用,因为它会在光盘上的错误位置查找boot volume的其余部分。
Boot managers通过即时修复BPB提供帮助。 VBR代码当然会读取自身的内存副本,而不是光盘上的副本。因此,引导管理器只需将辅助分区的BPB字段调整为正确的绝对值,因为它们将VBR加载到内存中。一切正常。