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