【问题标题】:What's the difference between "virtual memory" and "swap space"?“虚拟内存”和“交换空间”有什么区别?
【发布时间】:2011-06-25 14:52:35
【问题描述】:

谁能告诉我虚拟内存交换空间有什么区别?

为什么我们说对于 32 位机器,可访问的最大虚拟内存仅为 4 GB?

【问题讨论】:

  • @startblue 你给出的链接如何回答我的问题..
  • @algo-geeks - 实际上这不是一个答案,但我认为它链接到一个可能对该主题非常有用的答案。并且写在评论中,正是它应该在的地方,恕我直言。 :)

标签: operating-system terminology


【解决方案1】:

superuser 上对虚拟内存有很好的解释。

简单地说,虚拟内存是运行进程可以使用的 RAM 和磁盘空间的组合。

交换空间是硬盘上虚拟内存的一部分,在 RAM 已满时使用。

至于为什么 32bit CPU 限制为 4gb 虚拟内存,解决的很好here

根据定义,32 位处理器使用 32位来指代的位置 每个字节的内存。 2^32 = 4.2 十亿,这意味着一个内存地址 那是32位长只能指 42 亿个独特的位置(即 4 GB)。

【讨论】:

  • 那么 actual RAM = virtual - swap 吗?
  • 这个答案是完全错误的。一个人可以内存映射一个 1GB 的文件 100 次,并在一台只有 1GB 内存的机器上使用 100GB 的虚拟内存。无法添加 RAM 和磁盘空间来获得 100GB 的可用虚拟内存。
  • @DavidSchwartz 不是真的。内存映射文件不会将其加载到内存中。因此,简单地将 1GB 文件映射 100 次将不会使用 100GB 的任何内容。
  • @Felix 你错了。当您说它“不将其加载到内存中”时,您是在使用“内存”一词来表示物理内存,即RAM。我们谈论的是虚拟内存,而不是物理内存。虚拟内存通常在需要时根据需要创建,而不是像物理内存那样从固定池中获取。
  • 那么这只是一个报告问题?甚至计算映射了多少内存是否有意义?因为你永远不会真正使用那么多,无论是在 RAM 中还是在交换中。
【解决方案2】:

关于虚拟内存这个术语有些混淆,它实际上是指以下两个非常不同的概念

  1. 使用磁盘页面来扩展计算机物理内存的概念数量 - 正确的术语实际上是 分页
  2. 各种操作系统/CPU 使用的一种抽象,用于创建每个进程在单独的连续地址空间中运行的假象。

交换空间,OTOH,是磁盘部分的名称,用于在不使用时存储额外的 RAM 页面。

一个重要的认识是,由于后者的硬件和操作系统支持,前者是透明的。

为了更好地理解这一切,您应该考虑 CPU 和操作系统如何支持“虚拟内存”(如定义 2)。

假设您有一个 32 位指针(64 位指针类似,但使用的机制略有不同)。一旦启用了“虚拟内存”,处理器就会将此指针视为三个部分。

  • 最高 10 位是页面目录条目
  • 以下 10 位是 页表条目
  • 最后 12 位构成 页面偏移量

现在,当 CPU 试图访问指针的内容时,它首先会查阅 Page Directory 表——一个由 1024 个条目组成的表(在 X86 架构中,它的位置被指向由 CR3 寄存器)。 10 位的Page Directory Entry 是该表中的一个索引,它指向Page Table 的物理位置。这又是另一个包含 1024 个条目的表,每个条目都是物理内存中的一个指针,以及几个重要的控制位。 (我们稍后会回到这些)。找到页面后,最后 12 位用于在该页面中查找地址。

还有许多更多细节(TLB、大页面、PAE、选择器、页面保护),但上面的简短说明抓住了要点。

使用这种转换机制,操作系统可以为每个进程使用一组不同的物理页面,从而给每个进程一个拥有所有内存的错觉(因为每个进程都有自己的页面目录)

