我已经研究了缓存以及如何有效地利用它几年了。我知道高速缓存的层次结构,如何根据高速缓存行获取高速缓存块,预取器如何检测内存访问模式以及根据它预先获取内存,甚至高速缓存如何在线程上工作以及多线程中的高速缓存陷阱 - 线程程序。
在这段时间之后我从未能找到的是缓存如何在具有多个并发运行进程的计算机上运行。多年来,我意识到我的程序只是与计算机中其他进程一起运行的另一个进程。即使我的程序是唯一运行的程序,仍然会在后台运行操作系统。
话虽如此,缓存如何与多个并发运行的进程一起工作?它们是在每个进程之间共享的,还是在上下文切换时被逐出的一个进程的缓存内存?也许答案是两者的混合?
答案 0 :(得分:1)
有几种情况,我们选一个。在这种情况下,使用物理地址访问缓存。
并行执行的所有多个进程(P1,P2 ... Pn)都在虚拟地址上运行。我们可以让TLB(它保持虚拟到物理转换)在上下文切换上刷新它的条目。所有进程可以具有相同数量的虚拟页面。但是在一定时间内,只有少数人被一个过程所评判。因此,您可以将这些最常用的页面保留在物理内存中,其余页面保留在硬盘中。这适用于当前活动的所有流程。
当进程P1当前正在运行时,当需要从内存中提取数据时,该进程类似于如何进行,就像只有一个进程一样。这里需要注意的一点是,当进程P1发生页面错误时,如果要在物理内存中替换的页面属于另一个进程,则需要更新该进程的页表以反映这一点。
如果检查物理页面的上下文,它可以包含来自多个进程的页面。这个精细的每个进程的页表将知道哪个虚拟页面在哪个物理位置。
答案 1 :(得分:0)
大多数CPU都设计有基于物理地址缓存的缓存,因此在上下文切换后它们仍然可能很热,即使TLB失效需要页面遍历才能找到正确的物理页面虚拟地址。
如果进程迁移到另一个CPU核心,私有L1和L2将会冷,但共享L3仍然会很热。