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



根据这个公认的答案:

中断处理程序和ISR没有区别。

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

从理解Linux内核,第三版:

请记住,中断处理程序的中断服务例程是序列化的,通常在相应的中断处理程序终止之前不应该发生中断。相反,可延迟任务可以在启用所有中断的情况下执行。

这让我很困惑;中断处理程序"的中断服务程序;意思是

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

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

因此术语";中断服务程序";指的是当中断发生时一个接一个地执行的这些功能。当您注册一个驱动程序函数以在发生中断时运行时,您实际上是在将其注册为矢量的中断服务例程。任何矢量都可能有许多ISR。

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

这种混乱是因为";中断处理程序";是一个非常笼统的术语,而";中断服务程序";指的是Linux上下文中更具体的东西。在这种情况之外,它们经常被互换,并被认为是同一件事。

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

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

第一个

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

两个词";中断服务程序";以及";中断处理程序";可以用于操作系统中的功能或用于设备驱动程序中的功能。

该书可以将操作系统的功能命名为";中断处理程序";以及驱动器中的功能";中断服务程序";。在这种情况下,本书描述了不同的设备驱动程序如何处理相同的中断工作。

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

在这种情况下,本书描述了如果中断发生多次;中断服务程序";在下一次中断发生之前尚未完成。

最新更新