Assembly 多核处理器如何启动?

Assembly 多核处理器如何启动?,assembly,multicore,boot,hardware-interface,Assembly,Multicore,Boot,Hardware Interface,在非常低的级别上讲,核心是如何初始化的?您可以查看文档中所有血淋淋的细节。血淋淋的细节见第8.1章 以下是摘录: 在通电之后或在断言 上的每个处理器的重置#引脚 系统总线执行硬件配置 处理器的初始化(已知) 作为硬件重置)和可选 内置自测试(BIST)。[剪]在 在这一点上,采取的行动取决于 在处理器系列上: •P6系列处理器-计算机上的所有处理器 系统总线(包括单总线) 单处理器系统中的处理器) 执行多处理器(MP) 跨网络的初始化协议 APIC巴士。正在运行的处理器 通过此协议选择作为 引导

在非常低的级别上讲,核心是如何初始化的?

您可以查看文档中所有血淋淋的细节。血淋淋的细节见第8.1章

以下是摘录:

在通电之后或在断言 上的每个处理器的重置#引脚 系统总线执行硬件配置 处理器的初始化(已知) 作为硬件重置)和可选 内置自测试(BIST)。[剪]在 在这一点上,采取的行动取决于 在处理器系列上:

•P6系列处理器-计算机上的所有处理器 系统总线(包括单总线) 单处理器系统中的处理器) 执行多处理器(MP) 跨网络的初始化协议 APIC巴士。正在运行的处理器 通过此协议选择作为 引导处理器(BSP)然后 立即开始执行 中的软件初始化代码 当前代码段开始于 EIP寄存器中的偏移量


根据体系结构、系统放大器或SMP等,有多种引导多核soc的方法。 双核SMP系统的一种简单方法是,CPU0从重置向量开始(例如0x00000000,指向存储引导监视器程序的闪存)。在此期间,其他内核处于WFI(等待中断)或引导保持关闭状态。 CPU0引导并为CPU1引导奠定基础

欲知详情


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

我很想知道操作系统最初(在硬件级别)是如何决定有多少内核/软件包/逻辑处理器的are@PhiS字体它只是问。查找cpuid…@Bahbar cpuid如果系统中存在多个物理包,则不会提供所有必要的信息,因为您只接收包级别的信息(包中有多少个内核/日志处理器)。@PhiS:对于包,这看起来像是一场试错游戏。查看我的答案中规范中的附录D,了解英特尔建议如何实现这一点(此处为双软件包示例)。步骤14到16是等待远程软件包唤醒并应答的步骤。@PhiS,在x86_64 pc上,有一个描述符表最初存储在启动时的内存中的某个物理内存地址,该地址包含CPU设置的详细信息。它被称为Multiboot表,在一个可以从英特尔获得的规范中有详细说明。该表包含CPU的布局以及有关LAPIC和IOAPIC中断控制器的信息。然后,通过调用从boostrap处理器到其他CPU的中断,根据协议引导CPU。这是非常特定于平台的,所有CPU类型的工作方式都不同。