任何人都可以告诉我虚拟内存和交换空间之间有什么区别?
为什么我们说32位机器的最大虚拟内存访问量仅为4 GB?
答案 0 :(得分:105)
在superuser上有一个很好的虚拟内存展示。
简单地说,虚拟内存是运行进程可以使用的RAM和磁盘空间的组合。
交换空间是硬盘上虚拟内存的一部分,在RAM已满时使用。
至于为什么32位CPU仅限于4GB虚拟内存,它的解决方案很好here:
根据定义,32位处理器使用 32位指的是位置 每个字节的内存。 2 ^ 32 = 4.2 十亿,这意味着一个内存地址 那个32位长只能参考 42亿个独特位置(即4 GB)。
答案 1 :(得分:57)
关于术语虚拟内存存在一些混淆,它实际上指的是以下两个非常不同的概念
交换空间OTOH是用于在不使用时存储其他RAM页面的磁盘部分的名称。
要做的一个重要实现是前者由于后者的硬件和操作系统支持而透明可能。
为了更好地理解这一切,你应该考虑CPU和操作系统如何支持“虚拟内存”(如定义2)。
假设您有一个32位指针(64位点类似,但使用稍微不同的机制)。一旦启用了“虚拟内存”,处理器就会将此指针视为三个部分。
现在,当CPU尝试访问指针的内容时,它首先查询页面目录表 - 一个由1024个条目组成的表(在X86架构中,其位置指向由CR3登记册)。 10位页面目录条目是此表中的索引,它指向页表的物理位置。反过来,这是另一个包含1024个条目的表,每个条目是物理存储器中的指针,以及几个重要的控制位。 (我们稍后会回到这些)。找到页面后,最后12位用于查找该页面中的地址。
有许多更多细节(TLB,大页面,PAE,选择器,页面保护),但上面的简短说明捕捉了事物的要点。
使用这种转换机制,操作系统可以为每个进程使用一组不同的物理页面,从而为每个进程提供了为自己拥有所有内存的假象(因为每个进程都有自己的页面目录)
在虚拟内存之上,操作系统还可以添加 Paging 的概念。前面讨论的控制位之一允许指定条目是否“存在”。如果它不存在,则尝试访问该条目将导致 Page Fault 异常。操作系统可以捕获此异常并采取相应措施。因此,支持交换/分页的操作系统可以决定从交换空间加载页面,修复转换表,然后再次发出内存访问。
这是两个术语结合的地方,支持虚拟内存和分页的操作系统可以通过在交换区域内外进行分页(交换)页面,使进程产生比实际存在的内存更多的错觉。
至于你的上一个问题(为什么说32位CPU仅限于4GB虚拟内存)。这指的是定义2的“虚拟内存”,它是指针大小的直接结果。如果CPU只能使用32位指针,那么只有32位表示不同的地址,这样就可以得到2 ^ 32 = 4GB的可寻址内存。
希望这会让事情变得更加清晰。
答案 2 :(得分:12)
恕我直言,使用交换空间的概念等同于虚拟内存是非常误导的。 VM是一个比交换空间更通用的概念。除此之外,VM允许进程在执行期间引用虚拟地址,这些地址在硬件和页表的支持下被转换为物理地址。因此,进程不涉及系统具有多少物理内存,或者指令或数据实际驻留在物理内存层次结构中的位置。 VM允许此映射。引用的项(指令或数据)可以驻留在L1,或L2,或RAM中,或最终驻留在磁盘上,在这种情况下,它被加载到主存储器中。
交换空间它只是辅助内存中的一个位置,当页面处于非活动状态时会存储它们。如果没有足够的RAM,操作系统可能会决定换出进程的页面,以便为其他进程页面腾出空间。处理器永远不会直接从交换空间执行指令或读/写数据。
请注意,在没有VM的系统中可以有交换空间。也就是说,直接访问物理地址的进程仍然可以包含部分内容 磁盘。
答案 3 :(得分:4)
虽然线程已经很老了,但已经得到了解答。仍然想分享这个链接,因为这是我到目前为止找到的最简单的解释。下面的链接有更好的可视化图表。
关键区别:虚拟内存是主内存的抽象。它通过将内容RAM的非活动部分存储在磁盘上来扩展计算机的可用内存。每当需要内容时,它都会将其提取回RAM。交换内存或交换空间是用于虚拟内存的硬盘驱动器的一部分。因此,两者也可互换使用。
虚拟内存与物理内存不同。程序员可以直接访问虚拟内存而不是物理内存。虚拟内存是主内存的抽象。它用于隐藏系统的真实物理内存的信息。它通过将RAM内容的非活动部分存储在磁盘上来扩展计算机的可用内存。当需要内容时,它会将其提取回RAM。虚拟内存创建了一个整个地址空间的错觉,地址从零开始。主要优选的是其优化特征,通过它来减少空间需求。它由可用的RAM和磁盘空间组成。
交换内存通常称为交换空间。交换空间是指虚拟内存中保留为临时存储位置的部分。当可用RAM不能满足系统内存的要求时,使用交换空间。例如,在Linux内存系统中,内核将每个页面定位在物理内存或交换空间中。内核还维护一个表,其中保存有关换出的页面和物理内存中的页面的信息。 长时间未访问的页面将被发送到交换空间区域。该过程称为交换。如果需要相同的页面,则通过交换不同的页面在物理内存中交换它。因此,可以得出结论,交换内存和虚拟内存是互连的,因为交换内存用于虚拟内存技术。
答案 4 :(得分:0)
“虚拟内存”是一个通用术语。在Windows中,这称为分页或分页。在Linux中,它称为Swap。