给定一个流水线 CPU,当执行流水线中的指令时,CPU 何时以及如何被中断或异常中断?
中断/异常在哪个阶段处理,当前流水线和/或发生中断/故障的指令会发生什么?
给定一个流水线 CPU,当执行流水线中的指令时,CPU 何时以及如何被中断或异常中断?
中断/异常在哪个阶段处理,当前流水线和/或发生中断/故障的指令会发生什么?
它对那个处理器的设计是非常具体的,我不仅仅指 arm 做这个,x86 做那个,它可能处于那个级别,但是随着每个新内核的出现,设计人员可能会改变他们的工作方式。
一般程序员的假设是它“完成当前指令”然后中断,但是如果你查看 ARM ldm/stm,至少其中一些人说即使它们已经启动它们也会中止,所以不要使用这些指令来反对响应的逻辑读取或写入(例如从不自动增量),x86 多年来一直表示一旦添加分支预测就永远不要这样做,因为分支预测器可以从字面上读取任何内容以防万一,所以除了返回值之外不要做出反应。
使用管道,您的问题与我分支/跳转时发生的情况没有什么不同。也许它因指令类型而异,或者它可能是通用的,但显然管道被中断,管道中排队的东西被丢弃,中断例程被获取/调用并且编码执行,返回导致处理器返回最后一条指令之后的指令完全执行。它基本上与分支没有什么不同,你必须完成一条指令,停止并刷新管道开始在其他地方执行,ret 就像一个分支,你停止并刷新管道并重新开始其他地方。比简单的分支更接近呼叫/分支链接,但你明白我希望的想法。
这里没有魔法,没有什么特别的,想想一个函数调用。
至于管道的确切位置,有成百上千种不同的流水线处理器设计,没有理由期望它们中的任何两个是相同的,所以如果这是问题,那么它太宽泛了,没有一个答案。