问题 普通的x86或AMD PC是直接从ROM运行启动/ BIOS代码,还是先将它们复制到RAM? [关闭]


我知道现代计算机已经修改了哈佛架构。

事实上,他们可以从他们持有数据的地方读取指令,这使得他们可以直接从ROM芯片中获取指令吗?他们首先将BIOS加载到RAM,还是直接从芯片执行?我没有可以在附近打开的计算机,所以...如果我从内存插槽中删除所有RAM,计算机是否能够启动完整的BIOS,运行POST的东西并告诉我需要RAM?有趣的是我从未尝试过......

编辑:我的意图是要了解商业CPU(或至少是intel cpus)是否可以直接从ROM执行代码。它不是出于实际目的,而是为了增加我对计算机体系结构和内容的理解。删除RAM部分不是我的主要疑问,只是一个例子


3596
2018-03-14 15:13


起源



答案:


 直接从ROM执行  将内容复制到RAM中。

在现代的x86处理器上,芯片组内存控制器在初始上电时未初始化,因此没有可用的RAM。

现代BIOS通常分为两部分:

  1. 引导块(早期POST)
  2. 压缩区域(中后期POST)

当处理器复位时,它开始在存储器中的固定地址执行指令,称为“复位向量”。 BIOS闪存芯片映射到内存中的此地址。处理器只是从这个地址开始执行指令。

“引导块”是指从复位向量(加上一些JMP)开始的BIOS代码。这是直接从ROM执行的(内存控制器尚未启动),因此速度非常慢。

BIOS Boot Block通常执行以下操作:

  1. 初始化内存控制器。 (如果从主板上听到“未检测到内存”的哔声代码,则会发生此处。)
  2. 在压缩区域上执行校验和以确保BIOS的其余部分没有损坏。
  3. 如果检测到任何损坏,请跳转到恢复模式。
  4. 如果校验和通过,则将其余的BIOS解压缩到某处的RAM(通常低于1MB边界)。
  5. 跳转到RAM中的解压缩代码并继续启动。

15
2018-03-18 03:29



现代CPU是否尝试直接从普通系统内存总线执行代码,或者它们是否与BIOS芯片有一些“特殊”连接?我认为拥有一个特殊的低速(甚至一位串行)启动闪存连接比尝试将闪存设备放在主总线上要简单得多。当然没有理由将闪存设置为64位宽,并且将其置于数据总线的一部分上会增加不平衡的电容负载,这是没有充分理由的。 - supercat
BIOS芯片通常连接到芯片组的南桥。 BIOS闪存和芯片组之间的物理接口通常是相对低带宽的总线。多年来,它是LPC或FWH总线(8个数据位,33MHz)。英特尔最近开始在其较新的芯片组上使用SPI作为BIOS接口。 (en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus) - myron-semack
请记住,PHYSICAL连接(有些)独立于其LOGICAL映射到处理器的地址空间。芯片组包含将闪存芯片映射到复位向量处理器地址空间的逻辑。 - myron-semack
因此,如果没有RAM,则无法更改BIOS配置,因为捕获键盘输入的部分未解压缩? - jiggunjer
@jiggunjer理论上,是的。你仍然需要一些RAM用于临时变量。但是,有一种称为Cache as RAM(CAR)的机制可以使用。然而,转换现有的BIOS代码来做这件事是一件大事,并且不会非常有用,因为大多数系统在没有RAM的情况下都是无用的。 - myron-semack


答案:


 直接从ROM执行  将内容复制到RAM中。

在现代的x86处理器上,芯片组内存控制器在初始上电时未初始化,因此没有可用的RAM。

现代BIOS通常分为两部分:

  1. 引导块(早期POST)
  2. 压缩区域(中后期POST)

当处理器复位时,它开始在存储器中的固定地址执行指令,称为“复位向量”。 BIOS闪存芯片映射到内存中的此地址。处理器只是从这个地址开始执行指令。

“引导块”是指从复位向量(加上一些JMP)开始的BIOS代码。这是直接从ROM执行的(内存控制器尚未启动),因此速度非常慢。

BIOS Boot Block通常执行以下操作:

  1. 初始化内存控制器。 (如果从主板上听到“未检测到内存”的哔声代码,则会发生此处。)
  2. 在压缩区域上执行校验和以确保BIOS的其余部分没有损坏。
  3. 如果检测到任何损坏,请跳转到恢复模式。
  4. 如果校验和通过,则将其余的BIOS解压缩到某处的RAM(通常低于1MB边界)。
  5. 跳转到RAM中的解压缩代码并继续启动。

15
2018-03-18 03:29



现代CPU是否尝试直接从普通系统内存总线执行代码,或者它们是否与BIOS芯片有一些“特殊”连接?我认为拥有一个特殊的低速(甚至一位串行)启动闪存连接比尝试将闪存设备放在主总线上要简单得多。当然没有理由将闪存设置为64位宽,并且将其置于数据总线的一部分上会增加不平衡的电容负载,这是没有充分理由的。 - supercat
BIOS芯片通常连接到芯片组的南桥。 BIOS闪存和芯片组之间的物理接口通常是相对低带宽的总线。多年来,它是LPC或FWH总线(8个数据位,33MHz)。英特尔最近开始在其较新的芯片组上使用SPI作为BIOS接口。 (en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus) - myron-semack
请记住,PHYSICAL连接(有些)独立于其LOGICAL映射到处理器的地址空间。芯片组包含将闪存芯片映射到复位向量处理器地址空间的逻辑。 - myron-semack
因此,如果没有RAM,则无法更改BIOS配置,因为捕获键盘输入的部分未解压缩? - jiggunjer
@jiggunjer理论上,是的。你仍然需要一些RAM用于临时变量。但是,有一种称为Cache as RAM(CAR)的机制可以使用。然而,转换现有的BIOS代码来做这件事是一件大事,并且不会非常有用,因为大多数系统在没有RAM的情况下都是无用的。 - myron-semack


如果完全移除RAM,打开电源时PC应不断发出哔哔声。

这里有一个很好的描述: http://www.pcguide.com/ref/mbsys/bios/boot.htm

还有Hans-Peter Messmer的“The Indespensible PC Hardware Book”也描述了这个过程。


1
2018-03-14 15:19



您将能够进入BIOS 之前 电脑开始了 嘟。 - redent84