电脑程序员在办公桌前使用台式电脑的高角度视图

什么是虚拟内存?

虚拟内存的定义

虚拟内存是一种内存管理技术,它让负担过重的操作系统 (OS) 能够创建一种合成的内存形式,从而超越自身的内存限制运行。

本质上,当过多计算机程序耗尽内存时,虚拟内存使操作系统能够将随机存取存储器 (RAM) 转用于硬盘驱动器。

一个简明的金融类比可以恰当地描述这种情形:把您计算机中的物理内存想象成个人支票账户里的钱。一切正常,所有功能都运转良好,直到您耗尽资金。一旦触及底线,您的银行(提供支票账户透支保护)便会发放透支(虚拟内存),暂时覆盖账户支出。 

这种透支有明显的限制。首先,财务上限控制着银行愿意支持的支出规模。另外,还有时间限制,规定金融机构允许这种状况持续多久,而无需向您的账户注入紧急资金。

虚拟内存是计算机系统的重要组成部分,能让整体运行更顺畅,但必须注意,它并非可持续的永久解决方案。它旨在提供应急容量的内存。更像是一种权宜之计,算是能把事情办成——但仅限于当下。 

虚拟内存是现代计算的产物;其核心不过是更新了“拆东墙补西墙”这一古老概念,即资源从一处转移到另一处。

虚拟内存如何工作

中央处理器 (CPU) 是计算机的主要功能部件,它使用不同形式的内存。RAM 是一种更快、可更迅速访问的内存使用形式,但容量并非无限。而 CPU 的硬盘驱动器则提供了大量的磁盘存储空间,但访问时间较慢。

真实内存安装在 CPU 上。真实内存指的是 RAM 硬件,数据在其中被临时保存以供即时和活跃使用。(程序员也将真实内存称为物理内存或主内存。)相比之下,辅助存储器被认为是非易失性的,意味着即使机器关闭并断开电源,此类存储设备仍能保持存储能力。这与 RAM 不同,其他一些性能变量也有差异。 

倘若将这两种类型重新构造成汽车,RAM 就像一辆闪亮的小跑车:速度快、价格昂贵,且仅能勉强容纳一名驾驶员和一名乘客(容量小)。辅助存储器则速度较慢且更便宜,像一辆经济型小型货车,容量远大于主存储器。

硬盘驱动器,也称为硬磁盘驱动器 (HDD),兼具存储单元和播放器的功能,而硬盘本身是 HDD 内部的物理盘片,磁性数据在其上编码。

在大多数情况下,HDD的使用已被固态驱动器 (SSD) 取代。SSD  执行相同的功能,但使用闪存,其形式为不需要活动部件的非易失性存储芯片。SSD 凭借其强劲的速度、更薄的物理外形和更低的功耗,优于 HDD。

虚拟内存的运作方式是,临时转换那些之前被使用过但随后一直休眠、未被使用一段时间的 RAM。操作系统从那些几乎未使用的 RAM 中提取数据,并将其放入硬盘驱动器上的交换文件(或页面文件)中。

然后,操作系统会将新清理出来的 RAM 立即投入使用。从该 RAM 中“借用”的额外内存有助于运行计算机用户的多个程序,不会出现任何系统性能故障,也不会察觉到运行速度下降。

IBM Power

使用 IBM Power 实现现代化和自动化

IBM 发明大师、STSM、IBM Power 混合云平台的 Joe Cropper 通过演示向您介绍 IBM Power 如何帮助您实现应用程序的现代化。

什么是页面逻辑?

关于数据,页面就像是通用货币,充当着基本的交换媒介。在虚拟内存管理中,它所调用的模块就是页面,即最小的数据单位。页面是连续的(相邻的)虚拟地址空间块。 

页面通常采用一种固定大小。最初,页面统一为 4 KB,这一大小历来是行业标准。近来,更现代的系统开始采用大得多的固定大小,甚至达到 2 MB 或 1 GB,乃至更大。 

在虚拟内存中,大多数页面为 4 KB 或 8 KB,具体取决于所遵循的架构。Microsoft Windows、Linux 和 Apple 的 macOS 均围绕 4 KB 的页面大小构建。UNIX 虚拟内存的页面大小则根据每个系统具体的硬件架构,按 32 位或 64 位系统来设定。(UNIX 系统通常为每个执行的进程分配 3 GB 到 4 GB 内存。)

在特定操作系统内,所有页面通常都会遵循同一种页面大小。这一规则的例外是动态分区,它会根据特定需求提供不同 大小的内存。让页面大小完全相同,能让操作系统更轻松地协同管理所有页面。

此外,由于大小一致,操作系统也更容易防止外部碎片的产生。外部碎片是指未使用的小块内存散布在已分配的内存块之间。其结果就是:可用内存过少,无法分配出一个连续有用的内存块。 

