是否有兼容AMD64的CPU不支持2M页?

问题描述:

回顾我的裸机代码,在通过多引导符合加载程序加载后切换到长模式我意识到一些CPU不支持1G页,所以我不能简单地使用PML4表+ 1 PDP表条目来映射1:1 1G页。我可以确定使用PML4 + PDP表+ 1个PD条目来映射1:1首2M页的代码是否适用于每个AMD64兼容CPU?是否有兼容AMD64的CPU不支持2M页?

换句话说,所有AMD64 CPU都支持2-M页吗?谢谢。

是的。

长模式需要(或者说,是PAE的扩展),因此它可以映射64位物理地址,并且PAE始终支持PS位来短路翻译以生成2MiB页面。 (正如你注意到的,英特尔CPU不支持这种短路来生成1GiB页。)

您可能正在考虑PSE,在https://en.wikipedia.org/wiki/Page_Size_Extension中描述,您可以看到可以追溯到奔腾,尽管有些中基于奔腾时代设计的-2000s嵌入式CPU也缺乏PSE支持。这些CPU都不支持x86-64扩展。

有引经据典的没有简单的引用,但在卷3A整个第4章英特尔®64和IA-32架构软件开发人员手册涵盖寻呼和全部深度各种标志。 AMD有类似的参考资料,但在这里可以被认为是Intel的超集(例如1GiB页面支持)。

假设的不正确的CPU可以提供长模式,但不提供PSE,但缺乏PSE只会影响32位页表中PS位的解释,这仅仅意味着不能在32位创建4MiB页bit模式,但可以在长时间模式下创建2MiB页面。

CPUID Fn0000_0001_EDX位3(页面大小扩展名)指示支持2 MB页面。看起来AMD64兼容的CPU可能不支持这个,因为这种检查存在。

实际上发现在长模式下自动支持2 MB页面。 PSE仅支持32位模式下的4 MB页面支持。从AMD64 Architecture Programmer’s Manual Volume 2

页面大小扩展(PSE)。页模式扩展名(CR4.PSE)在长模式下被忽略为 。长模式不支持按页面大小的扩展名启用的4 MB页面大小 。不过,长模式支持4 KB和2 MB页面大小。

+1

PSE位表示支持32位模式下的4MB页面,它与64位模式下的2MB页面无关(始终支持)。 – harold 2014-12-19 12:28:06

+1

@harold确定吗?根据我的理解,PSE适用于32位模式下的4 MB页面和64位模式下的2 MB页面。 – 2014-12-19 12:31:12

+1

我确定。我现在仔细阅读手册以找到需要引用的内容,但到目前为止它仅存在“通过省略”(例如,您必须检查1GB页面支持,它没有提供任何关于2MB页面支持的内容)编辑:其他指示,您不必触摸CR4.PSE即可使用2MB页面。迄今为止最好的; “如果CPUID.01H:EDX.PSE [bit 3] = 1,则可以将CR4.PSE设置为1,从而支持使用32位分页的4 MB页面(请参阅第4.3节)。” – harold 2014-12-19 12:38:44