微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“中断处理程序的中断服务例程”是什么意思?

如何解决“中断处理程序的中断服务例程”是什么意思?

来自this accepted answer

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

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

来自Understanding the Linux Kernel,3rd Edition

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

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

解决方法

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

第一

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

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

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

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

在这种情况下,这本书描述了如果多次发生中断并且在下一个中断发生之前“中断服务程序”尚未完成,该怎么办。

,

Linux通过将每个IDT描述符指向一些通用代码来处理中断,这些代码依次执行一系列中断服务例程,直到其中一个处理中断为止。之所以需要这样做是因为诸如IRQ共享之类的事情,其中​​多个设备位于一个IRQ上,而您不知道哪个设备。

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

因此,“中断服务程序”一词是指在发生中断时一一执行的这些功能。当您注册要在发生中断时运行的驱动程序功能时,实际上是在将其注册为向量的中断服务程序。任何向量都可以有多个ISR。

术语“中断处理程序”是指Linux内核中由IDT实际指向的,实际上一一执行所有ISR的通用代码块。它还可以引用发生中断时执行的整个代码集,而ISR是该代码集的元素。从IDT描述符指向的指令,到最终的iret指令,包括曾经或可以执行的所有ISR。但是关键要点在于,每个向量只有一个中断处理程序。

混淆是因为“中断处理程序”是一个非常通用的术语,而“中断服务例程”是指Linux上下文中更具体的内容。在这种情况之外,它们经常互换使用,并且被认为是同一件事。

我已经阅读了您所引用的书,这就是这本书使用这些术语的方式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。