Multithreading 处理器如何处理中断时的指令 如果在长指令的中间,CPU会中断,会发生什么?CPU是执行整个指令还是只执行部分指令?

Multithreading 处理器如何处理中断时的指令 如果在长指令的中间,CPU会中断,会发生什么?CPU是执行整个指令还是只执行部分指令?,multithreading,x86,instructions,Multithreading,X86,Instructions,据我所知,这取决于处理器和指令。更具体地说,它取决于处理器是否以及何时对挂起的中断进行采样。如果处理器只在完成当前指令后寻找未决中断,那么显然没有中断中间指令。但是,如果正在执行一条长指令,则在指令执行过程中多次采样中断可能是有益的(以延迟为准)。这有一个缺点——在这种情况下,您必须恢复由于指令部分执行而对寄存器和标志所做的所有更改,因为在中断完成后,您必须返回并重新发出该指令 (来源:Wikipedia,)从程序员的角度来看,要么某条特定指令失效,其所有副作用都会转移到寄存器/内存中,要么就没

据我所知,这取决于处理器和指令。更具体地说,它取决于处理器是否以及何时对挂起的中断进行采样。如果处理器只在完成当前指令后寻找未决中断,那么显然没有中断中间指令。但是,如果正在执行一条长指令,则在指令执行过程中多次采样中断可能是有益的(以延迟为准)。这有一个缺点——在这种情况下,您必须恢复由于指令部分执行而对寄存器和标志所做的所有更改,因为在中断完成后,您必须返回并重新发出该指令


(来源:Wikipedia,)

从程序员的角度来看,要么某条特定指令失效,其所有副作用都会转移到寄存器/内存中,要么就没有(就好像该指令根本没有执行一样)。整个指令失效点是为了保证在外部事件(如中断)发生时,程序状态的一致性

这就是为什么指令会按顺序失效,因此外部观察者仍然可以查看CPU的体系结构状态,就好像它在按顺序执行指令一样

但也有例外,特别是REP string指令类


我相信这就是你所问的,但如果不是,那么让我问你:你如何观察到指令是从任何地方“部分”执行的

你说的“长指令”是什么意思?所有CPU指令都是原子指令,它们占用尽可能小的时间单位(从处理器的角度)。还是我在课堂上错过了什么?:)@雅各布:那么现代超标量处理器呢,在任何给定的时钟周期中,都可能有超过100条指令在“飞行”中?是否所有这些指令都需要在中断服务之前完成?@Jakob:根据英特尔手册,不同的指令需要不同的时间(周期)