multithreading - 多核系统 UMA NUMA 的进程地址空间

标签 multithreading multicore virtual-memory numa smp

当涉及多核处理器架构时,我对进程地址空间的概念有疑问,因为两个处理器共享一个公共(public)物理地址空间(我猜这就是他们所说的 UMA)。

所以,如果一个 32 位处理器可以访问 4GB 的地址范围,并且任何 32 位进程在其执行期间拥有这个空间,那么如何在两个内核上运行两个不同的进程......因为我认为两个处理器都有共同点处理器地址空间。将处理器地址空间拆分为进程数。在线程的情况下,单个线程可以在单个处理器上运行,因为它们位于相同的地址空间中,但是在多个进程的情况下呢。

NUMA 会是什么情况。

最佳答案

UMA(“统一内存访问”)和 NUMA(“非统一内存访问”)是指不同内核的内存性能。使用 UMA,内存不同部分的性能是相同的(即“统一”),而使用 NUMA,不同的内核具有不同的内存区域的性能特征。

这与地址空间问题无关。

在 CPU 中有两个重要的地址空间:物理地址空间和虚拟地址空间。操作系统为每个进程创建一个虚拟地址空间,它映射到物理地址空间的不同部分。因此,具有 4GB 物理内存的 CPU 可能具有多个具有 32 位地址空间的进程,但在同一虚拟地址上为每个进程映射了不同位的物理内存。例如,地址 0x00400000 可能在两个进程中都有效,但映射到完全不同的底层物理内存地址。这些进程也可能共享内存,例如加载在相同地址的操作系统页面和共享库可能由相同的物理内存支持。

在没有虚拟地址空间的较小系统中,您的假设是正确的:所有软件共享相同的地址空间。

关于multithreading - 多核系统 UMA NUMA 的进程地址空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27737432/

相关文章:

java - 关闭所有本地 Realm 实例

c++ - 在多线程中使用 libev

linux - Linux 上的虚拟内存

c - 直接访问进程内存

c - 从/proc/<pid>/pagemap 转储 pfn 未提供预期的内容

php - 并行执行而不是 foreach

mysql - 如何防止 findByName 方法的并发请求?

java - 线程安全简单

c# - 在多核机器上绘图

java - 用非函数式语言编写函数式程序