Exception 在流水线过程中,CPU何时被中断或异常中断?

Exception 在流水线过程中,CPU何时被中断或异常中断?,exception,cpu,hardware,interrupt,pipelining,Exception,Cpu,Hardware,Interrupt,Pipelining,给定一个流水线CPU,在流水线中执行指令时,CPU何时以及如何被中断或异常中断 中断/异常是在哪个阶段处理的,中断/故障发生的当前管道和/或指令会发生什么情况?这对于处理器的设计是非常具体的,我的意思不仅仅是arm做这个和x86做那个,它可能在那个级别,但随着每个新内核的出现,设计师可能会改变他们的设计方式 一般程序员的假设是,它“完成当前指令”然后中断,但如果您查看ARM ldm/stm,至少其中一些会说即使它们已经启动也会中止,因此不要对响应读或写的逻辑使用这些指令(例如,永远不要自动递增)

给定一个流水线CPU,在流水线中执行指令时,CPU何时以及如何被中断或异常中断


中断/异常是在哪个阶段处理的,中断/故障发生的当前管道和/或指令会发生什么情况?

这对于处理器的设计是非常具体的,我的意思不仅仅是arm做这个和x86做那个,它可能在那个级别,但随着每个新内核的出现,设计师可能会改变他们的设计方式

一般程序员的假设是,它“完成当前指令”然后中断,但如果您查看ARM ldm/stm,至少其中一些会说即使它们已经启动也会中止,因此不要对响应读或写的逻辑使用这些指令(例如,永远不要自动递增),多年来,x86一直说,一旦添加了分支预测,就永远不要这样做,因为分支预测可以读取任何内容以防万一,所以除了返回值之外,不要做出其他反应

对于管道,你的问题与我分支/跳跃时发生的情况没有什么不同。好吧,它可能因指令类型而异,也可能是通用的,但很明显,管道被中断,管道中排队的东西被丢弃,中断例程被提取/调用,编码执行,返回导致处理器在最后一条指令完全执行后返回指令。它基本上和一个分支没有区别,你必须完成一条指令,停止并刷新管道,然后从其他地方开始执行,ret就像一个分支,你停止并刷新管道,然后从其他地方开始。与简单的分支机构相比,更接近于呼叫/分支机构链接,但我希望你能得到这个想法

这里没有魔法,没有什么特别的,只要想想函数调用


至于管道中的确切位置,有成百上千种不同的流水线处理器设计,没有理由期望它们中的任何两种是相同的,因此如果这是一个问题,那么它太宽泛了,没有一个答案。

执行程序通常看不到这一点。你的方案是什么?@RaymondChen没有方案,我只是问CPU一般是如何工作的。我投票结束这个问题,因为它不是一个编程问题。@RaymondChen你错了。这对于任何至少在某种程度上接触机器代码的系统程序员来说都是非常重要的。当然,对于那些对web开发感兴趣的人来说,这可能是个离题的话题,但是作为偶尔编写汇编程序的人,理解CPU如何执行我的代码是很重要的。这是一个硬件问题,但它也与程序员有关,而且它并不宽泛,因为有一个明确的答案。如常见问题解答中所述,本网站是为“关于您所面临的实际问题的问题”而设。请描述该问题。这样,我们就能解决问题。