处理器如何处理中断指令

时间:2011-01-25 14:07:32

标签: multithreading x86 instructions

如果在长指令中间CPU收到中断,会发生什么? CPU会执行整个指令还是仅执行部分指令?

2 个答案:

答案 0 :(得分:1)

据我所知,这取决于处理器和指令。更具体地说,它取决于处理器是否以及何时采样待处理中断。如果处理器仅在完成当前指令后查找待处理中断,则显然没有任何内容会中断中间的指令。但是,如果执行长指令,则在执行指令期间多次采样中断可能是有益的(延迟)。这有一个缺点 - 在这种情况下,你必须恢复由于指令的部分执行而对寄存器和标志所做的所有更改,因为在中断完成后你将不得不返回并重新发出该指令

(来源:维基百科,http://en.wikipedia.org/wiki/Interrupt

答案 1 :(得分:1)

从程序员的角度来看,要么退出特定指令,要么将其所有副作用提交给寄存器/存储器,要么就不存在(并且就好像指令根本没有被执行)。整个指令退役是为了保证在外部事件(例如中断)时对程序状态的一致看法。

这就是为什么指令按顺序退出的原因,因此外部观察者仍然可以查看CPU的架构状态,就像它正在执行顺序指令一样。

这有例外,特别是REP-string类指令。

我相信这就是你所问的,但如果不是,那就让我问你:你怎么会发现一条指令是从任何地方“部分”执行的?