9

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

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

4

3 回答 3

6

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

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

于 2010-10-20T12:05:15.213 回答
5

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

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

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

于 2010-10-12T14:14:01.807 回答
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 仅将中断发送到 OS 以执行上下文切换。

于 2013-09-01T18:52:46.813 回答