1

在某些架构(例如 x86)上,中断向量表(IVT)确实是它在锡上所说的:向量表,又名指针。每个向量保存一个中断服务程序(ISR) 的地址。当发生中断请求(IRQ) 时,CPU 会保存一些上下文并将向量加载到PC寄存器中,从而跳转到 ISR。到目前为止,一切都很好。

但在其他一些架构(例如 ARM)上,IVT 包含可执行代码,而不是指针。当 IRQ 发生时,CPU 会保存一些上下文并执行向量。但是这些“向量”之间没有空间,因此那里没有存储 ISR 的空间。因此,每个“向量指令”通常只是跳转到内存中其他地方的正确 ISR。

我的问题是:后一种方法的优点是什么?

如果 ISR 本身有固定的知名地址,并且被隔开以便合理的 IRS 就位,我会有点理解。然后我们将保存一个间接级别,尽管以一些碎片为代价。但是这种“紧凑的跳表”方式似乎一点优势都没有。我错过了什么 ?

4

2 回答 2

2

一些原因,但可能不是全部(我在这些问题上几乎是自学的):

  • 你可能会失败(一个例外什么都不做,只是转到表中的下一个)
  • FIQ 中断(快速中断请求)是表中的最后一个,顾名思义,它用于需要立即和低延迟处理的设备。这意味着您可以将 ISR 放在那里(不跳跃),并尽可能快地处理它。此外,FIQ 被认为是专用寄存器的方式,它允许 FIQ 处理程序的最佳实施。见https://en.wikipedia.org/wiki/Fast_interrupt_request
于 2015-09-29T10:13:26.297 回答
1

我认为这与简化处理器的硬件有关。

如果向量中断表中有机器指令(跳转指令),那么处理器在必须跳转到中断处理程序时唯一要做的额外事情就是在 PC 中加载相应中断向量的地址。

然而,如果中断向量表中有地址,处理器必须能够从内存中读取中断处理程序的起始地址,然后跳转到它。

从内存读取和写入寄存器所需的额外硬件比仅写入寄存器所需的复杂。

于 2017-03-06T18:33:46.117 回答