在这个虚拟内存之上,操作系统还可以添加分页的概念。前面讨论的控制位之一允许指定条目是否“存在”。如果它不存在,则尝试访问该条目将导致 Page Fault 异常。操作系统可以捕获此异常并采取相应措施。因此,支持交换/分页的操作系统可以决定从 交换空间 加载页面,修复转换表,然后再次发出内存访问。

这是两个术语结合的地方,支持虚拟内存和分页的操作系统可以通过分页(交换)页面进出交换区域,使进程产生比实际内存更多的错觉。

关于您的最后一个问题(为什么说 32 位 CPU 仅限于 4GB 虚拟内存)。这指的是定义 2 的“虚拟内存”,是指针大小的直接结果。如果 CPU 只能使用 32 位指针,那么您只有 32 位来表示不同的地址,这给您 2^32 = 4GB 的可寻址内存。

希望这能让事情更清楚一点。

【讨论】:

    【解决方案3】:

    恕我直言,使用交换空间的概念等同于虚拟内存是非常误导的。 VM 是一个比交换空间更通用的概念。除其他外,VM 允许进程在执行期间引用虚拟地址,这些虚拟地址在硬件和页表的支持下被转换为物理地址。因此,进程不关心系统有多少物理内存,也不关心指令或数据实际驻留在物理内存层次结构中的什么位置。 VM 允许这种映射。引用的项(指令或数据)可能驻留在 L1、L2 或 RAM 中,或者最终在磁盘上,在这种情况下它被加载到主内存中。

    交换空间它只是辅助内存上的一个位置,当页面处于非活动状态时存储页面。如果没有足够的 RAM,操作系统可能会决定换出进程的页面,以便为其他进程页面腾出空间。 处理器永远不会直接从交换空间执行指令或读/写数据。

    请注意,在没有 VM 的系统中可能会有交换空间。也就是说,直接访问物理地址的进程仍然可以在 磁盘。

    【讨论】:

      【解决方案4】:

      虽然线程很老并且已经被回答。仍然想分享这个链接,因为这是迄今为止我找到的最简单的解释。下面的链接有图表以便更好地可视化。

      主要区别:虚拟内存是对主内存的抽象。它通过将内容 RAM 的非活动部分存储在磁盘上来扩展计算机的可用内存。每当需要内容时,它就会将其取回 RAM。交换内存或交换空间是用于虚拟内存的硬盘驱动器的一部分。因此,两者也可以互换使用。

      虚拟内存与物理内存不同。程序员可以直接访问虚拟内存而不是物理内存。虚拟内存是对主内存的抽象。用于隐藏系统真实物理内存的信息。它通过将 RAM 内容的非活动部分存储在磁盘上来扩展计算机的可用内存。当需要内容时,它会将其取回 RAM。虚拟内存会产生一个地址空间从零开始的错觉。它主要因其优化功能而受到青睐,通过它减少了空间需求。它由可用的 RAM 和磁盘空间组成。

      交换内存一般称为交换空间。交换空间是指保留作为临时存储位置的虚拟内存部分。当可用 RAM 无法满足系统内存的要求时,将使用交换空间。例如,在 Linux 内存系统中,内核将每个页面定位在物理内存或交换空间中。内核还维护一个表,其中保存了有关换出页面和物理内存中页面的信息。 长时间未访问的页面被发送到交换空间区域。该过程称为换出。如果需要相同的页面,则通过换出不同的页面将其换入物理内存。因此,可以得出结论,交换内存和虚拟内存是相互关联的,因为交换内存是用于虚拟内存技术的。

      difference-between-virtual-memory-and-swap-memory

      【讨论】:

      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
      • 谢谢,改进了帖子。
      【解决方案5】:

      “虚拟内存”是一个通用术语。在 Windows 中,它被称为分页或分页。在 Linux 中,它被称为 Swap。

      【讨论】:

        猜你喜欢
        • 2021-09-11
        • 2012-02-27
        • 2012-12-30
        • 2019-09-23
        • 2019-07-03
        • 2012-11-19
        • 2020-05-21
        • 2014-07-27
        • 1970-01-01
        相关资源
        最近更新 更多