多核处理器如何启动?

15

从非常低的层面来讲,CPU核心是如何初始化的?


我也很感兴趣知道操作系统最初(在硬件层面)如何确定有多少个核心/包/逻辑处理器。 - PhiS
@PhiS:它只是在询问,请查阅cpuid... - Bahbar
@Bahbar,如果系统中存在多个物理包,则CPUID无法提供所有必要的信息,因为您只能在包级别上接收信息(包含多少个内核/逻辑处理器)。 - PhiS
1
在 x86_64 个人电脑上,有一个描述符表最初存储在内存中的特定物理内存地址处,其中包含 CPU 设置的详细信息。它称为 Multiboot 表,并在 Intel 的规范中有详细说明。该表包含 CPU 的布局以及关于 LAPIC 和 IOAPIC 中断控制器的信息。然后通过从引导处理器到其他 CPU 调用中断按协议启动 CPU。这非常平台特定,并且所有 CPU 类型的工作方式都不同。 - exDM69
@exDM69 - 谢谢,这是很好的信息! - PhiS
显示剩余2条评论
2个回答

10

您可以在英特尔规格说明书的第8.1章节中查看所有血腥细节。以下是其中一段摘录:

在上电或RESET#引脚断言后,系统总线上的每个处理器都会对处理器执行硬件初始化(称为硬件复位)和可选的内置自检(BIST)。[snip]此时,所采取的操作取决于处理器系列:

• P6系列处理器 - 系统总线上的所有处理器(包括单处理器系统中的单个处理器)通过APIC总线执行多处理器(MP)初始化协议。通过此协议选择的处理器作为引导处理器(BSP),然后立即开始在EIP寄存器中指定的当前代码段中执行软件初始化代码。


3

根据架构、系统-AMP或SMP等,启动多核SoC有多种方式。 对于双核SMP系统的简单方法之一是CPU0从复位向量(例如0x00000000,指向存储引导监视器程序的闪存)开始。此时,其他内核处于WFI(等待中断)或引导保持状态。 CPU0启动并设置CPU1的引导基础。

更多详细信息请参见 http://www.linux-arm.org/LinuxBootLoader/SMPBoot

freescale.com/files/32bit/doc/app_note/AN3542.pdf


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接