我研究缓存以及如何有效地利用它已经有几年了。我了解缓存的层次结构,如何根据缓存行获取缓存 block ,预取器如何检测内存访问模式并根据它提前获取内存,甚至缓存如何在线程上工作以及多线程缓存的陷阱-线程程序。
经过这么长时间,我一直无法弄清楚缓存是如何在具有多个并发运行进程的计算机上工作的。多年来,我意识到我的程序只是与计算机中其他进程一起运行的另一个进程。即使我的程序是唯一正在运行的程序,仍然会有操作系统在后台运行。
话虽如此,缓存如何与同时运行的多个进程一起工作?它们是否在每个进程之间共享,或者一个进程的缓存内存是否在上下文切换时被逐出?也许答案是两者的混合?
最佳答案
大多数 CPU 都设计有基于物理地址进行缓存的缓存,因此即使 TLB 失效需要页面遍历来找到正确的物理页面,它们在上下文切换后仍然可能很热。虚拟地址。
如果一个进程迁移到另一个CPU核心,私有(private)L1和L2将是冷的,但共享L3仍然是热的。
关于caching - L1、L2 和 L3 缓存如何与多个并发运行的进程配合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49268614/