caching - L1、L2 和 L3 缓存如何与多个并发运行的进程配合使用?

标签 caching multiprocessing cpu cpu-architecture cpu-cache

我研究缓存以及如何有效地利用它已经有几年了。我了解缓存的层次结构,如何根据缓存行获取缓存 block ,预取器如何检测内存访问模式并根据它提前获取内存,甚至缓存如何在线程上工作以及多线程缓存的陷阱-线程程序。

经过这么长时间,我一直无法弄清楚缓存是如何在具有多个并发运行进程的计算机上工作的。多年来,我意识到我的程序只是与计算机中其他进程一起运行的另一个进程。即使我的程序是唯一正在运行的程序,仍然会有操作系统在后台运行。

话虽如此,缓存如何与同时运行的多个进程一起工作?它们是否在每个进程之间共享,或者一个进程的缓存内存是否在上下文切换时被逐出?也许答案是两者的混合?

最佳答案

大多数 CPU 都设计有基于物理地址进行缓存的缓存,因此即使 TLB 失效需要页面遍历来找到正确的物理页面,它们在上下文切换后仍然可能很热。虚拟地址。

如果一个进程迁移到另一个CPU核心,私有(private)L1和L2将是冷的,但共享L3仍然是热的。

关于caching - L1、L2 和 L3 缓存如何与多个并发运行的进程配合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49268614/

相关文章:

c# - 此 C# 代码是否会因为寄存器或缓存中的值永远不会写回主内存而失败?

html - 我的 CSS 没有改变,为什么?

java - 读取 system.in 时 Runtime.exec 永远不会返回

python - multiprocessing.Pool 在 Linux/Python2.7 上的 terminate() 之后生成新的子进程?

java - 并行流 Java 8 的 CPU 核心数

assembly - CPU如何向IO口写入数据?

asp.net - 获取Asp.net/iis以设置静态文件的Cache-control:max-age

python - 主循环旁边的多处理

cpu - 上下文切换线程等待

.net - 跨负载平衡服务器 (ASP.Net) 的选择性缓存清除