一个进程中的不同线程运行在多核处理器的不同物理内核上是否需要分配上下文?

问题描述

进程是分配资源的最小单位。线程是最小的调度单位。

这是否意味着一个进程至少包含一个线程?是个 当线程中只有一个线程时,线程等于进程 过程?

今天的许多处理器都是多核的。加入我有一个进程P。这个进程P中有两个线程,A和B。我想让A和B分别运行在一个cpu的0核和1核上。

但是我们知道进程需要分配资源。该过程具有上下文。上下文通常存储在寄存器中吗?如果是这样,不同的物理内核使用不同的物理寄存器。然后当线程 A 和线程 B 分别在 Core 0 和 Core 1 上运行时。

那么这两个核心需要分配资源吗?在这种情况下,这两个线程如何保持一致性?每个线程都有自己的资源,那么这不就变成了两个进程了吗?这是否意味着运行在不同内核上的进程中的不同线程与运行在不同内核上的不同进程相同?

解决方法

SMP 系统中的绝大多数资源(寄存器和处理能力除外)在所有内核之间共享。这包括内存。因此操作系统可以在不同的内核上调度多个线程,但都指向内存中的一组共享进程资源。

CPU 缓存由内核处理,使用缓存一致性协议。只要线程遵循内存模型并正确使用内存屏障/原子指令,通过缓存可见的内存应该对所有内核都是相同的。