首页 文章

根据高速缓冲存储器的虚拟地址到物理地址转换

提问于
浏览
1

我确实理解如何将虚拟地址转换为物理地址以访问主存储器 . 我也理解缓存内存是如何工作的 .

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

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

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

2- TLB实际上是在第一级Cache还是CPU芯片内部专用于转换目的的独立内存?

3-当存在高速缓存未命中时,我需要获得整个块并在高速缓存中分配,但主存储器以帧(页)组织而不是块 . 那么,进程页面是否被划分为缓存块,以便在未命中时可以进入缓存?

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

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

6-如果你有任何阅读材料可以解释我想要理解的大局,我真的很感激与我分享 .

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

1 回答

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

    • 您提供的图中的TLB用于虚拟到物理地址映射 . 它可能不适用于缓存 . 再次在某些架构上,TLB被编程,而在其他架构上,它由硬件控制 .

    • 页面大小和高速缓存行大小不必与虚拟内存相关,另一个与物理内存相关 . 当进程访问虚拟地址时,该地址将使用TLB考虑页面大小转换为物理地址 . 完成后,页面大小无关紧要 . 访问是针对物理地址的字节/字 . 如果这导致发生高速缓存未命中,则将被读取的高速缓存块将具有覆盖正被访问的物理存储器地址的高速缓存块的大小 .

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

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

    回顾一下:

    • TLB是将虚拟地址快速转换为物理地址 . 存在以快速缓存虚拟到物理存储器映射 . 它与物理内存内容无关 .

    • 缓存是为了更快地访问内存 . 只有那里才能更快地提供物理内存的内容 .

    请记住,术语缓存可用于许多目的(例如,在描述TLB时请注意缓存的使用) . TLB更具体,通常意味着虚拟内存转换虽然不是通用的 . 例如,一些DMA控制器也具有TLB,但TLB不一定用于将虚拟地址转换为物理地址,而是将块地址转换为物理地址 .

相关问题