中断如何在多核系统中工作?

How do interrupts work in multi-core system?

我想写代码实现按键中断Raspberry pi 2. 本板采用QUAD Core Broadcom BCM2836 CPU(ARM架构)。这意味着,此板上只有一个 CPU ( Raspberry pi 2 )。但是我不知道在多核系统中如何中断。我想知道中断线是连接到每个内核还是一个CPU。所以,我通过 Google.

找到了下面的段落

多核系统中断 在多核系统上,每个中断都指向一个(并且只有一个)CPU,尽管哪个并不重要。这是如何发生的是在板上的可编程中断控制器芯片的控制下。当您在系统启动时初始化 PIC 时,您可以对它们进行编程以将中断传递给您想要的 CPU;在某些图片上,您甚至可以让中断在每次关闭时在 CPU 之间轮换。

这是否意味着每个 CPU 都会发生中断?我不能完全理解上面的信息。如果每个内核都发生中断,我必须考虑到按钮的每个中断服务例程中共享数据的临界区。

如果每个 CPU 都发生中断,我不必考虑共享数据的临界区。什么是正确的?

综上所述,我想知道在多核系统中如何进行中断?中断线是接在每个核心上还是CPU?那么,我是否必须考虑同一中断的临界区?

你对 google 的引用看起来很普通,甚至可能依赖于 x86 的大小,但如果是这样的话并不重要。

我当然希望你能够控制每个 cpu 的中断,这样你就可以让一种类型转到另一种类型,另一种转到另一种类型。

同样,如果您需要,可以选择中断所有这些。

中断与共享资源无关,无论是否在ISR中,您都必须处理共享资源,因此中断无关紧要,您不必处理它。能够将中断从一个外围设备隔离到一个 cpu 可以使共享更容易,因为您可以让一个 cpu 拥有资源而其他 cpu 向 [=26] 发出请求=] 例如拥有它。

双核、四核等无关紧要,将每个核视为单个 cpu,并像处理单个 cpu 一样解决中断问题。再次共享资源是共享资源,在中断期间或不在中断期间。解决一个cpu的问题,然后处理任何共享。

作为 ARM,每个芯片供应商的实现可能各不相同,因此不可能有一个通用的答案,您必须阅读 arm 内核的 arm 文档(如果可能的话,还有特定版本,因为它们 can/do vary) 以及芯片供应商文档,了解他们在 arm 内核周围拥有的任何内容。在这种情况下作为 Broadcom,祝芯片供应商文档好运。它们充其量是有限的,尤其是 raspi2。您可能需要深入研究 linux 来源。不管是什么,arm、x86、mips等等,你只需要阅读文档并做一些实验。首先将每个核心视为独立 cpu,然后在需要时处理资源共享。

如果我没记错的话,默认情况下只有第一个核心 运行 kernel7.img 离开 sd 卡,其他三个在循环中旋转等待地址(每个都有它自己的)将被编写以使他们跳到那个并开始做其他事情。因此,从字面上看,您可以从一个 cpu 开始,不共享,如果您选择不在接触该资源的其他 cpu 上编写代码,那么就可以解决这个问题。如果你这样做,那么想办法共享资源。