英特尔处理器是怎样运行的?当咱们打开计算机时,它会在可以加载操做系统以前通过一系列步骤。在这篇文章中,咱们将看到典型的x86处理器如何启动。这是一个很是复杂且涉及的过程。咱们只提出一个基本的总体结构。此外,处理器实际上采用何种路径来达到能够加载OS的状态,这取决于引导固件。操作系统
施加电源以前指针
让咱们从BIOS芯片开始,也称为引导ROM。BIOS芯片是计算机主板上的一块硅片,它能够存储字节。它有两个咱们感兴趣的特征。首先,它(或其中的一部分)是内存映射到CPU的地址空间,这意味着CPU能够像访问RAM同样访问它。特别是,CPU能够将其指令指针指向BIOS芯片内的执行代码。其次,BIOS芯片存储的字节表明CPU执行的第一个指令。BIOSchop还包含其余代码和数据。典型的BIOS包含闪存描述符(BIOS芯片的内容表),BIOS区域(要执行的第一条指令),IntelME(Intel管理引擎)和GbE(千兆以太网)。blog
通电时内存
现代英特尔芯片配备了所谓的英特尔管理引擎。只要有电源-经过电池或电源-IntelME就会出现。它执行本身的初始化,要求它读取BIOS的闪存描述符以查找IntelME区域的位置,而后从BIOS的IntelME区域读取代码和配置数据。接下来,当咱们按下计算机上的电源按钮时,CPU会亮起。在多处理器系统上,始终存在一个名为BootstrapProcessor(BSP)的指定处理器。在任何一种状况下,处理器老是以所谓的16位实模式启动,其中insruction指针指向地址0xffff.fff0,即复位向量。在此初始模式下,处理器有前12个地址线被断言,所以任何地址都看起来像0xfffx.xxxx。编译器
BIOS芯片也以这样的方式设置,即从BIOS执行的第一条指令位于处理器的物理地址0xffff.fff0。所以,处理器可以从BIOS芯片的BIOS区域执行第一条指令。该区域包含所谓的引导固件。引导固件的示例是UEFI实现,coreboot和经典BIOS。io
引导固件的第一件事就是切换到32位模式。它也是“保护模式”,即打开分段,而且可使用不一样的访问权限管理处理器地址空间的各个段。然而,启动固件只有一个段,有效地关闭了分段。这称为平面模式。编译
早期的初始化配置
值得注意的是,在启动过程的这一点上,DRAM不可用。DRAM初始化是启动固件的主要目标之一。但在它初始化DRAM以前,它须要作一些准备。sso
微代码补丁就像CPU正常运行的补丁。英特尔不断发布针对不一样CPU的微码补丁。引导固件在引导过程当中很早就应用了这些补丁。处理器的一部分是所谓的sout桥接器或I/O控制器集线器(ICH)或外围控制器集线器(PCH)。ICH也有一些初步措施。例如,ICH可能包含一个看门狗定时器,能够关闭哪一个DRAM正在初始化。必须首先关闭该看门狗定时器。权限
固然全部这些都是由某人编写的代码固件完成的。如今咱们知道的大多数代码都使用堆栈。但咱们已经提到DRAM还没有初始化,所以没有内存。那么这段代码是如何编写和运行的呢?答案是这是无堆栈代码。要么它是手写的x86汇编,要么就像coreboot同样,它是用C语言编写的,并使用称为ROMCC的特殊编译器进行编译,该编译器将C转换为无堆栈汇编指令。这固然有一些限制,因此ROMCC编译代码不是咱们想要执行的全部内容。咱们须要尽快堆叠。(欢迎转载分享)