BIOS 是从 BIOS 芯片读取还是在启动时复制到 RAM 中?

BIOS 是从 BIOS 芯片读取还是在启动时复制到 RAM 中?

当您第一次打开计算机时,是否首先设置提取/执行循环以从 BIOS 芯片直接提取指令到 CPU 中的指令寄存器,或者是否设置自动电路,以便当检测到电源开启时,BIOS 芯片中的指令自动加载到 RAM 中?

更新

我想我找到了答案这里

复位信号关闭后,CPU 开始运行。由于 RAM 为空,因此无法执行 RAM 中的代码。CPU 制造商对处理器进行预编程,使其始终从 ROM 的地址“FFFF:0000”(通常是 ROM BIOS)开始执行代码。

因此,CPU 的物理设置为在开启时立即去获取并执行 ROM 中的内存地址 FFFF:0000。

答案1

大多数主板过去在 BIOS 中都有一个选项来配置此行为。它通常称为阴影,通常默认启用。我认为现在很多主板都不会给你这个选项,而只是一直使用阴影。原因是 RAM 比 ROM 快,所以将其复制到 RAM 并从那里运行可以加快速度。

请注意,复制不是由某些神奇的电路完成的,而是由 BIOS 本身在最初开始从 ROM 执行时完成的,它只是将自身复制到 RAM 然后从那里继续执行。

答案2

这是另一个案例,尽管有大量技术参考资料可以解释现在的情况,但关于该主题的民间智慧仍然psusi停留在 1991 年左右的世界中,不幸的是,正如 的答案和部分问题所体现的那样。

在 20 世纪 80 年代后期,机器固件(IBM PC 兼容机世界中称为“BIOS”的两种东西之一)确实是位于 ISA 总线上的 ROM 芯片中;并且 CPU 确实开始执行物理地址的代码000FFFF0,物理地址是“常规内存”中通过实模式指针访问的位置,但F000:FFF0这个世界早已不复存在。

(你所指向的 WWW 页面的作者 S. Ebrahim Shubbar 错误地生活在一个更古老的世界,尽管他在 2002 年写下了这篇文章。自 8086 以来, CPU 就没有以CS:IP组合开始。80286 将其改为。但 80286 世界FFFF:0000F000:FFF0本身是 20 世纪 80 年代末期民间智慧仍然流传的极为过时的世界。

你的“BIOS 芯片”RAM;并且您的 CPU 不是 16 位。

在现代 PC 中,机器固件保存在非挥发性记忆体。NVRAM 芯片连接到 LPC 总线(或专用的“固件集线器”接口),而“芯片组”中的 LPC/FWH 桥通常会禁用对它的写入周期。“刷新”固件涉及设置芯片组寄存器,以启用对 NVRAM 的写入,然后写入 NVRAM。(例如,在 Intel ICH10 中,允许写入周期通过的芯片组寄存器位名为BIOSWE“BIOS 写入启用”。这里我将跳过一些其他细节,但这就是它的要点。)

000FFFF0自 80286 时代以来,x86 处理器就没有在位置开始执行。32位 CPU 的启动方式通常称为虚幻模式。即使CS寄存器在复位后的初始值为F000,与该寄存器关联的段描述符最初仍FFFF0000作为其基址。因此,最初对应于 16:16 CS:IP 地址的物理地址F000:FFF0实际上是 ,并且自 80386 时代以来一直如此FFFFFFF0

这就是机器固件主要映射到 32 位和 64 位 x86 机器上的物理地址空间的地方。在“常规内存”区域中,有一个 128KiB 的固件窗口,但在现代 PC 上,保存机器固件的 NVRAM 可以高达 16MiB(尽管这因芯片组而异),并且主要映射到 4GiB 线正下方的 16MiB 物理地址空间 - 即 的物理地址FF000000FFFFFFFF(再次以 ICH10 为例:有多少地址空间映射到 NVRAM 由称为 的芯片组寄存器控制,即FWH_DEC_EN“固件集线器解码启用”寄存器。固件被编码为根据安装在主板上的实际 NVRAM 芯片的大小重新编程寄存器FWH_DEC_EN。但 NVRAM 的前 512KiB 是总是映射到物理地址,FFF80000并且FFFFFFF不能被禁用。)处理器在重置后立即执行的代码位于这个 16MiB 地址范围的前 64KiB 中。

至于 BIOS ROM 阴影(这就是它的名字——为什么barlop认为 CPU 被阴影是一个谜):是的,访问 LPC 总线或固件集线器上的 NVRAM 仍然不如访问主系统(易失性)RAM 快。但随着 OS/2 和 Windows NT 等操作系统的出现,阴影的重要性大大降低——同样是在 1980 年代末和 1990 年代初。实模式操作系统(如 MS-DOS、PC-DOS、DR-DOS 等)位于机器固件提供的 I/O 功能之上。因此,固件的代码和只读数据最终在运行时被大量访问。 保护模式OS/2 和 Windows NT 等操作系统依赖远不及在运行时依赖于固件提供的服务。因此,在 NVRAM 之外执行的代码以及其中的只读数据到达处理器的速度比被投射到系统 RAM 中时要慢,这一事实已不再像以前那样是个问题。

此外,它们需要哪些固件代码和数据所依赖的 NVRAM 不一定位于映射到物理地址空间部分的 NVRAM 部分,即前面提到的 128KiB“常规内存”窗口,而这部分首先必须是可影子的。保护模式固件服务并不像实模式固件服务那样都需要位于物理地址空间的 1MiB 线以下,有些则不需要。(当然,只能对它们所在的物理地址空间区域使用同样的技巧(如果系统 RAM 至少为 4GiB,则居住。)

讽刺的是,比 S. Ebrahim Shubbar 在 2002 年撰写的文章更准确的信息来源是Phil Croucher 的书BIOS 伴侣从一年前的 2001 年开始。M. Croucher 观察到 Unices、Linux、Windows NT 和“大概 (95/98)”“没有从阴影中获益”。这并不一定完全好处,但与 1989 年在 16 位 80286 机器上以实模式运行 MS-DOS、PC-DOS 和 DR-DOS 的人们相比,这一好处相对较少。

相关内容