“虚拟内存”和“交换空间”有什么区别?


85

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

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



@startblue您提供的链接如何解答了我的问题..
algo-

@ algo-geeks-确实不是答案,但是我认为它链接到对于该主题可能非常有用的答案。并写在评论中,确切的位置,恕我直言。:)
穆罕默德·侯赛因巴希奇(MuhamedHuseinbašić)

Answers:


113

超级用户上有大量的虚拟内存移植

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

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

至于为什么32位CPU限于4GB虚拟内存,在这里可以很好地解决:

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


1
那么实际的RAM =虚拟-交换吗?
user48956 '17

4
这个答案是完全错误的。一个人可以将一个1GB的文件映射到内存100次,并在只有1GB内存的计算机上使用100GB的虚拟内存。无法添加RAM和磁盘空间来获取将要使用的100GB虚拟内存。
David Schwartz

@DavidSchwartz并非如此。内存映射文件不会将其加载到内存中。因此,简单地将1GB文件映射100次将不会使用100GB的任何内容。
菲利克斯(Felix)

1
@Felix你错了。当您说它“不将其加载到内存中”时,您使用的是“内存”一词来表示物理内存,即RAM。我们在谈论虚拟内存,而不是物理内存。虚拟内存通常在需要时和根据需要创建,而不是像物理内存那样从固定池中获取。
David Schwartz

因此,这只是一个报告问题?甚至算不计多少内存是有意义的吗?由于您永远不会真正使用太多内存,因此无论是在RAM中还是在交换中。
菲利克斯(Felix)

60

关于虚拟内存一词有些困惑,它实际上是指以下两个截然不同的概念

  1. 使用磁盘页面扩展计算机具有的概念性物理内存量-正确的说法实际上是分页
  2. 各种OS / CPU使用的一种抽象,以创建在单独的连续地址空间中运行的每个进程的错觉。

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

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

为了更好地理解所有这些,您应该考虑CPU和OS如何支持“虚拟内存”(如定义2)。

假设您有一个32位指针(64位点相似,但使用的机制略有不同)。启用“虚拟内存”后,处理器将把该指针分为三部分。

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

现在,当CPU尝试访问指针的内容时,它首先查询页面目录表-该表包含1024个条目(在X86体系结构中,其位置由CR3寄存器指向)。10位页面目录条目是此表中的索引,它指向页面表的物理位置。这又是另一个包含1024个条目的表,每个表都是物理内存中的指针以及几个重要的控制位。(我们稍后会再讨论)。找到页面后,将使用后12位在该页面中查找地址。

还有很多更多的细节(TLB的,大页面,PAE,选择器,页面保护),但简短的说明上述捕捉事物的要点。

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

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

这是两个术语结合在一起的地方,一个支持虚拟内存和分页的OS可以通过在交换区域内外调页(交换)页面,使进程具有比实际存在更多内存的错觉。

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

希望这可以使事情变得更清晰。


12

恕我直言,将交换空间的概念等同于虚拟内存使用非常令人误解。VM是比交换空间更笼统的概念。VM尤其允许进程在执行期间引用虚拟地址,并在硬件和页表的支持下将其转换为物理地址。因此,进程不必担心系统有多少物理内存,或者指令或数据实际上位于物理内存层次结构中的哪个位置。VM允许此映射。所引用的项目(指令或数据)可以驻留在L1,L2或RAM中,或者最终驻留在磁盘上,在这种情况下,它将被加载到主存储器中。

交换空间只是辅助内存在页面处于非活动状态时存储页面的地方。如果没有足够的RAM,则OS可能会决定换出某个进程的页面,以便为其他进程页面腾出空间。处理器永远不会直接从交换空间执行指令或读取/写入数据。

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


5

虽然线程很旧,并且已经得到答复。仍想分享此链接,因为这是我到目前为止找到的最简单的解释。下面的链接提供了图表,以实现更好的可视化。

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

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

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

虚拟内存和交换内存之间的差异


尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。-来自评论
穿外套,2016年

谢谢,改进了帖子。
ram619

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.