在x86架构上,为什么虚拟地址空间的位数少于物理地址的位数?


11

我读条在64位计算,它提到:

例如,截至2011年的AMD64架构允许52位用于物理内存,48位用于虚拟内存

我认为允许更多的虚拟内存而不是物理内存更有意义,那么为什么实际上却相反呢?

额外的问题:在64位架构上“允许” 52或48位意味着什么?其他位还有什么用?


对于x86,未使用的VA位必须是VA的MSbit的符号扩展。(ARM AArch64提供了允许硬件忽略8个MSbit的选项,以便可以方便地将它们用于标签。AzulSystems Vega处理器(Java设备的一部分)提供了16位VA用于标签。)在页表中,保留的PA位必须为零(主要是为了确保软件不会尝试使用它们并破坏与更高版本硬件的兼容性)。
保罗·克莱顿

Answers:


11

这是AMD64页表的图片(摘自《 AMD体系结构程序员指南》,第2卷,修订版3.23,2013年,第132页)。

AMD64 Longmode页表

AMD64体系结构中页面的“自然”大小为2 12 = 4096字节。(在某些模式下,您可以拥有2 21 = 2Mbyte页,但现在我们将忽略它们。)

每个页表项(PTE)(或取决于称为PDE,PDPE或PML4E的级别)为64位= 2 3字节。因此,每页有2 9个条目。因此,每页进程的4个级别的页表为您提供4x9 + 12 = 48位虚拟地址。遍历页表非常昂贵,因此除非/直到有消费者需求,否则它们不会扩展到5或6级。

我不确定他们为什么决定使用52位物理地址限制。将来可以扩展到63位。以2013年10月的价格(4Gbit芯片约为1美元/千兆位),构建2 52字节内存的成本将超过32,000,000.00美元,因此要增加物理地址限制的需求还需要一段时间。为什么要使物理地址保持尽可能小有多种原因:例如,TL​​B和缓存标记必须保留物理地址。

物理内存多于虚拟内存并不一定要倒退。虚拟内存是按进程分配的,而物理内存则由所有进程共享。因此,具有48位虚拟地址和2 52个字节的内存的服务器可以支持16个同时进行的进程,并且仍然保证不需要交换。


可能值得注意的是,计算机架构师已经学会了要求硬件使用高位,通常通过符号扩展来适应OS负地址的常见用法(“其他位还有什么用?”)。同样,使用Ln目录条目缓存,大多数时候不需要完全遍历5级表。PTE位52:62保留用于软件,因此在不破坏兼容性的情况下不能用于物理地址,从而将4KiB页限制为PA的52位。而且,Linus Torvalds著名地反对PAE(VA> PA似乎简化了“传统” OS设计)。
保罗·克莱顿

“将来可以扩展到63位。” 好吧,不,并非不更改页表结构。照原样,PxE的位52到62保留供操作系统使用。而且操作系统正在使用它们(Windows使用该字段作为“工作集列表索引”),因此处理器架构师不能随意将PFN字段扩展到其中。当然,将来可能会有类似PAE的选择,它将改变PT结构,以允许更多的PFN位,但这将是一个重大的架构更改。
Jamie Hanrahan 2014年

3

需要考虑的几点是,物理RAM昂贵。现在肯定可以确定16 GB的价格便宜,因为几年前只有4 GB,但是2 ^ 64(16艾字节)大得离谱。

因此,AMD通过限制寄存器将x86的x64扩展扩展为“允许”最大2 ^ 52 。这有两件事,可以降低处理器成本并提高性能。更多未使用的寄存器意味着在操作过程中仍然必须考虑很多空白空间。

而且,如果您不是一个数学家...三种尺寸之间的差异非常大!我不是数学专家,但十进制的52位大约是64位的.02%。48位是52中的6%。(有人检查我的数学吗?)

至于为什么AMD允许更多的物理RAM而不是虚拟的,文章指出这是因为AMD在考虑服务器。服务器需要大量的物理RAM。虚拟RAM太慢,无法支持数百或数千名员工的平均服务器应用程序。

我自己的想法:我们离开了RAM很小的时代,而硬盘必须支持RAM。RAM中的价格已下降到普通角色可以容纳足够多RAM的程度。以典型的应用程序为例,例如需要1-2GB RAM的Office。我7年前的电脑可以解决这个问题。尽管具有对磁盘的读写速度,但我希望我永远不必从虚拟内存中检索7GB文件(使用旧的PM * 2.5原理)。

我还只能假设AMD希望为使用物理RAM寄存器的寄存器(例如集成GPU上的RAM)留出空间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.