禁用IRQ并不意味着所有的软中断都会被立即执行。有些软中断可能在禁用IRQ期间被触发,为什么有些软中断可能在禁用IRQ期间被触发
时间: 2023-12-06 21:41:26 浏览: 32
禁用IRQ可以防止硬件中断的发生,但是软中断有时候并不是由硬件触发的,而是由软件自行触发的。例如,内核中的定时器和网络协议栈等都会产生软中断,而这些软中断并不受IRQ的状态影响。因此,在禁用IRQ期间,这些软中断仍然可以被触发。同时,一些驱动程序也可以手动触发软中断,这些软中断同样不受IRQ状态影响。因此,即使禁用IRQ,也不能完全保证软中断不会被触发。
相关问题
如果在用户进程的执行中,被硬中断打断了,而不希望硬中断执行完了还执行软中断,希望还能回来继续执行用户程序,那么就要加上local_irq_disable了
是的,当硬中断被触发时,内核会暂停用户进程的执行,转而执行硬中断处理程序。如果此时还有软中断需要处理,内核会在硬中断处理程序执行完毕后立即开始执行软中断处理程序。如果你不希望软中断处理程序立即执行,可以在硬中断处理程序中使用local_irq_disable()函数来禁用本地中断,以防止软中断处理程序的执行。这样,当硬中断处理程序返回时,用户进程可以继续执行,而软中断处理程序则会在稍后的某个时间点被调度执行。需要注意的是,在硬中断处理程序中禁用本地中断可能会影响系统的响应性和实时性,因此应该谨慎使用。
默认情况下是不是硬中断在哪个CPU上被接受的,该硬中断对应的软中断就在哪个CPU上执行
在 Linux 操作系统中,默认情况下,硬中断被接收的 CPU 是由 IRQ affinity 决定的。IRQ affinity 是一种机制,可以将硬件中断绑定到特定的 CPU 上。IRQ affinity 可以通过 /proc/irq/<irq_number>/smp_affinity 文件进行配置。每个 CPU 都有一个对应的位,如果一个位被设置为 1,则表示该 CPU 可以处理该中断;如果该位被设置为 0,则表示该 CPU 不能处理该中断。当硬件中断到达时,它会被发送到被绑定的 CPU 上进行处理。
当硬件中断被处理完成后,对应的软中断不一定会在相同的 CPU 上执行。Linux 内核中,软中断是通过软中断处理器(SoftIRQ)来处理的。每个 CPU 都有一个独立的 SoftIRQ 处理器,用于处理与该 CPU 相关的软中断。当一个 CPU 处理完硬中断后,它会将对应的软中断放入该 CPU 对应的 SoftIRQ 处理器的队列中。然后,该 CPU 的 SoftIRQ 处理器会在适当的时候(例如在内核中断结束时)处理队列中的软中断,而这个时候可能会在其他 CPU 上执行。