多核计算机的系统启动

System startup of multicore computer

我很想知道计算机启动时多核 CPU 是如何启动的。我想象有一个 "dominant core" 将 BIOS 和随后的内核加载到 RAM 并唤醒其余内核,让它们等待代码到 运行(就像一个无限循环?)。但这只是我猜它的工作原理。

另一个问题是,内核加载到内存后,所有内核都可以进行系统调用,对吧?。一个核心如何控制其他核心的任务?使用了哪些指令? (在 x86 / x86-64 中)

是的,有一个引导CPU。固件处理那个。它通常是 CPU 0,但如果那个丢失或有缺陷怎么办?然后它变得更棘手。

在 x86 平台上,有描述 CPU 和内存布局的 ACPI 表。操作系统使用 IPI(处理器间中断)启动其他 CPUs,将它们从空闲状态踢到中断处理程序(在内存中设置),然后进入操作系统功能。然后选择线程 运行 并开始做有用的事情。

如果您真的想知道它是如何工作的,请阅读 Linux 或其中一个 BSD 的源代码。

更新:看来我对 IPI 的看法是错误的。它使用中断而不是普通的 IPI 中断。 Linux SMP 启动在这里:https://github.com/torvalds/linux/blob/master/arch/x86/kernel/smpboot.c

似乎使用 NMI 或设置 CPU 重置。