本质上,当过多计算机程序耗尽内存时,虚拟内存使操作系统能够将随机存取存储器 (RAM) 转用于硬盘驱动器。
一个简明的金融类比可以恰当地描述这种情形:把您计算机中的物理内存想象成个人支票账户里的钱。一切正常,所有功能都运转良好,直到您耗尽资金。一旦触及底线,您的银行(提供支票账户透支保护)便会发放透支(虚拟内存),暂时覆盖账户支出。
这种透支有明显的限制。首先,财务上限控制着银行愿意支持的支出规模。另外,还有时间限制,规定金融机构允许这种状况持续多久,而无需向您的账户注入紧急资金。
虚拟内存是计算机系统的重要组成部分,能让整体运行更顺畅,但必须注意,它并非可持续的永久解决方案。它旨在提供应急容量的内存。更像是一种权宜之计,算是能把事情办成——但仅限于当下。
虚拟内存是现代计算的产物;其核心不过是更新了“拆东墙补西墙”这一古老概念,即资源从一处转移到另一处。
通过 Think 时事通讯,了解有关 AI、自动化、数据等方面最重要且最有趣的行业趋势。请参阅 IBM 隐私声明。
中央处理器 (CPU) 是计算机的主要功能部件,它使用不同形式的内存。RAM 是一种更快、可更迅速访问的内存使用形式,但容量并非无限。而 CPU 的硬盘驱动器则提供了大量的磁盘存储空间,但访问时间较慢。
真实内存安装在 CPU 上。真实内存指的是 RAM 硬件,数据在其中被临时保存以供即时和活跃使用。(程序员也将真实内存称为物理内存或主内存。)相比之下,辅助存储器被认为是非易失性的,意味着即使机器关闭并断开电源,此类存储设备仍能保持存储能力。这与 RAM 不同,其他一些性能变量也有差异。
倘若将这两种类型重新构造成汽车,RAM 就像一辆闪亮的小跑车:速度快、价格昂贵,且仅能勉强容纳一名驾驶员和一名乘客(容量小)。辅助存储器则速度较慢且更便宜,像一辆经济型小型货车,容量远大于主存储器。
硬盘驱动器,也称为硬磁盘驱动器 (HDD),兼具存储单元和播放器的功能,而硬盘本身是 HDD 内部的物理盘片,磁性数据在其上编码。
在大多数情况下,HDD的使用已被固态驱动器 (SSD) 取代。SSD 执行相同的功能,但使用闪存,其形式为不需要活动部件的非易失性存储芯片。SSD 凭借其强劲的速度、更薄的物理外形和更低的功耗,优于 HDD。
虚拟内存的运作方式是,临时转换那些之前被使用过但随后一直休眠、未被使用一段时间的 RAM。操作系统从那些几乎未使用的 RAM 中提取数据,并将其放入硬盘驱动器上的交换文件(或页面文件)中。
然后,操作系统会将新清理出来的 RAM 立即投入使用。从该 RAM 中“借用”的额外内存有助于运行计算机用户的多个程序,不会出现任何系统性能故障,也不会察觉到运行速度下降。
关于数据,页面就像是通用货币,充当着基本的交换媒介。在虚拟内存管理中,它所调用的模块就是页面,即最小的数据单位。页面是连续的(相邻的)虚拟地址空间块。
页面通常采用一种固定大小。最初,页面统一为 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 中时。
这会引发硬件中断,同时操作系统内核中的缺页处理程序被激活。操作系统内核从辅助存储源访问所需数据。然后,操作系统更新跟踪所有虚拟地址及其对应物理地址 的页表,之后返回正常的程序运行。
缺页有多种形式,每种根据其严重程度分类:
操作系统简化处理的一种方式是通过需求分页。这种技术放弃预先加载整个程序,而仅加载任何特定时刻所需的那些页面。
好处是,系统可以通过这种方式运行更多程序。缺点则是可能意味着高发的缺页(可能导致抖动),原因是不断中断程序运行以从存储中检索页面。
多种基于算法的方法与需求分页结合使用。这些页面置换算法各自以独特的思路处理问题:
通过统一存储、保护和编排 AI 、VM 和容器工作量,实现更快、更具弹性的运营。
通过高效、灵活的虚拟化方案,跨虚拟和物理环境优化并扩展工作量。
面向 IBM® Systems 服务器和存储空间的全面技术专业知识。