为什么虚拟地址是 48 位而不是 64 位?

why virtual address are 48 bits not 64 bits?

我在读一本关于虚拟内存的书:

Intel Core i7 supports a 48-bit (256 TB) virtual address space and a 52-bit (4 PB) physical address space

下面是我的问题

Q1-我们大多使用64位机器,怎么虚拟地址只有48位?不应该也是64位虚拟内存吗?
编者注:这部分与 Why do x86-64 systems have only a 48 bit virtual address space?

完全相同

(编者注:这部分与完全相同)
Q2-为什么物理内存的地址space(52位)大于虚拟内存的地址(48位),难道虚拟内存的地址space应该大于物理内存的地址吗?

(编者注:这部分是几个问题的重复,包括 and )
Q3-我的理解是:所有页表都存储在内核内存中,用户不可见,我的理解正确吗?

是经济学!

  1. 构建足够大的机器以容纳足够的 RAM 以支持 64 位虚拟寻址的成本令人望而却步。 (可能,甚至是 NSA!)因此我们可以得出结论,需求 对芯片组的实际支持是最小的。

  2. 物理地址space的每一位对应CPU芯片上的一个引脚,以及支撑它的硅片,PC板上的一根线...以及每个内存 DIMM 上的一个引脚。这些都直接或间接地增加了制造成本。

  3. 要求客户为 99.999+% 的客户不需要且不可能使用的功能支付溢价在商业上没有意义。你做到了,你的竞争对手将能够在价格/性能指标上击败你。


Q1-since we mostly use 64 bits machine, how come the virtual address is only 48 bits? shouldn't it be 64 bits virtual memory as well?

由于您负担不起足够的 RAM 来有效地使用 64 位虚拟 space,这没有实际意义。

Q2-How come the address space of physical memory(52 bits) is greater than virtual memory's(48 bits), shouldn't it be that virtual memory's address space should be greater than physical memory's?

不确定这个。你需要和设计师谈谈这个。但出于与上述相同的原因,它没有实际意义。

Q3-my understanding is that: all page tables stored in kernel memory which is invisible to user, is my understanding correct?

是的,这是正确的(在设计良好的 multi-user OS 中),尽管我看不出这与问题的其余部分有什么关系。

现在虚拟地址主要用于进程隔离。通过虚拟内存管理,我们可以提供硬盘存储作为交换内存,但速度慢得令人痛苦,这不是重点。

https://en.wikipedia.org/wiki/Virtual_address_space

如果我们生活在一个硬盘比 RAM 快的世界里,我们的虚拟地址位可能会比物理地址位大。

但是如果我们不能用实际 RAM 支持 64 位地址 space,那么更大的虚拟地址位就没有意义了。

我不太清楚,但保存的 4 位 (52 - 48 = 4) 可能用于地址转换或 TLB 访问。所以更大的虚拟地址位实际上是不可能的。