我想知道 CPU 启动时多核处理器的哪个内核首先初始化?(我的意思是在引导加载程序级别)是第一个核心?还是随机核心?
3 回答
您想阅读本地 apic,您可以在“第 2a 卷”中阅读:
http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html
每个处理器都有一个对应的本地 apic,在每个本地 apic 中都有一个 apic ID 寄存器,它在系统初始化时被分配一个唯一值。
上线的初始内核称为引导处理器 (BSP),实际上可以是裸片上的任何物理内核。更多信息在“第 3a 卷”中,他们讨论了引导处理器选择过程。
以下是 vol3a 的摘录:
8.4.1 BSP 和 AP 处理器
MP 初始化协议定义了两类处理器:引导处理器 (BSP) 和应用处理器 (AP)。在 MP 系统上电或复位后,系统硬件会动态选择系统总线上的一个处理器作为 BSP。其余处理器被指定为 AP。
作为 BSP 选择机制的一部分,在 BSP 的 IA32_APIC_BASE MSR(见图 10-5)中设置 BSP 标志,表明它是 BSP。对于所有其他处理器,该标志被清除。
BSP 执行 BIOS 的引导代码以配置 APIC 环境,设置系统范围的数据结构,并启动和初始化 AP。当 BSP 和 AP 被初始化时,BSP 开始执行操作系统初始化代码。
这取决于处理器本身的架构。这样的事情并没有真正的标准。例如,PS3 核心有 9 个核心,其中一个将任务安排给其他 8 个。在这种情况下,可以公平地考虑一个核心在另一个 8 之前处理指令。就其他处理器而言,这是一个更难分辨的东西。假设引导加载程序将其指令发送到内核集是明智的,此时无论逻辑门将指令分配给内核,都以它们总是以任何方式这样做。在大多数情况下,我知道启动时的任务调度和任何其他时间的任务调度并没有真正的区别。最基本的任务调度硬件只会选择第一个可用的核心,通常是被认为是“第一个”的核心 一个由机器。但是就像我一直说不同的机器做不同的事情一样,所以我建议找出你正在使用的内核并检查那个内核的作用。祝你好运。
每个处理器都有自己的本地 APIC 和相关的本地 APIC ID,这个可以从本地 APIC 寄存器中读取(同一个在每个处理器上给出不同的 ID)