现代计算机有很多内存。 每个 CPU 都有自己的缓存,每个正在运行的程序都被分配了它的一部分系统 RAM。 有许多不同的方式可以使用和分配此内存。 共享内存是一个以不同方式影响 CPU 缓存和系统 RAM 使用的概念。
硬件中的共享内存
大多数现代 CPU 都具有三个缓存层,分别称为 L1、L2 和 L3。 L1 是最小和最快的缓存,而 L3 是最大和最慢的。 但是,它们都比访问主内存更快,这使得命中率对性能至关重要。 许多因素使 L1 缓存比 L3 更快。 首先,L1 存储单元在物理上更大。 它们的数量也更少,而且它们的位置更靠近 CPU 核心,通常在其中。
在多核 CPU 上,将缓存块放置在内核的管芯区域内会带来额外的复杂性。 此时,您可以选择在每个内核中或内核外部(特别是在它们之间)拥有一个缓存。 每个都有其优点和缺点。
在核心中放置缓存可最大限度地减少访问延迟,但这也意味着每个核心都需要其缓存。 这意味着您最终可能会在不同内核的 L1 缓存中出现重复的缓存行,从而降低缓存空间效率。 这称为本地缓存,虽然它对访问时间非常有用,但它在缓存空间使用方面的效率较低,并且在缓存一致性方面需要额外的开销。
共享缓存是可用于多核 CPU 中的多个或所有内核的缓存。 共享缓存意味着多个内核可以访问特定数据的一个实例,从而限制由于重复造成的空间浪费。 这也意味着如果需要,一个核心可以临时申请超过其公平份额的缓存空间,而其他核心则不需要。 它确实是以增加访问时间为代价的。
共享缓存实践
现代 CPU 使用这两种概念,每个内核都有一个本地 L1 缓存。 L3 缓存往往在许多内核之间共享,但有时并非全部。 L2 各不相同,但可以是本地的或共享的,具体取决于特定的 CPU 生成架构。
小费: 对于像高端 AMD Ryzen 型号这样的小芯片 CPU,缓存可能在小芯片上的所有内核之间共享,而不是与整个 CPU 中的所有内核共享。 缓存在多少个内核之间共享并不重要; 即使它只有两个,它仍然是一个共享缓存,尽管值得强调的是它只是部分共享。
笔记: 系统 RAM 也可以在单个主板上的多个物理 CPU 之间或多 CPU 系统中的节点之间共享。
软件中的共享内存
在现代计算机中,软件无法直接寻址物理内存。 相反,它被分配了一个虚拟地址段,计算机根据需要将这些虚拟地址转换为物理地址。 这有助于为各个进程隔离内存,这有助于提高安全性。
在某些情况下,可能需要将内存中的数据从一个进程传输到另一个进程。 最有效的方法是让两个进程共享内存空间。 这样,两个进程就可以读取相同的数据并相互通信。 这也有助于有效地使用系统 RAM,因为数据不会重复。
软件共享内存通常通过保留数据的一个物理副本并通过虚拟内存为需要访问它的每个进程映射对其的访问来实现。
结论
共享内存是让多个事物访问一段内存的概念。 这可以在硬件和软件中实现。 CPU 高速缓存可以在多个处理器内核之间共享。 对于更高层的 CPU 缓存尤其如此。 系统内存也可以在单个较大系统中的各种物理 CPU 之间共享。
在软件中,共享内存可以允许IPC进程间通信。 一个进程将内存分配为与一个或多个特定进程共享。 然后那些其他进程可以通过虚拟内存映射访问该内存位置。 共享内存通过避免有限空间内的数据重复,有助于确保内存空间的高效使用。