谁在计算机引导过程中将BIOS加载到RAM中


8

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

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

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

Answers:


7

正如我在对该问题回答中所写的那样,在该问题上获得的民间智慧(不幸的是在该问题上得到了其他答案(在SuperUser中的其他地方)得到了体现)在1991年左右就被世界所卡住,尽管有大量的技术参考资料可以解释。现在情况如何。

如果您已经阅读了我的回答,就不会感到困惑,因为您一开始就不会询问“从ROM加载BIOS”。

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

正如我之前所写,在现代PC中,机器固件存储非易失性RAM中。它不是以前的ROM。有关连接到LPC总线的NVRAM芯片的详细信息,请参见前面的答案。(例如:在我打字时在我旁边拆卸的机器上,装有固件的NVRAM是Pm49FL004T,这是LPC闪存RAM芯片。)

32位CPU不能以实模式启动,也不能以低于1MiB行的地址开头。与16位x86处理器相比,这已经是数十年的陈旧废品。它们以俗称的虚幻模式开始,在我先前的回答中,我再次详细介绍了自80386出现以来的实际情况。他们从实际上位于32位地址空间顶部的地址加载第一条指令FFFFFFF0

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

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

进一步阅读


谢谢,这对我来说似乎更加清楚。但是,当您说非易失性RAM并从中读取数据时,是否表示BIOS以某种方式与RAM耦合?每个RAM芯片都带有BIOS吗?我知道这可能看起来很愚蠢,但是我是该主题的初学者。
天鹅座

当他说非易失性随机存取存储器(NVRAM)时,他指的是与用作主系统存储器的RAM(通常是动态随机存取存储器,DRAM)不同的技术。它是与主RAM分开的芯片,即使关闭电源也包含固件,因此是“非易失性”部分。
Dougvj 2014年

@Dougvj:在那种情况下,为什么我们要为其单独分配一个地址FFFFFFF0呢?NVRAM的大小不就是固件的大小吗?
天鹅座

我认为您的问题最好作为实际问题处理,而不是对此答案发表评论。查看右侧的一些“相关”问题,然后找出一个问题,以进一步加深您的理解。(在SuperUser上肯定有一些基本问题和答案的空间,似乎只是简短介绍而已。)
JdeBP 2014年

@JdeBP:我添加了一个新的question- superuser.com/questions/695769/...
天鹅
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.