【问题标题】:Does Virtual Memory Really Exists? [closed]虚拟内存真的存在吗? [关闭]
【发布时间】:2013-01-12 17:49:12
【问题描述】:

虚拟内存是否存在于现实中我们计算机系统的某个地方(即硬盘上)?

如果数据不在主内存中,即(发生页面错误),如何进行从虚拟内存到硬盘中真实数据的映射。是否有任何表维护从虚拟内存到硬盘数据的映射..

【问题讨论】:

  • 这取决于您在查看计算机时使用的抽象级别。你的电脑也是一堆乱七八糟的原子,但那样看也无济于事......同样,你可以问:文件真的存在吗???

标签: linux memory memory-management operating-system


【解决方案1】:
  1. 内存之所以被称为虚拟,是因为进程将其地址空间视为可用内存的连续块,使用底层地址总线宽度的所有宽度,比如 4GB 用于 32 位系统。所以每个进程都有一个 4GB 的地址空间,但是这个内存并没有完全由物理内存一对一地支持。即使你有 4GB 的物理内存来支持进程的 4GB 地址空间,内核会去哪里,其他进程呢?此内存必须是虚拟的。
  2. 是的,表维护进程地址空间。为简单起见,一些页面当前映射到易失性物理内存上,而另一些则没有。它们由 HDD 上的内存文件支持。当发生页面错误时,页面错误将检查该页面是否映射到物理内存(通常它在页面属性内部),如果没有,它将从 HDD 上的内存映射文件中获取它,并用它替换映射到物理内存的旧页面。

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    是的,虚拟内存确实存在,是的,有一个维护映射的表。例如,在维基百科中查找 page table。事实上,大部分虚拟内存文章都会完整地回答您的问题。

    【讨论】:

      【解决方案3】:

      http://en.wikipedia.org/wiki/Virtual_memory 回答了您的大部分问题。

      1. 虚拟内存必须存在后备存储。这通常是硬盘。基本上它的其他一些设备通常比 RAM 慢,但容量要大得多
      2. 发生页面错误时,从后备存储中获取页面
      3. 页表包含有关在后备存储中找到该页的位置的信息

      【讨论】:

      • 这也是我的第一个答案。但在某些情况下,这可能不是真的。毕竟,您可能没有足够的磁盘来支持所有虚拟内存......
      • 虚拟内存必须存在后备存储 -> 我会说“分配的(在某些操作系统上保留)虚拟内存必须存在后备存储”
      • @dema80 大多数 VM 实现都会在后备存储上预先分配 VM 空间以避免 OOM 问题。
      • 我不同意。如何在 64 位操作系统上预分配 2^64 字节?你甚至没有足够的磁盘空间!我确信 Linux 和 Windows 都没有预先分配整个地址空间。Linux 和 Windows 让您在没有交换空间的情况下运行! (不建议,但可能)
      • @dema80,我应该说“预先分配一些 VM 空间”。见microsoft.com/resources/documentation/windows/xp/all/proddocs/…
      【解决方案4】:

      简短的回答,不 :) 虚拟内存是虚拟的! 特别是如果您将虚拟内存视为“可以由进程寻址的内存”。在 64 位系统上,整个磁盘几乎无法支持整个虚拟内存。所以“实际上”,正如你所问的,我会说不。

      Long(-ish) 答案:虚拟内存作为内核中的一系列数据结构存在。它们主要跟踪当前保留、分配、映射到文件或映射到物理内存的页面/段。 此外,如果您看到的是“分配的虚拟内存”,答案会有所不同。这总是以一种或另一种形式存在(通常是由硬盘交换空间支持的页面)。

      【讨论】:

        【解决方案5】:

        是的,最常用的虚拟内存字节存在于某处。我说“大多数”是因为映射某些特殊硬件的寄存器的页面可能有漏洞。但是您的应用程序分配的所有内存都存在于 RAM 或硬盘中。

        维基百科文章解释了所有细节:http://en.wikipedia.org/wiki/Virtual_memory

        【讨论】:

        • 这里的关键是“已分配”。在许多情况下,这远非“大多数位”。至少,如果您将“虚拟内存”理解为“整个进程地址空间”
        • @dema80:我明白你的意思。如果您将虚拟内存视为可以通过指针访问的整个 32 位/64 位地址空间,那么您是正确的。但除非你有错误,否则你不会访问大部分内存,所以我的直觉是这“无关紧要”。
        • 确实如此,尤其是在 64 位系统上(32 位不同:您可能会很快耗尽服务器应用程序的地址空间)。但作为一个概念,“虚拟内存”是地址空间,恕我直言。它是由 32/64 位指针索引的“大数组”;当然,如果你真的访问了一个给定的位置,那么它需要在之前分配,因此由内存或磁盘支持。
        猜你喜欢
        • 1970-01-01
        • 2011-11-27
        • 2015-09-01
        • 2016-03-19
        • 2019-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多