我对双核 CPU 如何处理中断有所了解。我想知道如何在具有多个物理处理器的板上实现中断处理。
任何中断责任是否由物理板的配置决定?每个处理器都必须能够处理某些类型的中断,例如磁盘 I/O。除非有一些电路来管理和分配中断到适当的处理器?我的猜测是该方案必须是处理器中立的,以便任何处理器和内核都可以运行中断处理程序。
如果一个内核正在等待磁盘读取,那么当磁盘准备好时,该内核会是运行中断处理程序的内核吗?
我对双核 CPU 如何处理中断有所了解。我想知道如何在具有多个物理处理器的板上实现中断处理。
任何中断责任是否由物理板的配置决定?每个处理器都必须能够处理某些类型的中断,例如磁盘 I/O。除非有一些电路来管理和分配中断到适当的处理器?我的猜测是该方案必须是处理器中立的,以便任何处理器和内核都可以运行中断处理程序。
如果一个内核正在等待磁盘读取,那么当磁盘准备好时,该内核会是运行中断处理程序的内核吗?
在 x86 系统上,每个 CPU 都有自己的本地 APIC(高级可编程中断控制器),它们也相互连接,并连接到处理路由设备中断到本地 APIC 的 I/O APIC。
操作系统可以对 APIC 进行编程,以确定哪些中断被路由到哪些 CPU(或让 APIC 做出决定)。
我想多核 CPU 的每个核心都会有一个本地 APIC,但老实说,我对此并不确定。
有关更多详细信息,请参阅这些链接:
您感兴趣的是 SMP Processor Affinity。这是一篇关于如何在 Linux 中处理它的优秀文章。高级可编程中断控制器 (APIC)是您在现代系统中管理它的方式。基本上,除非您有一个使用此接口正确设置的操作系统,否则默认值将全部转到处理器 0。此外,您不一定希望发出命令的内核等待特定的中断。您希望负载较少的核心接收它。
不久前我已经问过这个问题了。也许它可以为您提供一些见解:)