BIOS 是第一阶段的引导加载程序吗?

BIOS 是第一阶段的引导加载程序吗?

我对传统BIOS启动过程的理解如下:

  • 固件(即 BIOS)选择要启动的设备,并执行存储在该设备引导扇区 (MBR) 中的引导代码
  • MBR 代码通常选择一个分区进行启动,并执行存储在该分区的启动块 (VBR) 中的代码
  • 然后 VBR 代码启动操作系统

我相信 MBR 代码是第一阶段引导加载程序VBR 代码是第二阶段引导加载程序

但是,那维基百科关于“Bootloader”的文章将 BIOS 列为第一阶段引导加载程序的示例。这与我的理解相矛盾,我认为 BIOS 由制造商存储在主板上,而不是存储在我想要从中引导的磁盘的 MBR 上。

BIOS 实际上是第一阶段的引导加载程序吗?如果是,那么 MBR 和 VBR 代码属于哪个阶段?

答案1

请记住 - 我认为“引导加载程序阶段”没有真正的标准,因此系统设计人员(或任何人)可以调用他们的平台采取的任何步骤来初始化他们想要的任何东西而不会产生任何后果。

固件(即 BIOS)选择要启动的设备,并执行存储在该设备引导扇区 (MBR) 中的引导代码

这是传统 BIOS 启动任何程序的方式 - 传统 BIOS 不了解文件系统,因此无法直接加载文件。因此 BIOS 将向设备请求 LBA 0,将其放在 RAM 中的 7C00:0000 处,并将 CPU 指向那里。

这是第 1 阶段 - 虽然很原始,但无论如何它是一个步骤 - 所以这是第 1 阶段 (1BL)。

LBA 为 512 字节,LBA 0 的最后 64 个字节是分区表和启动签名,这些代码不足以完成很多工作,因此通常那里的代码可以加载功能更强大的引导加载程序。那将是您的 2BL。

当然,也许您可​​以在 512 - 64 字节中放入足够的代码来加载您的操作系统。我相信 DOS 能够通过这种方法加载其自身的第一部分(DOS 位于磁盘上的几个文件中 - IO.SYS 和 MSDOS.SYS - 并且我相信 1BL 会将 IO.SYS 放入内存,然后加载 MSDOS.SYS,但 IO.SYS 被 MSDOS.SYS 用于不仅仅是 2BL。)

MBR 代码通常选择一个分区进行启动,并执行存储在该分区的启动块 (VBR) 中的代码

因此,VBR 只是 MBR 代码,它不位于磁盘的 LBA 0,而是位于分区的第一个 LBA。我​​认为将其拆分为 2BL 和 3BL 没有什么用,但如果有人真的愿意,可以考虑这些单独的步骤。

我所见过的任何有关 1BL/2BL 以上的讨论通常都与解密下一阶段并验证它没有被篡改有关,例如在微软原版 XBox 或其他游戏机等平台上。

可以说,Windows Bitlocker 增加了额外的步骤 - 但从技术上讲,Windows 内核在该过程中已经运行 - 这就是在需要输入恢复密钥的情况下您看到 Bitlocker 屏幕的方式。

答案2

膜生物反应器只是为已经执行的系统(通过 BIOS)提供了一种方法继续正在执行。

计算机启动的最初阶段执行来自 ROM 的代码,即存储在 BIOS 中的代码。

BIOS(在旧计算机上)通常被映射到 CPU 启动时访问的第一个地址处的物理内存中。CPU 在第一个地址处看到一条指令并执行它。该指令会引发另一条指令,依此类推。结果是一个配置 CPU、初始化外围设备的程序,也是 CPU 运行的第一个“程序”。

该程序了解一些关于如何继续启动系统的特定约定。它会寻找硬盘。该硬盘的第一个块应该是主引导记录它告诉 BIOS 程序如何查找或寻找下一个引导阶段,VBR 只是一种不同类型的引导记录,存储在分区的开始处而不是硬盘的开始处。

答案3

您的维基百科文章这样定义引导加载程序:

引导加载程序,也称为引导加载程序或引导管理器和引导加载程序,是一种负责启动计算机的计算机程序。

BIOS 当然是一个计算机程序,即使它是一个简单的程序(EFI 不再那么简单),因此它也可以称为引导加载程序。

定义中没有指定引导加载程序需要驻留在磁盘上,因此它当然也可以驻留在 NVRAM(非易失性 RAM)上。

相关内容