CPU 如何知道它需要开始执行新线程的上下文?

问题描述

如果您假设一个线程正在 cpu 上执行并且随之而来的中断是可编程定时器中断。所以我的理解是 cpu 停止它对当前正在执行的线程所做的事情,现在开始执行与中断相关的中断服务例程。现在,一旦 ISR 完成其代码的执行,调度程序就会加载将在 cpu 上执行的下一个(最高优先级)线程的上下文。现在在这两种情况下,cpu 都必须再次开始执行 ISR 和下一个线程。所以我的问题是什么机制或 cpu 指令告诉 cpu 在每个 ISR 和下一个最高优先级线程的新指令地址处再次开始执行?如果我的理解不正确,请有人按要求进行更正吗?谢谢。

解决方法

现在在这两种情况下,CPU 必须再次开始执行,ISR 和 下一个线程。所以我的问题是什么机制或 CPU 指令告诉 CPU 在新的指令地址重新开始执行 每个 ISR 和下一个最高优先级的线程?

CPU 永远不会停止执行代码。它不知道也不关心操作系统线程是什么。如果它正在用户模式应用程序中执行代码并且发生中断,它将从用户模式切换到内核模式,在堆栈中保存有关中断的一些信息,并执行适当的中断处理程序,由操作系统设置。中断处理程序负责处理中断并从中断处恢复执行。从中断返回是通过特殊指令完成的:IRETIRETDIRETQ(假设是 x86 CPU)。在这段时间里,CPU 一直在执行代码并且它永远不会停止(假设没有执行 HLT 指令)。如果操作系统调度程序决定另一个线程必须运行,它会进行必要的更改,以便另一个操作系统线程可以运行,但 CPU 对调度程序所做的事情一无所知。

由于您使用 Windows 对此进行了标记,this 博文可能会提供一些额外信息。有关一般详细信息,您可以随时查看 osdev