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


10

首次打开计算机时,是首先设置了获取/执行周期,以将指令从BIOS芯片直接获取到CPU中的指令寄存器,还是在其中设置了自动电路,以便在检测到电源时,将BIOS芯片是否自动加载到RAM中?

更新资料

我想我在这里找到了答案:

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

因此,CPU物理上已设置为可以在打开后立即获取并执行ROM中的内存地址FFFF:0000。


1
如果您自己找到答案,在下面将其发布为答案,而不是将其编辑为问题。(您可以在一段时间后接受自己的答案。)
user1686 2011年

《升级和维修PC》一书中提到了CPU读取的第一个内存位置。而且,旧的CS老师教的这个过程可能仍然适用,称为自举,例如通过引导程序来提升自己的能力(操作系统的基础被加载。
barlop 2011年

Answers:


3

大多数主板以前在BIOS中都有一个选项可以配置此行为。通常称为阴影,默认情况下通常启用它。我认为这些天来没有很多董事会愿意为您提供选择,而且总会留下阴影。原因是因为RAM比ROM快,所以它加快了将其复制到RAM并从那里运行的速度。

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


因此,据我了解,您所说的内容一出现,CPU就会从ROM中读取指令,该指令说:“将ROM中的所有启动指令复制到RAM中,然后将程序计数器设置为该起始地址在RAM中。” 那是对的吗?
2011年

@psusi您是否有一些链接说明您在说什么?CPU阴影并不能给我带来太多好处,以及如何进行配置。你什么时候在谈论?主板何时有此选项?您能指出具有该选项的任何主板型号吗?
barlop 2011年

18

这是另一种情况psusi,尽管在1991年前后,尽管已有大量技术参考资料解释了这一问题,但人们普遍接受的关于这一问题的民间智慧就被卡在了1991年左右,这是不幸的是,答案确实是问题的一部分。除此以外。

在1980年代后期,机器固件确实是在ISA总线上的ROM芯片中;机器固件是IBM PC兼容世界中称为“ BIOS”的两件事之一。而且CPU确实确实开始在物理地址000FFFF0(通过实模式指针访问的“常规内存”中的位置)处执行代码F000:FFF0

(您所指的WWW页面的作者S. Ebrahim Shubbar尽管生活在2002年,但仍错误地生活在这个世界中,这个世界甚至更旧。自8086以来,CPU并没有从这种CS:IP组合FFFF:0000开始。80286将其更改为F000:FFF0但是80286世界本身就是1980年代后期仍然过时的世界,民间智慧仍在传播。)

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

在现代PC中,机器固件保存在非易失性RAM中。NVRAM芯片连接到LPC总线(或专用的“固件集线器”接口),并且“芯片组”中的LPC / FWH桥通常禁用对其的写周期。“刷新”固件包括设置芯片组寄存器,该寄存器允许先写入NVRAM,然后再写入NVRAM。(例如,在Intel ICH10中,允许进行写循环的芯片组寄存器位称为BIOSWE“ BIOS Write Enable”。这里将跳过一些其他详细信息,但这就是要点。)

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

这就是将机器固件主要映射到32位和64位x86机器上的物理地址空间的地方。在“常规内存”区域中的固件下方有一个128KiB的窗口,但是在现代PC上,保存机器固件的NVRAM最多可达到16MiB(尽管因芯片组而异),并且主要立即映射到物理地址空间的16MiB中。在4GiB线下-即物理地址FF000000FFFFFFFF。(再次以ICH10为例:该地址空间映射到NVRAM的多少由芯片组寄存器FWH_DEC_EN“ Firmware Hub Decode Enable”(固件集线器解码使能)寄存器控制。对固件进行编码以重新编程。FWH_DEC_EN根据主板上安装的实际NVRAM芯片的大小进行注册。但NVRAM的顶部512KiB被始终映射到物理地址FFF80000FFFFFFF,并且不能被禁用。)的码复位生活的这个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部分中,即前述的128KiB“常规存储器”窗口,该窗口首先甚至必须是可影子的。保护模式固件服务不需要像真实模式固件服务那样全部位于物理地址空间中的1MiB线以下,而有些则不需要。(当然,如果系统RAM至少为4GiB,则只能它们驻留的物理地址空间区域做同样的技巧。)

具有讽刺意味的是,比起S. Ebrahim Shubbar在2002年撰写的书,更准确的信息来源是Phil Croucher的书《 BIOS Companion》(2001年之前的一年)。M。Croucher观察到Unices,Linux,Windows NT和“大概(95 / 98)“”从阴影中获取任何好处“。不一定完全没有好处,但相对于1989年在16位80286机器上以实模式运行MS-DOS,PC-DOS和DR-DOS的人们而言,它却相对很少。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.