谁能告诉我虚拟内存和交换空间有什么区别?
为什么我们说对于32位计算机,最大可访问虚拟内存仅为4 GB?
谁能告诉我虚拟内存和交换空间有什么区别?
为什么我们说对于32位计算机,最大可访问虚拟内存仅为4 GB?
Answers:
关于虚拟内存一词有些困惑,它实际上是指以下两个截然不同的概念
交换空间OTOH是不使用时用于存储其他RAM页面的磁盘部分的名称。
一个重要的认识是,由于后者的硬件和操作系统支持,前者显然是可能的。
为了更好地理解所有这些,您应该考虑CPU和OS如何支持“虚拟内存”(如定义2)。
假设您有一个32位指针(64位点相似,但使用的机制略有不同)。启用“虚拟内存”后,处理器将把该指针分为三部分。
现在,当CPU尝试访问指针的内容时,它首先查询页面目录表-该表包含1024个条目(在X86体系结构中,其位置由CR3寄存器指向)。10位页面目录条目是此表中的索引,它指向页面表的物理位置。这又是另一个包含1024个条目的表,每个表都是物理内存中的指针以及几个重要的控制位。(我们稍后会再讨论)。找到页面后,将使用后12位在该页面中查找地址。
还有很多更多的细节(TLB的,大页面,PAE,选择器,页面保护),但简短的说明上述捕捉事物的要点。
使用这种转换机制,操作系统可以为每个进程使用一组不同的物理页面,从而使每个进程都有自己拥有所有内存的幻想(因为每个进程都有自己的页面目录)
在此虚拟内存之上,操作系统还可以添加分页的概念。前面讨论的控制位之一允许指定条目是否为“当前”。如果不存在,则尝试访问该条目将导致“页面错误”异常。操作系统可以捕获此异常并采取相应措施。因此,支持交换/分页的OS可以决定从交换空间加载页面,修复转换表,然后再次发出内存访问权限。
这是两个术语结合在一起的地方,一个支持虚拟内存和分页的OS可以通过在交换区域内外调页(交换)页面,使进程具有比实际存在更多内存的错觉。
关于您的最后一个问题(为什么要说32位CPU限于4GB虚拟内存)。这是指定义2的“虚拟内存”,是指针大小的直接结果。如果CPU只能使用32位指针,则只有32位可以表示不同的地址,这将为您提供2 ^ 32 = 4GB的可寻址内存。
希望这可以使事情变得更清晰。
恕我直言,将交换空间的概念等同于虚拟内存使用非常令人误解。VM是比交换空间更笼统的概念。VM尤其允许进程在执行期间引用虚拟地址,并在硬件和页表的支持下将其转换为物理地址。因此,进程不必担心系统有多少物理内存,或者指令或数据实际上位于物理内存层次结构中的哪个位置。VM允许此映射。所引用的项目(指令或数据)可以驻留在L1,L2或RAM中,或者最终驻留在磁盘上,在这种情况下,它将被加载到主存储器中。
交换空间只是辅助内存在页面处于非活动状态时存储页面的地方。如果没有足够的RAM,则OS可能会决定换出某个进程的页面,以便为其他进程页面腾出空间。处理器永远不会直接从交换空间执行指令或读取/写入数据。
请注意,在没有VM的系统中可能会有交换空间。也就是说,直接访问物理地址的进程仍可以在磁盘上保留其一部分。
虽然线程很旧,并且已经得到答复。仍想分享此链接,因为这是我到目前为止找到的最简单的解释。下面的链接提供了图表,以实现更好的可视化。
关键区别:虚拟内存是主内存的抽象。通过将内容RAM的不活动部分存储在磁盘上,它扩展了计算机的可用内存。无论何时需要内容,它都会将其取回RAM。交换内存或交换空间是用于虚拟内存的硬盘驱动器的一部分。因此,两者也可以互换使用。
虚拟内存的安静与物理内存不同。程序员可以直接访问虚拟内存而不是物理内存。虚拟内存是主内存的抽象。它用于隐藏系统实际物理内存的信息。通过将RAM内容的不活动部分存储在磁盘上,它扩展了计算机的可用内存。当需要内容时,它将内容取回RAM。虚拟内存会对整个地址空间产生错觉,其地址以零开头。主要由于其减少空间需求的优化功能而被首选。它由可用的RAM和磁盘空间组成。
交换内存通常称为交换空间。交换空间是指虚拟内存中保留为临时存储位置的部分。当可用RAM无法满足系统内存要求时,将使用交换空间。例如,在Linux内存系统中,内核将每个页面定位在物理内存或交换空间中。内核还维护一个表,其中保留了有关换出的页面和物理内存中的页面的信息。长时间未访问的页面被发送到交换空间区域。该过程称为换出。如果需要相同的页面,则通过换出另一个页面来将其换入物理内存中。从而,
“虚拟内存”是一个通用术语。在Windows中,这称为分页或分页。在Linux中,它称为交换。