虚拟内存如何工作?

2025-06-07

虚拟内存如何工作?

你有没有想过😲,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 中且专用于特定进程的页面组称为该进程的工作集。

为什么要使用虚拟内存?

  • 人们想要这样做的原因有两个
    1. 允许使用太大而无法在内存中物理容纳的程序。
    2. 另一个原因是允许多任务处理。
  • 在虚拟内存出现之前,文字处理器、电子邮件程序和浏览器无法同时运行,除非有足够的内存同时容纳这三个程序。
  • 这意味着必须关闭一个程序才能运行另一个程序,但现在有了虚拟内存,即使没有足够的内存来同时容纳所有正在执行的程序,也可以进行多任务处理。

哪个操作系统实现了虚拟内存?

  • 一些最流行的操作系统,如 Windows、Mac OSX 和 Linux 都实现了 VMM。

虚拟内存会降低性能(抖动)!

  • 如果虚拟内存的大小与主内存相比相当大,那么就会发生更多的与硬盘的交换。
  • 访问硬盘比使用主存储器(RAM)慢得多。
  • 在 RAM 不足的系统中同时使用太多程序会导致不断的磁盘交换(也称为磁盘抖动),这会严重降低系统性能。

与虚拟内存相关的术语

  • 在分页方案中,操作系统以称为页面的相同大小的块从硬盘检索数据。

分页

  • 它是一种 VMM 方案,通过该方案,计算机可以从二级存储器(硬盘 - 现在为 SSD)存储和检索数据,以供实际内存(RAM)使用。
  • 分页使程序超出可用物理内存的大小并形成虚拟内存。

页面错误

  • 当程序尝试访问已映射到地址空间但未加载到物理内存(RAM)中的页面时,就会发生页面错误。
  • 这意味着程序必须访问分页文件(位于硬盘上)来检索所需的页面。

结合页面、分页和页面错误术语

  • 当操作系统创建虚拟内存时,它将使用分页方案,通过该方案将一些内存块加载到 RAM 中,其余部分作为分页文件存储在 HDD(在某些情况下为 SSD)中
  • 当我们的程序(应用程序)寻找不在 RAM 中而是存储为分页文件的内容时,就会发生页面错误。
  • 有许多复杂的算法可以降低页面错误率,例如 LRU、MFU、FIFO、NRU 等
文章来源:https://dev.to/visheshpatel/how-does-virtual-memory-work-20fj
PREV
6 个 JSON 工具助您提高工作效率
NEXT
告诉我一个愚蠢的应用程序想法,我会实现它