4

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

这是数学:

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

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

4

3 回答 3

2

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

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

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

查看此页面以获取有关 x86 内存分段的更多信息。

于 2012-01-31T20:08:56.173 回答
1

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

手册 [1]的§3.3.1 开始:

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

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

于 2011-03-26T21:06:57.503 回答
1

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

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

于 2011-03-26T20:50:57.903 回答