“虚拟内存”和“交换空间”有什么区别?
任何人都可以让我清楚虚拟内存和交换空间有什么区别?
为什么我们说32位机最大虚拟内存访问只有4 GB?
超级用户可以很好地解释虚拟内存。
简而言之,虚拟内存是运行进程可以使用的RAM和磁盘空间的组合。
交换空间是硬盘上虚拟内存的一部分,当RAM已满时使用。
至于为什么32位CPU被限制在4GB的虚拟内存, 这里解决得很好:
根据定义,32位处理器使用32位来指代存储器的每个字节的位置。 2 ^ 32 = 42亿,这意味着一个32位长的内存地址只能指42亿个唯一的位置(即4 GB)。
虚拟内存这个词有一些混淆,它实际上是指以下两个非常不同的概念
- 使用磁盘页面来扩展计算机的物理内存的概念数量 – 正确的术语实际上是寻呼
- 各种操作系统/ CPU用来创build每个进程在单独的连续地址空间中运行的错觉的抽象概念。
交换空间OTOH是在不使用时用于存储附加RAM页面的磁盘部分的名称。
一个重要的实现是前者是透明的,由于后者的硬件和操作系统的支持。
为了更好地理解这一切,您应该考虑CPU和操作系统如何支持“虚拟内存”(如定义2)。
假设你有一个32位的指针(64位点是类似的,但使用稍微不同的机制)。 一旦“虚拟内存”被启用,处理器就认为这个指针是由三部分组成的。
- 最高的10位是页目录条目
- 以下10位是页表项
- 最后12位组成页面偏移量
现在,当CPU试图访问一个指针的内容时,它首先查阅页目录表 – 一个由1024个条目组成的表格(在X86架构中,CR3寄存器指向的位置)。 10位页目录条目是这个表中的一个索引,它指向页表的物理位置。 这反过来又是1024个条目的另一个表,每个表是物理存储器中的一个指针,以及几个重要的控制位。 (我们稍后会回到这些)。 一旦find一个页面,最后12位用于在该页面中查找地址。
还有更多的细节(TLB,大页面,PAE,select器,页面保护),但上面的简短说明捕捉了事物的要点。
使用这种转换机制,操作系统可以为每个进程使用一组不同的物理页面,从而使每个进程都有自己拥有所有内存的错觉(每个进程都有自己的页面目录)
在这个虚拟内存之上,操作系统也可以添加寻呼的概念。 之前讨论的控制位之一允许指定条目是否为“存在”。 如果不存在,则尝试访问该条目将导致Page Faultexception。 操作系统可以捕获这个exception并采取相应的行动 支持交换/分页的操作系统因此可以决定从交换空间加载页面,修复转换表,然后再次发出存储器访问。
这是两个术语组合在一起的地方,支持虚拟内存和寻呼的操作系统可以使进程具有比实际通过将页面调入(交换)进出交换区域更多的内存的错觉。
至于你最后的问题(为什么说32位CPU限于4GB虚拟内存)。 这是指定义2的“虚拟内存”,是指针大小的直接结果。 如果CPU只能使用32位指针,则只有32位表示不同的地址,这就给了你2 ^ 32 = 4GB的可寻址内存。
希望这使事情更清楚一点。
恕我直言,这是非常误导使用交换空间的概念相当于虚拟内存。 VM是一个比交换空间更普遍的概念。 除此之外,虚拟机允许进程在执行过程中引用虚拟地址,在硬件和页表的支持下将虚拟地址转换为物理地址。 因此进程不关心系统有多less物理内存,或者指令或数据实际驻留在物理内存层次结构中的位置。 VM允许这个映射。 被引用的项目(指令或数据)可能驻留在L1,L2或RAM中,或者最终在磁盘上,在这种情况下,它被加载到主存储器中。
交换空间,它只是一个辅助内存中的一个地方,当页面处于不活动状态时,页面被存储。 如果没有足够的RAM,操作系统可能会决定换出一个进程的页面,为其他进程页面腾出空间。 处理器永远不会执行指令或直接从交换空间读/写数据。
请注意,在没有虚拟机的系统中可以交换空间。 也就是说,直接访问物理地址的进程仍然可能在磁盘上有一部分进程。
虽然线程相当老,并已被回答。 仍然想分享这个链接,因为这是迄今为止我find的最简单的解释。 下面的链接有更好的可视化图表。
关键区别:虚拟内存是主内存的抽象。 它通过将内容RAM的不活动部分存储在磁盘上来扩展计算机的可用内存。 每当需要内容时,它就将其提取回RAM。 交换内存或交换空间是用于虚拟内存的硬盘驱动器的一部分。 因此,两者也可以互换使用。
虚拟内存与物理内存不同。 程序员可以直接访问虚拟内存而不是物理内存。 虚拟内存是主内存的抽象。 它用来隐藏系统真实物理内存的信息。 它通过将RAM内容的非活动部分存储在磁盘上来扩展计算机的可用内存。 当需要内容时,它将其取回到RAM中。 虚拟内存创build一个地址空间的错觉,地址从零开始。 主要优选的是其优化特征,由此减小空间需求。 它由可用的RAM和磁盘空间组成。
交换内存通常被称为交换空间。 交换空间是指作为临时存储位置保留的虚拟内存部分。 当可用的RAM不能满足系统内存的要求时,交换空间被利用。 例如,在Linux内存系统中,内核将每个页面放在物理内存或交换空间中。 内核还维护一张表,其中保存了有关换出的页面和物理内存中的页面的信息。 长时间没有被访问的页面被发送到交换空间区域。 这个过程被称为交换。 如果需要相同的页面,则通过交换不同的页面来交换物理内存。 因此,可以得出结论,交换内存和虚拟内存是互连的,因为交换内存用于虚拟内存技术。
差之间的虚拟存储器和交换存储器