我听说MMU是由MMU维护而不是CPU缓存.
那么一个TLB是否存在于CPU上并且在所有处理器之间共享,或者每个处理器都有自己的TLB缓存?
有谁可以解释MMU和L1,L2缓存之间的关系?
TLB缓存页表中列出的翻译.每个CPU核心都可以在不同的上下文中运行,具有不同的页表.这就是你所谓的MMU,如果它是一个单独的"单元",那么每个核心都有自己的MMU.任何共享缓存始终都是物理索引/物理标记的,因此它们会根据MMU后的物理地址进行缓存.
TLB是一个缓存,所以从技术上讲,它只是一个实现细节,可能因微体系结构而不同(在x86 架构的不同实现之间).
在实践中,真正变化的只是尺寸.现在,2级TLB很常见,可以将TLB全部未命中保持在最低限度,但仍然足够快,每个时钟周期允许3次转换.TLB的主要目标是快速,不一定大,因此核心之间的共享TLB将没有用.ESP.考虑到确保使用它的所有核心都运行共享相同页表的线程的开销.
即使所有内核都在同一进程中运行线程,某些线程也可能处于内核模式,处理中断或系统调用,从而使用内核的页表.这使得共享跨核TLB的价值非常低/难以实现.
有关这些部件如何在真实CPU中组合在一起的示例,请参阅David Kanter撰写的英特尔Sandybridge设计.请注意,这些图表适用于单个SnB核心.大多数CPU中唯一的共享核心内部缓存是最后一级缓存.英特尔的SnB系列设计都在环形总线上使用2MiB每核模块化L3缓存.因此,添加更多内核会为总池增加更多L3,以及添加新内核(每个内核都有自己的L2/L1D/L1I/uop-cache和两级TLB.)