关于CPU调度或中断,CPU是否将完成其当前指令的执行?

Eri*_*c Z 5 multithreading operating-system

众所周知,C ++中的一种高级语言指令(例如“ counter ++”)将被翻译成若干汇编语言指令。

我的问题是单个汇编语言指令呢?某些汇编语言指令也将被翻译成硬件可以直接读取的几条机器指令,这是真的吗?

如果为正,则在发生线程/进程调度时,是否确实在CPU完成执行其当前机器指令后立即进行上下文切换(或在调度过程中需要完成其他工作),即使还有几条指令形成一条汇编语言指令与当前指令一起?

例如,一个汇编语言指令A可以被翻译成机器指令a1,a2,a3。可以在a2,a3之间进行上下文切换吗?

单个汇编语言指令A的相应机器指令:

a1(已执行)a2(正在执行..)<---即将发生下一个上下文切换a3(尚未执行)<---我能够在下一个上下文切换之前执行吗?

我的猜测是a3将不会执行,因为硬件仅知道其机器指令并且不知道汇编语言。因此,每条指令是分开执行的。我对吗?

Jer*_*fin 3

实际上,在相当多的机器上,counter++将转换为单个指令(例如,inc counter)。

汇编语言的定义几乎就是,您所编写的内容只是实际机器代码的助记符,因此一条汇编指令将转换为一条机器指令。

某些 CPU (x86) 是微编码的,因此您作为单个指令输入的内容实际上是作为一系列微操作执行的。从指令到微操作的精确映射通常没有记录(例如,英特尔在 Pentium Pro/Pentium II 时间范围内做过,但大多数情况下不再这样做)。

中断有两种类型。大多数只会在当前机器指令执行完成后才会执行。然而,有一些可以在执行单个指令期间中断。一个典型的例子是尝试访问不存在的内存页面。如果这样做,机器将中断当前指令,并跳转到异常处理程序。异常处理程序通常会分页该地址的数据。当它返回时,该地址的数据就出现了。指令重新启动,并且可以成功执行。