背景
在面试的时候经常会谈及虚拟存储器和虚拟内存,但好像对于虚拟内存和虚拟存储器这两个词语的定义,使用有些混淆,然后在查阅了一些后做了一些总结。
虚拟内存
这里说的虚拟内存其实更确切的说是windows下的虚拟内存,windows下的虚拟内存其实是借用磁盘空间假装它是内存,当应用访问虚拟内存地址的时候,如果内存管理器发现对应的物理地址在磁盘中,那内存管理器就会将这部分信息从磁盘中加载回内存中。
虚拟存储器
虚拟存储器说起来更像是一种机制,这种机制,有的书称为虚拟内存,有的书称为虚拟存储器,但是这不重要,重要的是其中的原理、核心。
下面这段话来自《深入理解计算机系统》
虚拟内存是硬件异常、硬件地址翻译、主存、磁盘文件和内核文件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。通过一个很清晰的机制,虚拟内存提供了三个重要的能力:1)它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存。2)它为每个进程提供了一致的地址空间,从而简化了内存管理。3)它保护了每个进程的地址空间不被其他进程破坏。
下面是维基百科上的定义
虚拟内存是计算机系统内存管理的一种技术。 它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上物理内存通常被分隔成多个内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
综上所述,其实windows下的虚拟内存可以说是借用磁盘空间进行扩充,而虚拟存储器更偏向于概念方面:怎么去存储进程里相关的地址,允许执行进程不必完全在内存中,缺失则从物理内存中找然后载入。(如果有大佬觉得我的说法不太准确,谢谢大佬的指正orz)