不,有很多不同的原因。主要是在同一进程的两个线程之间切换上下文,以及在不同进程的两个线程之间切换上下文意味着地址空间的变化。更改地址空间对于缓存和内存来说始终是一项代价高昂的操作。在 x86 上,您需要重新加载页面目录,在 PowperPC 上,您需要使TLB无效并重新加载,...
从线程到内核时,更改地址空间不是强制性的。只是为了保持不变,我认为 Linux 总是加载内核地址空间(使用 PAE 工具并使用内核地址空间锁定 4 条目 PDBR 的条目,从 AS 上半部分开始,在 0xc0000000)。