我目前正在学习线程的同步多线程、多核和多处理器调度。查了一些资料,我的理解是:
如果有支持并发多线程的处理器,它会将一个物理内核变成两个逻辑内核。有两个进程,P1和P2。
<块引用>P1 和 P2 分别调度到两个逻辑核心。他们独立运作。这是第一种情况。如果有一个进程 P3,它由两个线程 t1 和 t2 组成。分别将 t1 和 t2 调度到不同的逻辑核心。那么将两个不同的进程调度到逻辑核上与将同一进程中的不同线程调度到逻辑核上有什么区别呢?
<块引用>我的理解正确吗?
答案 0 :(得分:1)
好吧,没什么区别。内核只是调度任务;每个用户任务都引用一个页表(无论是否与任何其他任务共享)。
每个逻辑 CPU 内核都有自己的页表指针(例如 x86 CR3)。
是的,缓存一致性是由硬件维护的。 Linux 内核的手动原子(使用 volatile
,以及 RMW 和屏障的内联汇编)depend on that。