我知道虚拟内存是计算机用来将部分 RAM 存储在硬盘上以供正在运行的进程使用的分页文件。但是虚拟地址空间有何不同?是 RAM 还是硬盘,还是两者兼而有之?
答案1
虚拟地址空间是单个程序执行时所见的空间。根据程序的配置方式,此地址空间的大小将与操作系统支持的最大值一样大。
然后,操作系统内核负责将 vas 中的地址映射到物理内存(即 RAM 或系统页面文件)。
通过这种设计,程序本身不知道资源和真实地址,并且可以像拥有所有系统内存或至少是单个进程可以使用的最大内存一样运行。
简而言之,程序使用 VAS 工作,操作系统负责将 VAS 映射到实际存储,因此这对于正在运行的程序是不可见的。正在运行的程序只能看到其 VAS。
答案2
虚拟地址空间是对程序可以寻址的内存大小的限制。
这受指针类型的限制,理论上,纯 32 位指针可以寻址 4GB 的虚拟空间。实际边界取决于操作系统的设计,因为它使用了很大一部分地址空间旁边用户空间。
在Win32下,默认设置是允许2GB的虚拟地址空间作为用户空间。
64 位指针可以寻址更多,实际上通常允许 48 位,并且有很多细节这个超级用户的回答。
理论上,有人可以构建一台具有足够 RAM 的物理计算机,以便 2GB 的用户空间可以直接映射到物理内存(可能至少需要 3GB 的物理内存),这样您就会拥有虚拟内存不是很虚拟的 32 位进程。
答案3
虚拟地址空间是进程所看到的。例如,您的电子邮件位于一个大小为 25GB 的收件箱中。这就是您的虚拟地址空间。
虚拟地址空间是为了区分并非每个虚拟地址空间都对应一个身体的地址空间。假设您有 20 个电子邮件用户,收件箱空间为 25GB。但您的服务器上只有 100GB 的磁盘空间。那么,您可以获取旧电子邮件并将其存档,只将最近的电子邮件保留在您的服务器上,因为人们通常只查看最近的电子邮件。
将电子邮件从服务器归档到磁带驱动器等设备类似于计算机将 RAM 的部分分页到磁盘。当有人查看旧电子邮件时,您只需将磁带上的旧电子邮件“分页”到服务器上即可。电子邮件用户永远不会知道其中的区别。
同样,你的机器上的每个进程都有XX * number of processes
虚拟地址空间,即使您的物理内存可能少于。
虚拟内存就是虚拟地址空间。但虚拟内存只是你正在使用的虚拟地址空间。