当页面换出到磁盘时,页面的缓存行会发生什么变化?

What happens to the cache-lines for a page when the page is swapped out to the disk?

当一个页面被换出到磁盘时,它的一些内容可能会出现在缓存中(我相信这将是一种非常罕见的情况,因为如果长时间不访问该页面,很可能包含其内容的缓存行也将在那时被驱逐。)当页面被换出时这些缓存行会发生什么。他们需要立即失效吗?线路是脏的还是干净的会有什么区别吗?谁控制此过程,OS 或硬件或两者?

为了解释为什么需要注意这一点,我们假设有进程 A 和 B,并且 A 正在访问起始物理地址 X 处的物理页面 P1。P1 的某些内容必须缓存在不同级别的缓存。现在页面 P1 被换出,进程 B 的页面 P2 在相同的地址 X 处被引入。因此,如果属于页面 P1 的缓存行没有失效,那么进程 B 可能会命中那些最初属于的行的缓存页面 P1 的进程 A(因为物理标签会匹配)。

这个场景是否有效?缓存是 VIPT 还是 PIPT 有什么区别吗?

如果你能引用现代OS/Processor的处理方式就好了。

如果 DMA(在 I/O 设备和内存之间复制数据以进行大型传输的首选方法)是缓存一致的(即 DMA 代理检查缓存),则硬件将确保任何脏缓存行将在分页时读取并且任何旧的缓存行都将失效(或被覆盖 - 某些系统支持 I/O 设备存储到缓存)。对于非一致性 DMA,OS 必须将页面刷新到内存中。

DMA 是否一致取决于 ISA 和实现。例如,this blog post 提到 x86 保证一致性,但 Itanium 和 ARM 不保证。 (请注意,ISA 的实现可以提供更强的保证。)

缓存是否被虚拟索引不会影响所需的操作,因为 OS 将根据虚拟地址刷新并且别名问题已经在硬件或软件中处理(例如,通过页面着色)。