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

Arm 中断在多核系统中是如何工作的?,arm,raspberry-pi,cpu,interrupt,Arm,Raspberry Pi,Cpu,Interrupt,我想为Raspberry pi 2上的按钮中断编写代码。该板使用四核Broadcom BCM2836 CPU(ARM架构)。也就是说,这个板上只有一个CPU(Raspberry pi 2)。但我不知道如何在多核系统中进行中断。我想知道中断线是连接到每个核心还是一个CPU。因此,我通过谷歌找到了下面的段落 多核系统上的中断 在多核系统上,每个中断都被定向到一个(并且只有一个)CPU,尽管哪个CPU并不重要。这是如何发生的,由板上的可编程中断控制器芯片控制。当您在系统启动时初始化PIC时,您可以对它

我想为Raspberry pi 2上的按钮中断编写代码。该板使用四核Broadcom BCM2836 CPU(ARM架构)。也就是说,这个板上只有一个CPU(Raspberry pi 2)。但我不知道如何在多核系统中进行中断。我想知道中断线是连接到每个核心还是一个CPU。因此,我通过谷歌找到了下面的段落

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

这是否意味着每个CPU都会发生中断?我不能完全理解上面的信息。若中断发生在每个内核上,我必须考虑按钮的每个中断服务例程上共享数据的关键部分

若中断发生在每个CPU上,我不必考虑共享数据的关键部分。什么是正确的


总之,我想知道多核系统中的中断是如何实现的?中断线是否连接到每个核心或CPU?那么,我是否应该考虑同一中断的关键部分呢?

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

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

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

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

双核、四核等都不重要,将每个核视为一个cpu,事实就是这样,并像处理单个cpu一样解决中断问题。同样,共享资源是共享资源,无论是在中断期间还是在中断期间。解决一个cpu的问题,然后处理任何共享

作为一个ARM,每个芯片供应商的实现可能会有所不同,因此不可能有一个通用的答案,您必须阅读ARM核心的ARM文档(如果可能,具体版本可能会有所不同),以及ARM核心周围的芯片供应商文档。在这种情况下,作为Broadcom,祝芯片供应商好运。它们充其量是有限的,尤其是在raspi2方面。您可能需要深入研究linux源代码。不管怎样,arm、x86、mips等等,您都必须阅读文档并进行一些实验。首先将每个核心视为一个独立的cpu,然后在需要时处理资源共享


如果我没记错的话,默认情况是第一个内核从sd卡上运行kernel7.img,其他三个内核在循环中旋转,等待写入一个地址(每个都有自己的地址),让它们跳转到那个地址并开始做其他事情。因此,您可以直接从一个cpu开始,不共享,然后弄清楚,如果您选择不让其他cpu上的代码接触该资源,那么就完成了。如果确实如此,请找出如何共享资源。

您检查过了吗?简言之“取决于中断控制器的功能以及设置方式”。IIRC 2836上的中断控制器有点“特殊”。可能重复;这个问题专门针对Linux,但答案并不取决于此。@artlessnoise如果2836有GIC,;)@不是这样的好吧,但这在概念上有什么不同?车身控制模块代码位于主线中。像本地计时器等寄存器是每个cpu的,其他寄存器是全局的。该芯片似乎没有GIC那么灵活。“ACK”的第一个是要服务的,而其他的则得到一个虚假的(如果服务尝试发生在其他CPU上,并且没有其他中断),中断通过GIC全局路由。