CPU 什么时候在流水线操作过程中被中断或异常打断?
When does the CPU get interrupted by interrupt or exception during pipelining?
给定流水线 CPU,在流水线中执行指令时,CPU 何时以及如何被中断或异常中断?
在哪个阶段处理 interrupt/exception,发生 interrupt/fault 的当前流水线 and/or 指令发生了什么?
它非常特定于该处理器的设计,我不只是说 arm 做这个而 x86 做那个,它可能处于那个级别但是随着每个新内核的出现,设计人员可能会改变他们的工作方式.
一般程序员的假设是它 "finishes the current instruction" 然后中断,但是如果你看看 ARM ldm/stm 至少他们中的一些人说即使他们已经开始他们也会中止,所以不要使用那些针对响应读取或写入的逻辑的指令(例如从不自动递增),x86 多年来一直表示一旦添加分支预测就永远不要这样做,因为分支预测器可以从字面上读取任何内容以防万一,所以除了 return一个值。
使用管道时,您的问题与我 branch/jump 时发生的问题没有什么不同。好吧,它可能因指令类型而异,或者可能是通用的,但显然管道被中断,管道中排队的东西被丢弃中断例程是 fetched/called 并且编码执行,return导致处理器 return 到最后一条完全执行后的指令。它基本上与分支没有什么不同,您必须完成一条指令,停止并刷新管道开始在其他地方执行,ret 就像一个分支,您停止并刷新管道并从其他地方开始。比简单的分支更接近 call/branch link 但你明白我希望的想法。
这里没有魔法,没什么特别的,只是想一个函数调用。
至于管道中的确切位置,有成百上千种不同的流水线处理器设计,没有理由期望它们中的任何两个是相同的,所以如果这是个问题,那就太对了广泛,没有一个答案。
给定流水线 CPU,在流水线中执行指令时,CPU 何时以及如何被中断或异常中断?
在哪个阶段处理 interrupt/exception,发生 interrupt/fault 的当前流水线 and/or 指令发生了什么?
它非常特定于该处理器的设计,我不只是说 arm 做这个而 x86 做那个,它可能处于那个级别但是随着每个新内核的出现,设计人员可能会改变他们的工作方式.
一般程序员的假设是它 "finishes the current instruction" 然后中断,但是如果你看看 ARM ldm/stm 至少他们中的一些人说即使他们已经开始他们也会中止,所以不要使用那些针对响应读取或写入的逻辑的指令(例如从不自动递增),x86 多年来一直表示一旦添加分支预测就永远不要这样做,因为分支预测器可以从字面上读取任何内容以防万一,所以除了 return一个值。
使用管道时,您的问题与我 branch/jump 时发生的问题没有什么不同。好吧,它可能因指令类型而异,或者可能是通用的,但显然管道被中断,管道中排队的东西被丢弃中断例程是 fetched/called 并且编码执行,return导致处理器 return 到最后一条完全执行后的指令。它基本上与分支没有什么不同,您必须完成一条指令,停止并刷新管道开始在其他地方执行,ret 就像一个分支,您停止并刷新管道并从其他地方开始。比简单的分支更接近 call/branch link 但你明白我希望的想法。
这里没有魔法,没什么特别的,只是想一个函数调用。
至于管道中的确切位置,有成百上千种不同的流水线处理器设计,没有理由期望它们中的任何两个是相同的,所以如果这是个问题,那就太对了广泛,没有一个答案。