Linux kernel linux中的中断调度与处理

Linux kernel linux中的中断调度与处理,linux-kernel,interrupt-handling,Linux Kernel,Interrupt Handling,假设我们从网络设备得到100个中断,从USB得到50个中断,从SPI设备得到25个中断,从I2c得到25个中断 它的顺序如下 5Net-4USB-2SPI-2I2C,同样的顺序如下 顶级处理程序可以分派特定于设备的处理程序来为中断提供服务 现在,处理器将在收到网络设备的中断后立即中断正在运行的任务。在完成网络设备中断处理程序的上半部分时,它必须执行USB、SPI和I2C的上半部分 完成第一组序列后,将遵循相同的序列。被中断的任务何时会再次唤醒?被中断的任务是否会等到所有100个中断都由各自的设备

假设我们从网络设备得到100个中断,从USB得到50个中断,从SPI设备得到25个中断,从I2c得到25个中断

它的顺序如下 5Net-4USB-2SPI-2I2C,同样的顺序如下

顶级处理程序可以分派特定于设备的处理程序来为中断提供服务

现在,处理器将在收到网络设备的中断后立即中断正在运行的任务。在完成网络设备中断处理程序的上半部分时,它必须执行USB、SPI和I2C的上半部分

完成第一组序列后,将遵循相同的序列。被中断的任务何时会再次唤醒?被中断的任务是否会等到所有100个中断都由各自的设备特定处理程序提供服务?。如果需要为数十万个中断服务的多核系统提供服务,那么如何将中断共享给不同的核


据我所知,在执行中断处理程序时,处理器将处于中断上下文中,因此不会有任何上下文切换。由于不同的ISR必须为数十万次中断提供服务,处理器是否始终处于中断上下文中?

当中断的任务再次唤醒时?
当中断被清除并且调度程序决定给此任务处理器时间时

被中断的任务是否等待所有100个中断由各自的设备特定处理程序提供服务?
您只描述了4个IRQ源(一些网络设备、usb、spi、i2c)。因此,如果所有IRQ行都处于高位并启用,那么处理这些IRQ的CPU将切换到特定的中断处理程序。如果中断仍然在处理程序之后触发,则为其提供服务的cpu将一次又一次地分支到中断处理程序,直到中断被清除。在具有5个cpu的多cpu系统上,4个cpu可以同时为您的设备执行中断处理程序,而另一个cpu将执行您的任务。因此,您的任务可能根本不会被中断。或者,在单cpu系统上,当中断处理程序写得不好并且从不清除IRQ行时,它可能会永远等待cpu

如果需要为多核系统(如数以百万计的中断)提供服务,如何将中断共享给不同的核?
我想最好在这里解释一下:

由于不同的ISR必须服务于成千上万的中断,处理器是否始终处于中断上下文中?
它将保持在中断上下文中,直到启用IRQ并触发IRQ。如果需要,您只需禁用IRQ线路并将cpu返回给调度程序即可