CPU如何确定哪个内核应处理硬件中断?

Vor*_*Dev 1 cpu x86 x86-64 intel

这个问题哪个处理器将在muticore系统执行硬件中断及其答案似乎把重点放在这个但从操作系统的角度来看,但如何在CPU决定什么内核,能够实现硬件中断之前的OS介入?

zx4*_*485 5

这是由 I/O-APIC 完成的。APIC 代表高级可编程中断控制器。来自OSDev Wiki 的引用:

此外,还有一个 I/O APIC(例如 intel 82093AA),它是芯片组的一部分,提供多处理器中断管理,在所有处理器上结合了静态和动态对称中断分布。在具有多个 I/O 子系统的系统中,每个子系统都可以有自己的一组中断。

可以在此处找到指向规范的过时链接。它将其部分功能描述为

提供多处理器中断管理
- 动态中断分配 - 将中断路由到最低优先级处理器
- 中断输入的软件可编程控制
- 从内存总线卸载中断相关流量


Bre*_*dan 5

在操作系统介入之前,CPU如何确定向哪个内核传递硬件中断?

在操作系统介入之前;仅运行一个CPU(其余的CPU停留在“等待启动IPI”状态,直到OS启动它们),并且配置了中断控制器(PIC芯片或IO APIC),以便将IRQ发送到唯一正在运行的CPU。

注意:对于BIOS;IO APIC也被禁用,直到操作系统启用/配置它为止,并且固件使用旧的PIC芯片(从字面上看,它不能用于确定将IRQ发送到哪个CPU)。对于UEFI,固件通常不使用IRQ(其设备驱动程序会轮询设备)。

在操作系统介入之后(不是之前);操作系统配置IO APIC / s,可能配置MSI(消息信号中断),也可能配置IOMMU,以告知硬件将每个IRQ发送到哪个CPU。

在一种特殊情况下(“发送到最低优先级的CPU”功能),芯片组决定将IRQ发送到哪个CPU(基于本地APIC或CR8中的软件设置“任务优先级”)。不幸的是,芯片组可能不支持此功能,即使支持该功能,OS也可能无法使用。