CPU初始化

CPU开机或者触发RESET针脚复位后,系统总线上的每一个处理器都会执行一个硬件初始化过程,以及一个可选的内置自检(Buit-In-Self-Test, BIST)。硬件重置将每个处理器的寄存器设置为已知的固定的状态,并将处理器置于实地址模式下。硬件重置还会将内部缓存、TLBs、BTB清空(标记为无效状态)。接下来的操作取决于处理器系列(CPU Family)。

  • 奔腾4(CPUID中DisplayFamily为0FH)。系统总线上的所有处理器(包括单U系统上的单个CPU)执行多处理器(Multiple Processor,MP)初始化协议。这个协议选举出一个处理器作为自举处理器(Bootstrap Processor,BSP)然后立即开始执行(当前代码段内、偏移为EIP寄存器值的)软件初始化代码。那些非BSP的处理器,称为应用处理器(Application Processor,AP)。BSP执行初始化代码期间,AP会进入等待启动IPI状态(Wait For Startup IPI, SIPI)。
  • IA-32和Intel 64 处理器(CPUID中DisplayFamily为06H)。同奔腾4。
  • 奔腾处理器。无论是单处理器还是双处理器系统,其中一个处理器固定为主处理器。通过双处理器初始化协议(Dual-Processor Ready Initialization Protocol),主处理器立即执行当前代码段中EIP寄存器指向的软件初始化代码,另一个处理器则进入halt状态。
  • Intel486处理器。只有一个单处理器,因此不执行DP和MP初始化协议,立即执行当前代码段中EIP寄存器指向的软件初始化代码。

BSP负责唤醒每个AP,让每个AP各自执行自我配置代码。

当所有处理器都完成了初始化、配置、同步的工作,BSP开始运行第一个操作系统或者执行任务。

X87 FPU 是浮点运算单元。在硬件重置过程中,它也会被初始化到一个已知的状态。之后,X87 FPU 软件初始化代码可以设置精度和Exception Mask。切换CPU运行模式不需要特殊设置X87 FPU。

CPU的INIT#针脚能触发类似于硬件重置的效果。主要区别在于INIT过程中,内部缓存、MSR、MTRR、X87 FPU的状态都不变(尽管TLB和BTB会标记为失效)。INIT提供了从保护模式降回实地址模式的途径,同时保持内部缓存的内容不丢失。