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

时间:2014-12-19 11:02:54

标签: x86-64 systems-programming

查看我的裸机代码,在通过多引导兼容的加载程序加载后切换到长模式我意识到有些CPU不支持1G页面所以我不能简单地使用PML4表+ 1 PDP表项来映射1:1第1G页。我可以确定使用PML4 + PDP表+ 1 PD条目来映射1:1前2M页面的代码可以在每个符合AMD64标准的CPU上运行吗?

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

2 个答案:

答案 0 :(得分:2)

长模式需要(或者更确切地说,是PAE的扩展),因此它可以映射64位物理地址,并且PAE始终支持PS位进行短路转换以生成2MiB页面。 (如您所知,Intel CPU不支持此短路以生成1GiB页面。)

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

没有简单的章节和经文引用,但Intel®64和IA-32架构软件开发人员手册第3A卷第4章的全部内容涵盖了分页和所有各种标志的深度。 AMD也有类似的参考,但在这里可以被视为英特尔的超集(例如,支持1GiB页面)。

假设的反向CPU可以提供长模式而不是PSE,但缺少PSE只会影响32位页表中PS位的解释,这仅仅意味着无法在32位中创建4MiB页面模式,但可以在长模式下创建2MiB页面。

答案 1 :(得分:1)

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页面大小。