向量中断

5

向量中断和非向量中断有什么区别?

我曾经认为所有的中断都必须是向量中断... 毕竟,所有的中断都有一个向量号,因此都有一个特定的ISR [中断服务例程]。

(假设使用32位地址结构,则ISR地址将在页表中,位于生成中断设备的向量号的4倍处)....

谢谢!

4个回答

7

请参考这里

  • 向量中断:设备通过中断告知CPU需要处理,同时标识自己的身份。
  • 轮询中断:CPU需要轮询多个设备以确定哪一个需要处理。

3
每当发生中断时,CPU 都需要执行处理程序(Handler),它基本上是一个处理中断的子程序。现在,CPU 如何访问此处理程序取决于中断类型。
对于向量中断,向量号指定了处理程序的地址,因此 CPU 跳转到该地址并执行处理程序。
另一方面,非向量中断通常由 I/O(慢速)设备引发。在这种情况下,总是需要执行特定的处理程序,因此不需要传递有关处理程序地址的向量。

你说“另一方面,非向量中断是由I/O设备引发的”-- 但是难道不是所有的中断(向量和非向量)都是由I/O设备引发的吗?你能否请澄清一下?否则前两段非常清晰明了,加1分!=) - rrazd
调用子程序也是一种中断。例如,如果您使用任何高级语言编程并调用函数,则这也是一种中断,并且它是一种向量中断类型,其中您知道要调用的函数的地址。 - AmanMohla
在同一程序中调用子程序的指令不是中断,而只是普通的分支。 (除非您谈论通过调用门的x86“call far”,那么它是系统调用而不是函数调用)。 - Peter Cordes

2
一个向量中断的重要特征是设备本身提供中断向量地址。对于非向量中断,使用相同中断请求例程的所有设备将转移到相同位置,并且中断服务例程将不得不计算实际中断的可能设备。 有了向量中断,设备告诉中断机制其矢量地址。矢量地址对应于操作系统(或设备驱动程序)写入适当的中断服务例程地址的存储位置。通常,每个设备都有自己的矢量地址,因此“哪个设备正在中断”决策是微不足道的。术语有点混乱,因为中断服务例程地址表通常称为“中断向量表”,但用于向量中断(中断设备标识向量中的插槽)和非向量中断(中断请求线对应于向量中的插槽)的术语是相同的。

-1

当外部设备中断CPU(中断请求)时,CPU必须执行中断服务例程以为该中断提供服务。如果处理器的内部控制电路产生对预定内存位置的CALL,该位置是中断服务例程的起始地址,则该地址称为向量地址,这种中断称为向量中断。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接