虚拟内存如何工作?
你有没有想过😲,8GB 的游戏如何在只有 4GB RAM 的电脑上运行?或者,你可以同时播放多部电影,而这些电影的总容量甚至超过了 RAM 的大小?如果你是一名软件开发人员,你可能会遇到像多任务或多处理这样的词,这是这背后的一个关键概念。换句话说,它创建了虚拟内存,这是一种内存管理技术。在这里,我们将了解它的工作原理。
/!\: 最初发表于@ www.vishalchovatiya.com。
虚拟内存如何工作?
- 假设操作系统需要 120 MB 内存来容纳所有正在运行的程序。
- 但目前 RAM 芯片上仅存储了 50 MB 的可用物理内存。
- 然后,操作系统将设置 120 MB 的虚拟内存,并使用称为虚拟内存管理器 (VMM) 的程序来管理这 120 MB。
- VMM 将在硬盘上创建一个大小为 70 MB(120 - 50)的文件,以满足所需的额外内存需求。
- 现在,操作系统将继续寻址内存,就好像 RAM 中实际存储了 120 MB 的实际内存,即使实际上只有 50 MB。
- VMM 负责处理只有 50 MB 真实内存的情况。
/!\:如果你想深入了解虚拟内存的实现,那你来错地方了。本文只会帮你理清“虚拟内存是如何工作的”这个概念!
传说
物理内存 或 主内存 |
内存 |
辅助记忆 | HDD 或 SSD |
虚拟内存 | 操作系统为了优化而产生的幻觉(你也可以这么说) |
虚拟机管理器 | 虚拟内存管理器 |
进程地址空间 | 进程在其代码中引用的逻辑地址集(由 VMM 提供) |
操作系统 | 操作系统(我认为这个不需要) |
又名 | 也称为 |
VMM 如何工作?
- VMM 在硬盘上创建一个文件,用于保存操作系统所需的额外内存,在我们的例子中,该文件大小为 70 MB。
- 该文件称为分页文件(又名交换文件/页框)并在虚拟内存中起着重要作用(即虚拟内存如何工作)。
- 分页文件与 RAM 相结合占据了全部内存。
- 每当操作系统需要不在主(RAM)内存中的一块内存时,VMM 就会从最近未使用的实际内存中取出一块内存,将其写入分页文件,然后从分页文件中读取操作系统所需的内存块。
- 然后,VMM 从分页文件(当前需要)中获取内存块并将其移动到主内存中 - 代替旧块。
- 这个过程称为交换(也称为分页),被交换的内存块称为页面。这个过程有几种算法,称为页面替换算法。
- 当前存在于 RAM 中且专用于特定进程的页面组称为该进程的工作集。
为什么要使用虚拟内存?
- 人们想要这样做的原因有两个:
- 允许使用太大而无法在内存中物理容纳的程序。
- 另一个原因是允许多任务处理。
- 在虚拟内存出现之前,文字处理器、电子邮件程序和浏览器无法同时运行,除非有足够的内存同时容纳这三个程序。
- 这意味着必须关闭一个程序才能运行另一个程序,但现在有了虚拟内存,即使没有足够的内存来同时容纳所有正在执行的程序,也可以进行多任务处理。
哪个操作系统实现了虚拟内存?
- 一些最流行的操作系统,如 Windows、Mac OSX 和 Linux 都实现了 VMM。
虚拟内存会降低性能(抖动)!
- 如果虚拟内存的大小与主内存相比相当大,那么就会发生更多的与硬盘的交换。
- 访问硬盘比使用主存储器(RAM)慢得多。
- 在 RAM 不足的系统中同时使用太多程序会导致不断的磁盘交换(也称为磁盘抖动),这会严重降低系统性能。
与虚拟内存相关的术语
页
- 在分页方案中,操作系统以称为页面的相同大小的块从硬盘检索数据。
分页
- 它是一种 VMM 方案,通过该方案,计算机可以从二级存储器(硬盘 - 现在为 SSD)存储和检索数据,以供实际内存(RAM)使用。
- 分页使程序超出可用物理内存的大小并形成虚拟内存。
页面错误
- 当程序尝试访问已映射到地址空间但未加载到物理内存(RAM)中的页面时,就会发生页面错误。
- 这意味着程序必须访问分页文件(位于硬盘上)来检索所需的页面。
结合页面、分页和页面错误术语
- 当操作系统创建虚拟内存时,它将使用分页方案,通过该方案将一些内存块加载到 RAM 中,其余部分作为分页文件存储在 HDD(在某些情况下为 SSD)中
- 当我们的程序(应用程序)寻找不在 RAM 中而是存储为分页文件的内容时,就会发生页面错误。
- 有许多复杂的算法可以降低页面错误率,例如 LRU、MFU、FIFO、NRU 等