如何在多核处理器上完成线程的上下文切换?

时间:2010-10-12 13:55:29

标签: multithreading multicore context-switching

在单核处理器上进行上下文切换时,负责的代码在唯一负责切换线程的CPU上执行。

但是当我们有多个CPU时,这是怎么做到的?是否有主CPU执行所有从CPU的所有上下文切换?每个CPU是否负责自己的上下文切换?如果是这样,切换如何同步,以便两个CPU不执行相同的线程?或者是否有其他机制?

3 个答案:

答案 0 :(得分:6)

内核是多线程的。它可以在任何核心上执行。当一个核心需要交换线程时,它会调用负责选择它应该执行的下一个线程的内核部分。

内核是多线程的;也就是说,它被编写为在多个内核上同时安全执行。因此,只有一个CPU最终运行任何给定的线程,因为代码的构造使得如果多个CPU同时重新调度,则会产生正确的结果。

答案 1 :(得分:4)

CPU不进行上下文切换。操作系统。

本质上,OS通过在CPU核心中加载新的上下文(寄存器,内存映射等)来执行上下文切换。线程是一种OS结构,可以保存这些上下文。因此,操作系统还负责选择一个非运行线程来加载CPU上下文。

如果操作系统选择正在运行的线程,则两个内核将尝试运行相同的线程。这必然会引起混淆,因为它们共享相同的内存,并且单个线程不会期望与自身并行运行(!)所以没有操作系统可以做这样的事情。

答案 2 :(得分:0)

假设我们有两个过程P1和P2大致的步骤顺序应该像这样。

The current registers are stored into the process structure for P1.
The stored register values from the process structure for P2 are loaded into the CPU's registers.
CPU returns the User mode
P1 is context switched out and P2 is context switched in and running

注意,仅CPU将intterupts发送到OS以执行Context Switch。