通过使用页面,操作系统可以映射出某个进程的逻辑内存,实质上将其转换为页框形式的非连续物理内存。页框是物理内存 (RAM) 的块,操作系统将其用作存放内存页面的一种容器。页框的大小与页面本身的大小一致,无论是 4 KB 还是更大的尺寸。 

CPU 会创建虚拟内存地址,作为内存位置引用,供该操作系统上运行的软件进程使用。程序员使用页表来跟踪和管理页框,并将其作为主要的数据结构。页表条目用于将虚拟地址链接到操作系统内的物理地址。 

虚拟页号 (VPN) 使用虚拟地址的前 20 位,作为该计算机进程虚拟内存空间中虚拟地址空间的标识符。页号标识了页面,以便内存管理单元 (MMU) 能够从物理内存帧或磁盘中检索到它。

同时,地址的其余部分用作页偏移量,用于指定该页面在操作系统中的确切物理位置,精确到每个单独字节的位置。

了解抖动和缺页

在理想情况下,计算机的 RAM 足以运行程序。然而,现代计算极为适合多任务处理,同时运行多个程序,这很容易扰乱内存分配过程。这种更高的需求经常对操作系统的可用内存提出过度要求。 

当可用磁盘空间完全耗尽时,虚拟内存便会介入,维持程序运行。然而,这种运行扩展通常代价高昂:运行速度。虚拟内存的运转速度比物理 RAM 慢(因为访问存储驱动器需要更长时间)。因此,操作系统占用的虚拟内存越多,操作者就越可能遭遇性能下降。 

这种性能下降称为“抖动”。抖动也指一种持续且功能失常的运行状态,操作系统将大部分处理能力用于在内存中换入换出数据,而非执行代码。

另一种经常发生的现象称为“缺页”。缺页发生在运行中的程序试图获取某个数据页,而该页当时未映射到其物理 RAM 中时。

这会引发硬件中断,同时操作系统内核中的缺页处理程序被激活。操作系统内核从辅助存储源访问所需数据。然后,操作系统更新跟踪所有虚拟地址及其对应物理地址 的页表,之后返回正常的程序运行。 

缺页有多种形式,每种根据其严重程度分类:

  • 次要缺页:次要(或“软”)缺页指这样一种情况,即特定页可在物理内存中找到,但尚未映射到该进程的页表或共享内存中。
  • 主要缺页:当所需页面完全不在 RAM 中时,缺页就成为主要缺页,这意味着该页必须从磁盘加载——这必然导致加载过程更长。
  • 无效缺页:最严重的缺页试图阻止访问非法内存的操作。由此产生的操作——段错误——通常会导致程序停止运行。

需求分页方法

操作系统简化处理的一种方式是通过需求分页。这种技术放弃预先加载整个程序,而仅加载任何特定时刻所需的那些页面。

好处是,系统可以通过这种方式运行更多程序。缺点则是可能意味着高发的缺页(可能导致抖动),原因是不断中断程序运行以从存储中检索页面。

多种基于算法的方法与需求分页结合使用。这些页面置换算法各自以独特的思路处理问题: 

  • 有些系统采用最近最少使用 (LRU) 方法。这种缓存淘汰算法可以描述为“不用即弃”。LRU 通过根据缓存项未被使用的时间长度来清理缓存,帮助优化内存使用。如果缓存达到最大容量,在缓存中驻留最长时间而未被访问的项将被从缓存中删除。 
  • 先进先出 (FIFO) 涉及最早按顺序加载的最旧页面。如果缓存已满,该页面将第一个被淘汰。
  • 二次机会算法实际上是对先进先出算法的复核,它会检查以确保即将被淘汰的页面最近未被以任何方式使用过。
  • 顾名思义,最佳算法表示一种最理想的情况,即(非常出色的)算法推断出哪个页面未来被使用的可能性最小,并标记它以备后续淘汰。由于最佳算法需要如此复杂的预测,它通常被认为更适合用于理论讨论和规划目的,而非实际实现。
Phill Powell

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

相关解决方案
IBM Storage Fusion

通过统一存储、保护和编排 AI 、VM 和容器工作量,实现更快、更具弹性的运营。

深入了解 IBM Storage Fusion
IBM 虚拟化解决方案

通过高效、灵活的虚拟化方案,跨虚拟和物理环境优化并扩展工作量。

深入了解 IBM 虚拟化解决方案
IBM 基础架构服务

面向 IBM® Systems 服务器和存储空间的全面技术专业知识。

深入了解 IBM 基础设施服务
采取后续步骤

通过统一的数据服务和虚拟化,强化您的基础设施,在混合环境中支撑弹性、高性能的工作量。

  1. 了解 IBM Storage Fusion
  2. 深入了解 IBM 虚拟化解决方案