在某些架构(例如 x86)上,中断向量表(IVT)确实是它在锡上所说的:向量表,又名指针。每个向量保存一个中断服务程序(ISR) 的地址。当发生中断请求(IRQ) 时,CPU 会保存一些上下文并将向量加载到PC寄存器中,从而跳转到 ISR。到目前为止,一切都很好。
但在其他一些架构(例如 ARM)上,IVT 包含可执行代码,而不是指针。当 IRQ 发生时,CPU 会保存一些上下文并执行向量。但是这些“向量”之间没有空间,因此那里没有存储 ISR 的空间。因此,每个“向量指令”通常只是跳转到内存中其他地方的正确 ISR。
我的问题是:后一种方法的优点是什么?
如果 ISR 本身有固定的知名地址,并且被隔开以便合理的 IRS 就位,我会有点理解。然后我们将保存一个间接级别,尽管以一些碎片为代价。但是这种“紧凑的跳表”方式似乎一点优势都没有。我错过了什么 ?