谁能告诉我虚拟内存和交换空间的区别是什么
为什么我们说对于32位机器,最大可访问虚拟内存仅为4 GB?
发布于 2011-02-11 23:06:00
发布于 2011-02-12 19:17:13
关于虚拟内存这个术语有些混淆,它实际上指的是以下两个截然不同的概念
分页使用磁盘分页来扩展计算机的物理内存量-正确的术语实际上是
交换空间,即OTOH,是不使用时用于存储额外RAM页的磁盘部分的名称。
一个重要的实现是,由于后者的硬件和操作系统支持,前者显然是可能的。
为了更好地理解这一切,您应该考虑CPU和操作系统如何支持“虚拟内存”(如定义2所示)。
假设您有一个32位指针(64位指针类似,但使用的机制略有不同)。一旦启用了"Virtual Memory“,处理器就认为这个指针分为三个部分。
现在,当中央处理器试图访问指针的内容时,它首先查询页面目录表-一个由1024个条目组成的表(在X86体系结构中,其位置由CR3寄存器指向)。10位页面目录条目是此表中的索引,它指向页表的物理位置。这又是另一个包含1024个条目的表,每个条目都是物理内存中的指针,以及几个重要的控制位。(我们将在稍后讨论这些内容)。一旦找到一页,最后12位用于查找该页内的地址。
还有许多更多的细节(TLB,大页面,PAE,选择器,页面保护),但上面的简短解释抓住了事情的要点。
使用这种转换机制,OS可以为每个进程使用一组不同的物理页面,从而给每个进程一种拥有所有内存的错觉(因为每个进程都有自己的页面目录)
在此虚拟内存之上,操作系统还可以添加分页的概念。前面讨论的控制位之一允许指定条目是否“存在”。如果它不存在,则试图访问该条目将导致页面错误异常。OS可以捕获该异常并相应地采取行动。因此,支持交换/分页的OS可以决定从交换空间加载页面,修复转换表,然后再次发出内存访问。
这就是这两个术语结合在一起的地方,支持虚拟内存和分页的操作系统可以通过分页(交换)页面进出交换区域,给进程带来内存比实际存在的更多的错觉。
关于你的最后一个问题(为什么说32位CPU被限制为4 4GB虚拟内存)。这指的是定义2的“虚拟内存”,并且是指针大小的直接结果。如果CPU只能使用32位指针,那么您只有32位来表示不同的地址,这将为您提供2^32 =4 4GB的可寻址内存。
希望这能让事情变得更清楚一些。
发布于 2014-06-06 10:50:50
将交换空间的概念等同于虚拟内存是非常容易误导的。VM是一个比交换空间更一般的概念。其中,VM允许进程在执行期间引用虚拟地址,这些地址在硬件和页表的支持下被转换为物理地址。因此,进程不关心系统有多少物理内存,也不关心指令或数据在物理内存层次结构中的实际驻留位置。VM允许此映射。被引用的项目(指令或数据)可以驻留在L1、L2或RAM中,或者最终驻留在磁盘上,在这种情况下,它被加载到主存储器中。
交换空间这只是辅助内存上的一个地方,当页面处于非活动状态时,页面就存储在这里。如果没有足够的RAM,操作系统可能决定换出进程的页面,以便为其他进程页面腾出空间。处理器从不执行指令或直接从交换空间读取/写入数据。
请注意,在没有VM的系统中也可以有交换空间。也就是说,直接访问物理地址的进程仍然可以将部分物理地址放在磁盘上。
https://stackoverflow.com/questions/4970421
复制相似问题