Intel x86内存模型具有分段和分页功能。这意味着系统可以处理多达64 TB的虚拟内存。我的理解是只有4GB的虚拟内存是可寻址的。这里有什么差距?这都是在32位处理器的上下文中
这是数学:
2 ^ 13(段选择器)* 2(LDT或GDT)* 2 ^ 32 = 2 ^ 46 = 64太字节。这在文献中称为总虚拟存储器。他们错误地称它为虚拟内存吗?令我困惑的是,处理器本身只有32位地址线。
或者,他们是否试图说这是可以分配的总虚拟内存(在所有进程中?)
它实际上是可用的 - 您可以将内存交换到磁盘并在需要时实际处理那么多虚拟内存,因此数字应该是正确的,您可以将其称为虚拟内存。
但是,32位模式下的x86处理器只能在不交换的情况下同时处理4 GB,而且在32位模式下,我听说没有系统曾经使用过那么多内存,而且它通常不太实用由于表现。
1)通过段选择器从这些2 ^ 13 * 2 = 2 ^ 14中选择段描述符,该段选择器位于单独的寄存器中,因此它绕过32地址线限制。
2)段描述符包含段的32位地址,该地址是32位值。将32位偏移量添加到它是一个简单的算术加法,因此您最终得到一个32位地址。 2 ^ 32 =仅4GB。
问题是,细分可能会重叠。数学中的错误在于当前段描述符(14位)和偏移量(32位)的索引未连接。它们被处理以形成32位线性地址。
有关x86内存分段的更多信息,请查看this page。