【问题标题】:64 Terabytes of virtual memory for 32-bit x86 using segmentation: how?使用分段的 32 位 x86 的 64 TB 虚拟内存:如何?
【发布时间】:2011-07-23 15:10:26
【问题描述】:

Intel x86 内存模型有分段和分页。系统可以寻址高达 64 TB 的虚拟内存是什么意思?我的理解是只有 4GB 的虚拟内存是可寻址的。这里的差距是什么?这都是在32位处理器的上下文中

这是数学:

2^13(段选择器)* 2(LDT 或 GDT)* 2^32 = 2^46 = 64 TB。这在文献中被称为总虚拟内存。他们是否错误地将其称为虚拟内存?令我困惑的是,处理器本身只有 32 位地址线。

或者,他们是否想说这是可以分配的总虚拟内存总量(跨所有进程?)

【问题讨论】:

  • 您确定它不在 64 位处理器的上下文中吗?你能链接到你的来源吗?
  • 您确定它是 32 位处理器吗?即使使用 PAE,32 位处理器也仅支持 64 GB。然而,64 位处理器目前支持 256 TB 的虚拟内存,但通常支持更少(可能为 64 TB)的物理内存。
  • 是的 32 位。 2^13(段选择器)* 2(LDT 或 GDT)* 2^32 = 2^46 = 64 TB。这在文献中被称为总虚拟内存。这在文献中被称为虚拟内存 - 他们是否错误地将其称为虚拟内存?令我困惑的是,处理器本身只有 32 位地址线。此外,每个段没有关联的页基地址。这只是使用了错误的术语吗?
  • 我不会说将其称为虚拟内存是错误的,但它有点可疑。我不知道他们为什么还要费心说出 64TB 的数字。没有人会将如此疯狂的设置用于任何有用的目的。一个更有用的数字是可寻址物理内存的总量,通常要少得多。

标签: memory x86 virtual intel memory-segmentation


【解决方案1】:

它实际上是可用的——如果需要的话,你可以将内存交换到磁盘并实际寻址那么多的虚拟内存,所以数字应该是正确的,你确实可以称之为虚拟内存。

但是,32 位模式下的 x86 处理器一次只能寻址 4 GB 而无需交换,而且我听说没有任何系统在 32 位模式下使用过这么多内存,而且通常不会由于性能而非常实用。

【讨论】:

    【解决方案2】:

    我认为这里所说的 x86 处理器能够处理这么多内存,而不是在实践中这样做。只有当程序使用分段内存模型并同时使用完整的段和 GP 寄存器并且 CPU 以这种方式使用它们时,这才有可能。但是,当今的程序通常使用平面内存模型(可以寻址较少的内存),并且操作系统不支持寻址那么多的内存 AFAIK。

    manual[1] 的§3.3.1 开始:

    分段内存模型 — [...] 在 IA-32 处理器上运行的程序可以 最多可寻址 16,383 [214] 个不同大小和类型的段,以及每个段 最大可达 232 个字节。

    显然,它们被连接到能够寻址 246 (64 TiB) 字节的(虚拟和物理?)内存但是我们受限于什么内存模型在程序中使用,操作系统是否支持。

    【讨论】:

    • 不,你不能处理那么多内存。如果您的段大小均为 4GiB,则它们都完全重叠。 (即使禁用了分页,我认为。分段 => 映射到 32 位线性地址发生在 before virt->phys 转换如果启用分页。所以你仍然坚持使用 32 位虚拟或物理地址空间有/无分页)。 PAE 允许您将多个进程的 4GiB 虚拟内存映射到不同块物理内存,但 PAE 与分段正交。
    【解决方案3】:

    1) 段描述符是由段选择器从这些 2^13*2=2^14 中选择的,段选择器位于单独的寄存器中,因此它绕过了 32 个地址行的限制。

    2) 段描述符包含一个段的32位地址,是一个32位的值。向其添加 32 位偏移量是简单的算术加法,因此您最终得到一个 32 位地址。仅 2^32=4GB。

    问题是,这些片段可能会重叠。您的数学错误在于当前段描述符(14 位)的索引和偏移量(32 位)没有连接。它们被处理形成一个 32 位线性地址。

    查看this page 了解有关 x86 内存分段的更多信息。

    【讨论】:

      猜你喜欢
      • 2012-01-09
      • 2011-12-18
      • 2019-08-16
      • 2016-11-13
      • 2015-10-12
      • 2019-07-19
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多