Intel x86内存模型具有分段和分页功能。这意味着系统可以处理多达64 TB的虚拟内存。我的理解是只有4GB的虚拟内存是可寻址的。这里有什么差距?这都是在32位处理器
的上下文中这是数学:
2 ^ 13(段选择器)* 2(LDT或GDT)* 2 ^ 32 = 2 ^ 46 = 64太字节。这在文献中称为总虚拟存储器。他们错误地称它为虚拟内存吗?令我困惑的是,处理器本身只有32位地址线。
或者,他们是否试图说这是可以分配的总虚拟内存(在所有进程中?)
答案 0 :(得分:1)
它实际上是可以使用的 - 你可以将内存交换到磁盘并在必要时实际处理那么多的虚拟内存,所以数字应该是正确的,你可以称之为虚拟内存。
然而,32位模式下的x86处理器只能在不交换的情况下同时寻址4 GB,而且在32位模式下,我听说没有系统曾经使用过那么多内存,而且通常不会因性能而非常实用。
答案 1 :(得分:1)
我认为这里所说的x86处理器能够解决那么多内存,而不是它在实践中的作用。只有当程序使用分段存储器模型并使用完整段和GP寄存器并且CPU以这种方式连线使用它时,才有可能实现这一点。但是,今天的程序通常使用平面内存模型(可以处理更少的内存),操作系统不支持寻址那么多内存AFAIK。
分段内存模型 - [...]在IA-32处理器上运行的程序可以 解决不同大小和类型以及每个细分的最多16,383 [2 14 ]段 可以大到2 32 字节。
所以显然他们有能力解决2个 46 (64 TiB)字节(虚拟和物理?)内存但是我们仅限于什么内存模型用于程序以及操作系统是否支持它。
答案 2 :(得分:1)
1)通过段选择器从这些2 ^ 13 * 2 = 2 ^ 14中选择段描述符,该段选择器位于单独的寄存器中,因此它绕过32地址线限制。
2)段描述符包含段的32位地址,这是32位值。将32位偏移量添加到简单算术加法,因此最终得到一个32位地址。 2 ^ 32 =仅4GB。
问题是,细分可能会重叠。数学中的错误在于当前段描述符(14位)和偏移量(32位)的索引未连接。它们被处理以形成32位线性地址。
查看this page以获取有关x86内存分段的更多信息。