谁在计算机引导期间将 BIOS 加载到 RAM 中

Cyg*_*nus 8 bios memory boot operating-systems

计算机启动时,首先执行 BIOS 中的代码。但是,BIOS 中的代码是如何加载到 RAM 中执行的呢?

我已经提到了这个问题 - BIOS 是从 BIOS 芯片读取还是在启动时复制到 RAM 中?. 然而,它让我更加困惑。如果 BIOS 是从 ROM 加载的,而 ROM 是一个单独的芯片,那么谈论 RAM 中的段地址有什么意义?另外,BIOS 代码在哪里加载 - 是在实模式地址空间的最后 1 MiB 中,还是在其他某个位置?

如果有人可以列出从计算机启动到执行第一条 BIOS 指令(包括使用的内存地址)的步骤,那将非常有帮助

Jde*_*eBP 6

正如我在回答这个问题时所写的那样,尽管有大量的技术参考资料可以解释,但在这个问题上的民间智慧——不幸的是,那里的其他答案(以及 SuperUser 中的其他答案)都被困在了 1991 年左右的世界中否则现在如何。

如果您阅读了我的回答,您就不会如此困惑,因为您首先不会询问“从 ROM 加载 BIOS”。

您的“BIOS 芯片”不是ROM;处理器启动和固件中的第一条指令之间没有机器码;“RAM”和“ROM”中的“M”表示“内存”。

正如我之前所写,在现代 PC 中,机器固件保存在非易失性 RAM 中。它不像以前那样是 ROM。连接LPC总线的NVRAM芯片的详细信息见上一个回答。(例如:在我打字时坐在我旁边的一台机器上拆卸,保存固件的 NVRAM 是 Pm49FL004T,LPC Flash RAM 芯片。)

32 位 CPU 不会以实模式启动,并且不会以低于 1MiB 线的地址开始。这与 16 位 x86 处理器时代相比已经过时了几十年。它们以俗称的虚幻模式开始,在我之前的回答中,我再次详细介绍了自 80386 出现以来实际情况。它们从实际上位于 32 位地址空间顶部的地址加载第一条指令FFFFFFF0

在我之前的回答中,我详细告诉过您机器固件主要映射到 32 位和 64 位 x86 机器上的物理地址空间的位置。请记住: RAM 和 ROM 都是memory。物理地址是系统总线上的内存地址。它们可以寻址 RAM 或 ROM。(他们甚至可以解决其他问题,但这只是使讨论复杂化。)物理地址FFFFFFF0比 512KiB 范围的顶部低 16 个字节,其中固件的顶部 512KiB,在非易失性 RAM 中,始终映射到系统总线由“芯片组”组成。

在处理器初始化或重置时,没有从某些神秘的 ROM 芯片“加载”。保存固件的芯片是非易失性 RAM。它在整个电源循环期间保留其在“闪烁”时写入的内容。CPU 仅通过系统总线和通过芯片组连接到系统总线的 LPC 总线(可能还有 LPC/FWH 桥接器)使用物理内存地址从中读取固件指令和数据。

进一步阅读