Jon*_*ark 5 x86 cpu-architecture hyperthreading tlb mmu
据我所知,英特尔x86_64的超线程内核中没有共享MMU和TLB。
但是,如果两个不共享地址空间的线程被调度到同一物理核心,它们如何运行?
我认为,在那种情况下,线程没有任何机会达到TLB,因为线程具有自己的地址空间。
如果那样的话,我认为这种表现将被降级。
TLB在英特尔处理器中的组织方式如下:
参考文献:
(我不清楚在任何英特尔凌动微体系结构中TLB的组织方式。我认为L2 DTLB是共享的,L1 DTLB是复制的。我不了解ITLB。)
(顺便说一下,在较旧的AMD处理器中,所有TLB都是按每个内核复制的。请参阅:不同cpu AMD / Intel上的物理内核和逻辑内核。)
共享TLB时,将为每个TLB条目分配一个分配给它的逻辑处理器ID(单个位值,该值不同于进程上下文标识符,该进程上下文标识符可以禁用或不支持)。如果安排另一个线程在逻辑内核上运行,并且该线程访问的虚拟地址空间与前一个线程不同,则OS必须将第一级页面结构的相应基本物理地址加载到CR3中。每当写入CR3时,内核都会自动刷新所有共享TLB中标记有逻辑内核ID的所有条目。还有其他操作可能触发此刷新。
分区和复制的TLB不需要使用逻辑核心ID进行标记。
如果支持并启用了进程上下文标识符(PCID),则不会使用逻辑核心ID,因为PCID更强大。请注意,分区和复制的TLB用PCID标记。
(请注意,还有其他分页结构缓存,它们的组织方式类似。)
(请注意,通常TLB被认为是MMU的一部分。关于MMU的Wikipedia 文章显示了一个旧版本的书中的图,表示它们是分开的。但是,该书的最新版本已删除了该图。并说TLB是MMU的一部分。)