虚拟内存似乎有两种定义,我想知道它们是否描述的是同一件事,或者是两个相似但不同的概念被称为同一件事?
定义 1:使用辅助存储扩展 RAM 的一种方法
“虚拟内存是操作系统 (OS) 的一项功能,允许计算机弥补物理内存的不足” -技术目标
“虚拟内存是模拟的 RAM。当您用完所有 RAM 时,您的计算机会将数据转移到硬盘上的空白处。” -删除计算机历史记录
“虚拟内存是一种允许执行内存中无法完全使用的进程的技术” -教程点
定义 2:内存寻址系统
“虚拟内存是一种内存管理技术……它将程序使用的内存地址(称为虚拟地址)映射到计算机内存中的物理地址。” -维基百科
虚拟内存负责为程序提供自己的地址空间,因此它可以假设它的起始地址是 0x00
问题:我是不是搞混了?这些定义如何兼容?
答案1
虚拟内存是指任何不一定一对一映射到物理内存。它通常描述一个概念或架构,并暗示使用它的某个接口。
所以基本上,您所述的两个定义都可以适用:它可以是存储在主 RAM 以外的其他介质上的内存,并且它可能具有与物理地址不对应的地址。
例如在 Windows 上,您的应用程序可能具有共享相同虚拟地址但具有不同内容的内存区域,而相同地址的其他一些区域共享相同的内容,例如来自库的代码,并且您还可能在每个应用程序的不同地址共享内容,特别是使用 ASLR 时,地址是随机的。
同时,虚拟寻址还引入了一种将虚拟内存透明地映射到磁盘的方法,通常是借助代码访问无法映射到物理RAM的内存时引发的CPU异常或中断,以便操作系统可以自动将数据加载到RAM中,然后授予对它的访问权限。
答案2
他们描述的是同一件事。维基百科文章是技术解释。不过我认为文章的简介措辞不当。文章的主体部分对此进行了相当详尽的描述。
虚拟内存,作为名词,是指用于保存本来应该在内存中但却没有保存的内容的任何存储空间,通常是因为内存中没有足够的空间,或者暂时不需要(相对而言,“暂时”可能是几分之一秒)。通常,这是为此目的而借用的某种长期存储中的空间(硬盘上的页面文件是常见的例子)。在某些情况下(例如对于服务器),这可以是为此目的而构建的硬件。
维基百科文章谈到了这一点,但将这个概念扩展到有助于实现的子系统(例如虚拟寻址)。
答案3
他们描述了两件(相关的)事情。第一件是描述系统如何通过在物理内存和磁盘驱动器之间来回交换一些信息来应对物理内存不足的问题。操作系统对正在运行的程序隐藏了这些信息,使物理内存看起来比实际更大。尝试查找 RAM 交换文件
第二个是描述处理器如何决定系统上运行的每个程序访问哪部分内存(通常是实际物理内存)。它可以更好地描述为虚拟内存寻址。这样,机器上运行的每个程序都可以认为它有自己的专用内存块,从地址 00000 开始,但实际上内存块实际上分布在物理内存中。尝试查找内存寻址、指针