代码之家  ›  专栏  ›  技术社区  ›  Zachariah the Magnificent

一级、二级和三级缓存如何处理多个并发运行的进程?

  •  1
  • Zachariah the Magnificent  · 技术社区  · 6 年前

    几年来,我一直在研究缓存以及如何有效利用它。我知道缓存的层次结构,如何根据缓存线提取缓存块,预取器如何检测内存访问模式并根据它提前提取内存,甚至知道缓存如何在线程上工作,以及多线程程序中缓存的陷阱。

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

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   Isuru H    6 年前

    有几个场景,让我们选择一个。在此场景中,使用物理地址访问缓存。

    所有并行执行的多个进程(P1、P2…Pn)都在虚拟地址上运行。我们可以让TLB(保存虚拟到物理转换)在上下文切换上刷新其条目。所有进程都可以具有相同数量的虚拟页。但在给定的时间内,只有少数人通过一个过程进行裁判。因此,您可以将这些最常用的页面保存在物理内存中,其余页面保存在硬盘中。这适用于当前处于活动状态的所有进程。

    当进程P1当前正在运行时,当需要从内存中提取数据时,该进程类似于仅存在一个进程时的处理方式。这里需要注意的一点是,当进程P1发生页面错误时,如果要在物理内存中替换的页面属于另一个进程,则需要更新该进程的页面表以反映这一点。

    如果检查物理页面的上下文,它可以包含来自多个进程的页面。这样每个进程的页面表就可以知道虚拟页面位于哪个物理位置。

        2
  •  0
  •   Peter Cordes    6 年前

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

    如果进程迁移到另一个CPU核心,则专用L1和L2将是冷的,但共享L3仍将是热的。