繁体   English   中英

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

[英]How does the CPU know that it needs to start executing the context of a new thread?

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM