【问题标题】:why virtual address are 48 bits not 64 bits? [duplicate]为什么虚拟地址是 48 位而不是 64 位? [复制]
【发布时间】:2021-01-06 13:19:48
【问题描述】:

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

Intel Core i7 支持 48 位 (256 TB) 虚拟地址空间和 52 位 (4 PB) 物理地址空间

下面是我的问题

Q1-既然我们主要使用64位机器,为什么虚拟地址只有48位?不应该是 64 位虚拟内存吗?
编者注:此部分与Why do x86-64 systems have only a 48 bit virtual address space?完全相同

(编者注:此部分与Why in x86-64 the virtual address are 4 bits shorter than physical (48 bits vs. 52 long)?完全相同)
Q2-为什么物理内存(52位)的地址空间大于虚拟内存(48位),不应该是虚拟内存的地址空间应该大于物理内存的吗?

(编者注:这部分是几个问题的重复,包括Is a process' page table mapped to Kernel address space?Where is page table located?
Q3-我的理解是:所有存储在内核内存中的页表对用户是不可见的,我的理解正确吗?

【问题讨论】:

  • 我编辑了您问题的标签,因为它与 Linux 无关,而是与 x86 CPU 架构有关。
  • edit你的问题解释你有什么样的Linux软件。
  • @MartinRosenau:你知道(在 2020 年)任何一台内存超过 4 TB 且不运行 Linux 或至少不运行 Linux 的计算机吗?FreeBSD?如果你这样做,请通过电子邮件与我联系basile@starynkevitch.net
  • 英特尔的 CPU 都不支持 52 个地址位。实际上,正如您所建议的,它们都支持比虚拟地址位更少的物理地址位。您可以使用 EAX = 80000008H 的 CPUID 找出物理地址位数。
  • 当 Intel 处理器支持 52 个物理地址位时,它们肯定也会支持具有 57 位虚拟地址的5-level paging

标签: x86-64 cpu-architecture virtual-memory page-tables


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    这是经济学!

    1. 构建一台足够大的机器以容纳足够的 RAM 以支持 64 位虚拟寻址的成本令人望而却步。 (很可能,甚至对 NSA 来说也是如此!)因此我们可以得出结论,对真正支持这一点的芯片组的需求是微乎其微的。

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

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


    Q1-既然我们主要使用64位机器,为什么虚拟地址只有48位?不应该是64位的虚拟内存吗?

    由于您买不起足够的 RAM 来有效使用 64 位虚拟空间,所以这没有实际意义。

    Q2-为什么物理内存(52位)的地址空间大于虚拟内存(48位),难道虚拟内存的地址空间应该大于物理内存?

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

    Q3-我的理解是:所有存储在内核内存中的页表对用户是不可见的,我的理解正确吗?

    是的,这是正确的(在设计良好的多用户操作系统中),尽管我不明白这与问题的其余部分有何关系。

    【讨论】:

    • 关于Q1) RAM的大小与物理地址空间有关,与虚拟地址空间无关。 1985 年 i80386 已经拥有 48 位(45 位可用)虚拟地址空间,尽管它只能控制 32 位物理地址。
    • 确实如此。但这不是我要说的重点。如果您尝试使用的虚拟地址空间比 RAM 所能容纳的多得多,那么您最终会崩溃。到那时你也可以使用传统的数据库。好的,有一些小众应用程序通过在巨大的虚拟地址空间中分散数据来简化,但要小心颠簸!
    • 位物理地址空间也会消耗缓存标签和 TLB 中的空间。因此,每个内核和每个高速缓存都存在成本,这与内核数量有关,而不仅仅是每个封装引脚。这是功率成本和性能成本。回复:其他问题,请参阅问题的链接副本; OP 的所有 3 个问题都有完全相同的重复项,因此这表明没有研究工作。 Why in x86-64 the virtual address are 4 bits shorter than physical (48 bits vs. 52 long)? 有一个与页表格式/级别相关的有趣答案。
    • 每个内存 DIMM 上都有一个引脚 - 任何单个 DIMM 只需要足够的地址线来寻址一个 DIMM,再加上一个可以为每个 DIMM 单独接线的芯片选择引脚在同一个频道。具有多个内存通道(在每个插槽上...)的系统可以拥有更多物理 RAM,而无需强制每个 DIMM 拥有更多引脚。例如每个通道 2 个 DIMM x 每个插槽 6 个通道 x 每个系统 2 或 4 个插槽,在具有 24 个 64GiB DIMM 的双插槽 Cascade Lake Xeon 系统上可以使用 1.5TiB 内存:thomas-krenn.com/en/wiki/…
    • DDR4 支持的最大容量意味着 DDR4 标准必须指定在板上蚀刻许多物理引脚,但较小的 DIMM 只需连接实际使用的那些。较低容量的 DIMM 可以使较高的地址线不使用。例如一个 2GB DIMM 可以使用 A0-A13 作为行地址,外加 4 个 bank-group pin systemverilog.io/ddr4-basics。 (请记住,在 DDR SDRAM akkadia.org/drepper/cpumemory.pdf 中,行和列是分开发送的,但对于固定的 DRAM“页面”大小,显然列地址始终是 10 位,而不是总地址宽度的一半)。
    猜你喜欢
    • 2018-03-12
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2018-10-07
    • 2021-12-28
    相关资源
    最近更新 更多