能否有人解释一下TLB(翻译为“翻译后备缓存”)未命中和高速缓存未命中的区别呢?
我认为我已经知道TLB是指某种虚拟内存地址,但我不是很清楚这实际上是什么意思?
我了解到当一个内存块(与高速缓存线大小相同)被加载到(L3?)高速缓存中,并且如果所需地址不在当前高速缓存行内时,会发生缓存未命中。
能否有人解释一下TLB(翻译为“翻译后备缓存”)未命中和高速缓存未命中的区别呢?
我认为我已经知道TLB是指某种虚拟内存地址,但我不是很清楚这实际上是什么意思?
我了解到当一个内存块(与高速缓存线大小相同)被加载到(L3?)高速缓存中,并且如果所需地址不在当前高速缓存行内时,会发生缓存未命中。
现代操作系统都使用虚拟内存,CPU 生成的所有地址都是虚拟地址。有页表将这样的虚拟地址映射到物理地址。而 TLB 只是页表项的缓存。
另一方面,L1、L2、L3 缓存会缓存主存储器中的内容。
当 CPU 请求一个虚拟地址时,如果它在 TLB 中没有找到其对应的 虚拟内存地址 => 物理内存地址
映射,则会发生 TLB 缺失。此时必须将该页表项从页表中获取并装入 TLB。
当 CPU 需要的数据不在缓存中时,就会发生缓存未命中。数据随后将在主内存(RAM)中寻找。如果在 RAM 中也没有找到该数据,则必须从辅助存储器(硬盘)中获取。
分配页面帧,从磁盘读取页面,更新PTE,将PTE加载到iTLB中,重新启动提取 •现在您有了物理地址
访问Icache:未命中
链接 https://software.intel.com/en-us/articles/recap-virtual-memory-and-cache
由于两个过程的“如何”都已经提到。就性能而言,缓存未命中并不一定会使CPU停顿。可以使用算法预取技术容忍少量的缓存未命中。然而,TLB未命中会导致CPU停顿,直到TLB已更新为新地址。换句话说,预取可以掩盖缓存未命中,但无法掩盖TLB未命中。