【发布时间】:2018-04-17 09:18:47
【问题描述】:
当我们的 CPU 支持某种形式的多线程时,每个逻辑 CPU 都有自己的一组寄存器(至少),包括一个 CR3 寄存器。
由于我们在执行不同线程时处理同一进程的虚拟地址空间,并且从未发生上下文切换(切换同一进程的线程时 TLB 缓存都不会失效),为什么我们需要一个 CR3 寄存器来指向逻辑CPU中的页表和页目录?
这个值不总是和物理CPU的CR3里的值一样吗?
【问题讨论】:
-
处理器不只是执行来自一个进程的代码。操作系统调度线程。
-
@HansPassant 那么他们之间的TLB是如何共享的呢?为什么它没有失效?
-
不共享,每个核心都有自己的TLB。
-
那么当来自不同进程的两个线程同时运行时,内存转换是如何发生的呢?
-
它们只有在不同内核上运行时才能真正同时运行。每个核心都有自己的 CR3 和自己的 TLB,没什么特别的。
标签: multithreading x86 cpu