有人知道 TLB(L1 和 L2)是否支持在现代 x86_64 微处理器(Intel SandyBridge、AMD Bulldozer)中同时访问多个页面大小? x86 核心管道是否向 MMU 提供有关页面大小的信息?
最好的问候,
亚历克斯
最佳答案
这不是 TLB 允许什么的问题,而是架构允许什么的问题。该架构表明,您可以在同一页面层次结构中混合小 (4k)、大 (2M) 和大 (1G) 页面,方法是在适当级别的页面目录条目中设置 PS
位。
并非所有级别的 TLB 都必须能够缓存各种大小的页面,但这不应该阻止您混合页面。
现在,在 MMU 之前的 x86 管道中没有任何东西实际上需要有关页面大小的数据。这都是在页面层次结构本身中编码的。
关于页面拆分,如果您在地址 x
处有一个页面边界,并且您有一个从 x - 1
开始的大于 1 字节宽的内存访问,它将访问两个页面。即使两个页面的大小不同,这也可以工作。
关于x86 - x86_64 架构中多页大小的 TLB 使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13398178/