根据缓存内存将虚拟地址转换为物理地址

Virtual Address to Physical address translation in the light of the cache memory

我确实了解如何将虚拟地址转换为物理地址以访问主内存。我也了解高速缓存的工作原理。

但我的问题是将这两个概念放在一起并理解进程如何访问内存以及如果缓存未命中会发生什么的大局。所以我有这张图可以帮助我提出以下问题:

click to see the image ( assume one-level cache)

1- 进程是否使用与表示字节在主内存中的位置完全相同的物理地址访问缓存?

2- TLB 实际上是在第一级缓存中,还是 CPU 芯片内专用于翻译目的的单独内存?

3- 当缓存未命中时,我需要获取整个块并在缓存中分配,但主内存以帧(页)而不是块的形式组织。那么进程页面是否会自行划分为缓存块,以便在未命中时将其带到缓存中?

4- 假设存在 TLB 未命中,这是否意味着我需要一直到主内存并在那里进行页面遍历,或者页面遍历是否发生在缓存中?

5- TLB 未命中是否保证会有缓存未命中?

6- 如果您有任何读物 material 可以解释我试图理解的大局,我将非常感谢与我分享。

谢谢,请随时回答我提出的任何问题

  1. 是的。缓存不是可以单独寻址的内存。缓存映射会将物理地址转换为缓存地址,但这种映射通常不是进程控制的。对于某些 CPU 架构,它完全由硬件控制(例如 Intel x86)。对于其他人,操作系统应该对映射进行编程。

  2. 你给出的图表中的TLB用于虚拟地址到物理地址的映射。它可能不适用于缓存。同样,在某些架构上,TLB 是编程的,而在其他架构上,它由硬件控制。

  3. 页面大小和缓存行大小不必相同,因为一个与虚拟内存有关,另一个与物理内存有关。当进程访问虚拟地址时,考虑到页面大小,该地址将使用 TLB 转换为物理地址。一旦完成,页面的大小就无关紧要了。访问是针对物理地址上的 byte/word。如果这导致发生缓存未命中,那么将读取的缓存块的大小将是覆盖正在访问的物理内存地址的缓存块。

  4. TLB 未命中将需要通过读取其他内存进行页面转换。这个过程可能发生在某些 CPU(例如 Intel x86/x64)的硬件中,或者需要在软件中处理。页面翻译完成后,TLB 将重新加载页面翻译。

  5. TLB 未命中并不意味着缓存未命中。 TLB 未命中仅意味着虚拟地址到物理地址的映射未知,需要进行页面地址转换。缓存未命中意味着无法快速提供物理内存内容。

回顾一下:

  • TLB就是将虚拟地址快速转换成物理地址。它的存在是为了快速缓存虚拟到物理内存的映射。它与物理内存内容没有任何关系。
  • 缓存是为了更快地访问内存。它只是为了更快地提供物理内存的内容。

请记住,缓存一词可用于多种用途(例如,在描述 TLB 时请注意缓存的用法)。 TLB 更具体一些,通常意味着虚拟内存转换,尽管这不是通用的。例如,一些 DMA 控制器也有 TLB,但 TLB 不一定用于将虚拟地址转换为物理地址,而是将块地址转换为物理地址。