2篇文章中提到的"virtual memory"是指不同的东西吗?
Do the "virtual memory"s mentioned in the 2 articles refer to different things?
我阅读了以下 2 篇解释 virtual memory
和 physical memory
之间区别的文章。让我感到困惑的一件事是 virtual memory
一词在这两篇文章中的含义似乎不同。
What Is the Difference Between Virtual Memory & Physical Memory?说当RAM被填满时使用虚拟内存。
虽然 Wikipedia 说虚拟内存用于告诉程序物理内存在哪里。
其中一篇文章有误吗?还是 virtual memory
在不同的上下文中有不同的含义?
我觉得说内存满了就用虚拟内存是不对的。
虚拟内存的概念解决了使用比物理内存更多的问题,说起来非常简单。
MMU(内存管理单元)将虚拟内存地址映射到物理地址。查看 MMU wikipedia 了解更多信息。
虚拟内存允许使用磁盘space来获得额外的内存space,但不必.
当您访问的内存超过可用内存时,操作系统可以交换内存页面,从而允许您使用额外的内存。这里是 memory swapping 以获取更多信息。
因此总而言之,虚拟内存可以驻留在 RAM 中或磁盘上,但是当需要数据时,如果 RAM 中不存在,则会将其加载到 RAM 中。
编辑:
当然,虚拟内存的概念不仅仅涉及可用内存。诸如限制访问之类的东西。
这两篇文章都比较混乱。部分问题是他们将逻辑内存转换的概念与虚拟内存混为一谈(许多硬件手册也是如此)。在过去,当使用一个意味着另一个总是存在时,这不是什么大问题,但现在情况越来越不一样了。
如果你有一个纯物理内存系统,每个地址都是没有翻译的物理地址。
在逻辑内存转换系统中,逻辑页面使用页面 table 映射到物理页面。每个进程看到一个线性范围的可能地址,但到物理地址的映射可能相同也可能不同。
在纯逻辑内存系统中,页面 table 条目(以及相应的逻辑页面)有两种可能的状态:
- 映射到物理位置
- 无效(未映射)
在虚拟内存系统中,操作系统使用辅助存储(磁盘)作为进程内存。在用户地址 space 范围内,每个有效地址都映射到辅助存储。该辅助存储可能位于不同的位置,包括页面文件、executable 文件和共享库。
虚拟内存系统依赖于逻辑内存转换的存在。在虚拟内存系统中,页面tables有三种状态:
- 映射到物理位置
- 未映射且无效
- 未映射且有效
如果您尝试在第一种情况下访问内存(忽略保护),您的程序只会访问映射页面。
在第二种情况下,您的程序会导致异常并可能挂掉。
在第三种情况下,访问页面会触发页面错误。操作系统必须将页面从磁盘加载到内存中。然后它必须将页面 table 条目重新映射到页面映射的位置。
在虚拟内存系统中,您有两组内存需要管理。虚拟内存管理是定义磁盘上进程地址 space 的数据结构。第二组是定义驻留在内存中的那部分进程的数据结构(即页面 tables)。
在 32 位处理器(4GB 地址 spaces)的时代,8MB 内存占用冰箱大小的机柜,必须使用虚拟内存,因为根本不够用物理内存做的非常多。
如今,台式电脑通常有 32GB 的内存。不太需要在磁盘上存储进程。然而,几乎每个正在使用的操作系统仍然基于回磁盘虚拟内存。
我预计虚拟内存将在不久的将来完全消失,世界上的 Windoze 和 Eunchs 系统已经面临淘汰。将创建新的操作系统来处理无盘计算机系统。
我阅读了以下 2 篇解释 virtual memory
和 physical memory
之间区别的文章。让我感到困惑的一件事是 virtual memory
一词在这两篇文章中的含义似乎不同。
What Is the Difference Between Virtual Memory & Physical Memory?说当RAM被填满时使用虚拟内存。
虽然 Wikipedia 说虚拟内存用于告诉程序物理内存在哪里。
其中一篇文章有误吗?还是 virtual memory
在不同的上下文中有不同的含义?
我觉得说内存满了就用虚拟内存是不对的。
虚拟内存的概念解决了使用比物理内存更多的问题,说起来非常简单。
MMU(内存管理单元)将虚拟内存地址映射到物理地址。查看 MMU wikipedia 了解更多信息。
虚拟内存允许使用磁盘space来获得额外的内存space,但不必.
当您访问的内存超过可用内存时,操作系统可以交换内存页面,从而允许您使用额外的内存。这里是 memory swapping 以获取更多信息。
因此总而言之,虚拟内存可以驻留在 RAM 中或磁盘上,但是当需要数据时,如果 RAM 中不存在,则会将其加载到 RAM 中。
编辑: 当然,虚拟内存的概念不仅仅涉及可用内存。诸如限制访问之类的东西。
这两篇文章都比较混乱。部分问题是他们将逻辑内存转换的概念与虚拟内存混为一谈(许多硬件手册也是如此)。在过去,当使用一个意味着另一个总是存在时,这不是什么大问题,但现在情况越来越不一样了。
如果你有一个纯物理内存系统,每个地址都是没有翻译的物理地址。
在逻辑内存转换系统中,逻辑页面使用页面 table 映射到物理页面。每个进程看到一个线性范围的可能地址,但到物理地址的映射可能相同也可能不同。
在纯逻辑内存系统中,页面 table 条目(以及相应的逻辑页面)有两种可能的状态:
- 映射到物理位置
- 无效(未映射)
在虚拟内存系统中,操作系统使用辅助存储(磁盘)作为进程内存。在用户地址 space 范围内,每个有效地址都映射到辅助存储。该辅助存储可能位于不同的位置,包括页面文件、executable 文件和共享库。
虚拟内存系统依赖于逻辑内存转换的存在。在虚拟内存系统中,页面tables有三种状态:
- 映射到物理位置
- 未映射且无效
- 未映射且有效
如果您尝试在第一种情况下访问内存(忽略保护),您的程序只会访问映射页面。
在第二种情况下,您的程序会导致异常并可能挂掉。
在第三种情况下,访问页面会触发页面错误。操作系统必须将页面从磁盘加载到内存中。然后它必须将页面 table 条目重新映射到页面映射的位置。
在虚拟内存系统中,您有两组内存需要管理。虚拟内存管理是定义磁盘上进程地址 space 的数据结构。第二组是定义驻留在内存中的那部分进程的数据结构(即页面 tables)。
在 32 位处理器(4GB 地址 spaces)的时代,8MB 内存占用冰箱大小的机柜,必须使用虚拟内存,因为根本不够用物理内存做的非常多。
如今,台式电脑通常有 32GB 的内存。不太需要在磁盘上存储进程。然而,几乎每个正在使用的操作系统仍然基于回磁盘虚拟内存。
我预计虚拟内存将在不久的将来完全消失,世界上的 Windoze 和 Eunchs 系统已经面临淘汰。将创建新的操作系统来处理无盘计算机系统。