"interrupt service routines of an interrupt handler" 是什么意思?

What does "interrupt service routines of an interrupt handler" mean?

来自

There is no difference in Interrupt handler and ISR.

还有另一个答案可以解释,但我不太清楚。

来自Understanding the Linux Kernel, 3rd Edition

Remember that the interrupt service routines of an interrupt handler are serialized, and often there should be no occurrence of an interrupt until the corresponding interrupt handler has terminated. Conversely, the deferrable tasks can execute with all interrupts enabled.

这让我很困惑。 “中断处理程序的中断服务例程”是什么意思?

不知道上下文,我可以通过两种不同的方式理解文本:

在大多数现代操作系统中,实际的中断处理程序是操作系统中的一个函数,它执行一些操作,调用设备驱动程序中的一个函数,然后执行更多操作。

“中断服务例程”和“中断处理程序”这两个词可能用于操作系统中的函数或设备驱动程序中的函数。

本书可能将操作系统的函数命名为“中断处理程序”,将驱动程序中的函数命名为“中断服务例程”。在这种情况下,本书描述了处理相同中断的不同设备驱动程序如何工作。

当中断发生时,启动“中断服务程序”。该书将函数本身命名为“中断处理程序”,每次启动该函数时,该书都会谈到一个“中断服务例程”。

在这种情况下,本书描述了如果中断多次发生并且“中断服务例程”在下一次中断发生之前尚未完成时究竟会发生什么情况。

Linux 通过将每个 IDT 描述符指向一段公共代码来处理中断,这些代码顺序执行一系列中断服务例程,直到其中一个处理中断。这是必需的,因为像 IRQ 共享这样的事情,其中​​多个设备在一个 IRQ 上而你不知道是哪个。

当您使用 request_irq(irq, &driver_function, ...) 注册要在某些中断发生时调用的驱动程序函数时,您实际上并没有更改 IDT 中的条目.而是将函数的地址放入一个新的 irqaction 描述符中,该描述符被添加到其他 irqaction 描述符链中,然后在中断发生时由内核串行执行,直到其中一个 returns 它能够处理中断。

所以术语“中断服务程序”指的是当中断发生时一个一个执行的这些功能。当中断发生时将驱动程序函数注册到 运行 时,实际上是将其注册为向量的中断服务例程。任何向量都可以有很多 ISR。

术语“中断处理程序”指的是 Linux 内核中的公共代码块,它实际上是由 IDT 指向的,它实际上一个接一个地执行您的所有 ISR。它还可以指代发生中断时执行的整个代码集,ISR 是该集的元素。从 IDT 描述符指向的指令,到最后的 iret 指令,包括任何已经执行或可以执行的 ISR。但关键是每个向量只有一个中断处理程序。

混淆是因为“中断处理程序”是一个非常笼统的术语,而“中断服务例程”在 Linux 上下文中指的是更具体的内容。在此上下文之外,它们经常互换并被认为是同一事物。

我读过你引用的那本书,这本书是这样使用这些术语的。