当我们第一次按下开机按钮时,笔记本电脑上是否会发生硬件中断?
我在多个地方读到: “一旦系统收到电源发出的‘Power Good’信号,CPU 就会向 BIOS 寻求有关初始化系统的指令” 但即使在 BIOS 指令加载到 CPU 之前,我们也已将引导指令加载到程序计数器中。因此,为了将内存地址加载到程序计数器上,一开始就必须有一个硬件中断?
当我们第一次按下开机按钮时,笔记本电脑上是否会发生硬件中断?
没有。
CPU必须做各种事情(“内置自检”,确定它是否是“启动CPU”等),然后固件必须配置各种事情(中断控制器等),然后是一些事情(固件)必须创建一个中断向量表。所有这些都必须在任何中断发生之前发生。
那么为了将内存地址加载到程序计数器上,一开始就必须有一个硬件中断?
对于主“启动CPU”;在加电序列(自检等)之后,CPU 最终处于由制造商内置于 CPU 中的明确定义的默认状态;其中包括每个寄存器(包括指令指针)的默认/初始值。这也意味着某些东西(固件)必须存在于制造商内置于 CPU 中的地址处。
对于其他CPU(“应用处理器”);在开机序列之后,它们只是等待软件以某种方式唤醒它们。对于 80x86,唤醒 AP 是通过软件从另一个 CPU 发送一系列中断来完成的;其中(仅适用于现代 80x86 CPU - Pentium 及更新版本)要放入指令指针的部分地址包含在作为“启动中断”(SIPI) 的一部分发送到 CPU 的消息中;并且指令指针的其余部分(以及所有其他寄存器)仍然是“由制造商内置于 CPU 中的明确定义的默认状态”。
开机顺序取决于主板制造商。
当年,北桥芯片组与模板源代码 BIOS 一起交付。您仍然可以在 AMD 网站上找到旧 PCH 或北桥芯片的 pdf 手册,以及如何使用 BIOS 模板代码源为它们构建 BIOS 的 pdf 指南。
大多数芯片,当您将机器插入墙壁插座时,会将 eeprom 芯片(保存 BIOS ROM)的最后 65kb 映射到内存映射的 4GB 端。 (从 FFFF:0000 到 FFFF:FFFF)。 - 内存映射不是 RAM!
按下电源按钮将触发 PMIC(电源管理 IC)并为所有主板 PSU 供电,任何 x86 CPU 将从 FFFF:FFF0 开始执行代码。 (将跳转到一行函数,这些函数将执行 POST、从 EEPROM 芯片中提取选项 ROM 并将它们映射到内存映射中、设置数百个 PCH 内部寄存器、查找板上的所有设备、构建中断表、设置NVRAM 变量等 - 此 POST 作业大约有 300 个函数 - 它看起来很小 65kb,但事实并非如此)
在其他机器上,例如一些笔记本电脑和一些瘦终端,PCH 芯片将在您将机器插入墙壁插座的第一秒内为整个机器供电。 BIOS将执行所有功能,设置NVRAM,然后关闭机器。按下该机器上的电源按钮将触发 Super IO 芯片上的硬件中断,该芯片将加载您的 GUI ROM BIOS 或操作系统。
你可以在你的笔记本电脑上做一个实验:拔掉墙上的插头,取出电池,等待10分钟,然后给机器通电。如果您的机器在显示任何内容之前会自行启动并重新启动几次,那么您就知道在按下电源按钮之前会执行 BIOS 代码..并且电源按钮只是一个硬件中断。 或者,如果您的电源按钮位于键盘上,则肯定是硬件中断。 (某些联想笔记本电脑有一个单独的硬件按钮用于启动 GUI ROM BIOS 和单独的操作系统按钮)。
当然还有带有微码的英特尔ME,它会先于其他任何事情执行。为此,它不需要任何 RAM,内部 CPU 缓存就足够了。 (英特尔网站上有很多相关信息)。