每当程序进行上下文切换时,TLB 都会发生变化?

每当程序进行上下文切换时,TLB 都会发生变化?

如果每次程序进行上下文切换时都会刷新 TLB,那么当该程序再次运行时,TLB 会去哪里重新加载其表?此外,如果表被刷新,那么如何防止其他程序写入属于该程序的内存?

答案1

它开始时是空的,当访问发生时会重新加载。

TLB 是一种优化,它避免读取较慢的页表信息来定位应用程序内存;特别是,内存访问控制是由页表而不是 TLB 完成的。

清除它的原因有两个:因为如果不清除它,下一个进程的访问可能会转到您进程的内存(与您的假设完全相反!),并且因为它可能被用来窥探您进程的内存和/或活动。

答案2

TLB 从页表重新加载。页表始终具有最新的映射。

和处理器缓存一样,TLB 只是页表内容的副本,因此刷新它不会造成信息丢失。此外,即使刷新了 TLB,一个程序的内存也不会分配给其他程序,因此它们无法写入该程序的内存。

看看我的TLB 调查报告以便更详细地了解该主题。

相关内容