本文将从高层次探讨什么是虚拟内存、它存在的原因以及它是如何工作的。
在之前的文章中,我们讨论了CPU 缓存的好处。缓存是由于内存访问速度和 CPU 处理能力之间的差异而发明的。通过使用硬件缓存,最近从主内存加载的项目存储在更小的内存中,更靠近 CPU,以便在需要时可以快速检索它们。因此,缓存解决了速度问题。
但是容量呢?
在本文中,我们将了解什么是虚拟内存以及它如何帮助解决 CPU 容量问题。
内存层次结构
现代计算机系统可以同时运行数十个甚至数百个不同的应用程序。由于内存是一种有限资源,随着越来越多的应用程序消耗它,性能可能会下降,甚至完全停止。这就是虚拟内存的用武之地。图 1 显示了一个内存层次结构,包括高速缓存、主内存和虚拟内存。
图 1. 内存层次结构
如图 1 所示,虚拟内存的存在是为了增加系统的内存容量。这是通过将磁盘驱动器的一部分作为“看起来”像主内存的专用内存块分配给可能需要它的任何应用程序来完成的。
为了防止磁盘访问降低速度性能,主内存充当虚拟内存的完全关联缓存,存储最近访问的磁盘位置。因此,通过使用虚拟内存,主内存成为缓存层次结构中的另一层。
虽然细节超出了本文的范围,但应该注意的是,虚拟内存是通过计算机操作系统和处理器的内存管理单元 (MMU) 之间的交互来管理和控制的。
缓存与分页
回想一下,高速缓存将物理内存地址分解为多个字段。这样做是为了识别存储最近访问的数据的缓存条目。对于完全关联的缓存,这些字段是缓存标记和字节偏移。缓存条目由匹配的标签和包含数据的缓存块组成。
如果没有找到匹配的标签,这称为缓存未命中。
图 2. 缓存命名法
虚拟内存的工作方式类似,但使用虚拟地址的概念。
虚拟地址由虚拟页号和页偏移量组成。虚拟地址用于定位内存中称为页框的项,通常大小为 4kB。
页框包含页框号和实际数据,简称为页。
页偏移量用于访问 4kB 页内的单个字。如果虚拟地址不指向在物理内存中找到的位置,则会发生页面错误,并且系统必须向磁盘驱动器发出请求的数据。当确实发生页面错误时,磁盘上的页面被移动到内存中的页面框架。在主存和磁盘之间移动页面称为分页(或交换)。
图 3. 分页命名法
由于使用虚拟内存来扩展系统内存的容量,因此需要一种既考虑磁盘上的位置又考虑主内存中的位置的寻址方案。这就是虚拟地址的用武之地。
虚拟地址跨越磁盘驱动器和主内存,导致虚拟地址多于物理内存地址。因此,在访问页面中的数据之前,系统必须确定该数据是驻留在物理内存还是虚拟内存中。这是通过地址转换完成的。
图 4. 虚拟地址映射到虚拟和物理内存
地址翻译
如前所述,物理内存充当虚拟内存的完全关联缓存。回想一下,完全关联的缓存是具有多个条目的单个集合。每个条目都与缓存标记进行比较以进行匹配。由于页面大小为 4kB,即使是小型虚拟内存系统也需要数千个比较器电路。为了解决这个问题,使用了页表。
页表
页表是一种将虚拟页号(虚拟地址的一部分)映射到页框号的数据结构。
页表包含每个虚拟地址的条目以及表示该页面是否在物理内存中的有效位。如果页表项有效,则将页帧号与页偏移量(虚拟地址的另一部分)结合起来构建物理内存地址,即所需数据在内存中的存储位置。图 5 说明了如何使用页表将虚拟地址转换为物理地址。
图 5. 使用页表进行地址转换
重要的是要记住,页框号代表页面的存储位置,而物理地址代表页面中单个字的位置。如果页表项的有效位未设置,则虚拟地址必须映射到存储在磁盘上的页。
页表本身与用于定位的页一起存储在主存中。因此,使用页表,读取或写入任何页实际上需要两次内存访问。这似乎违反直觉,如果不是翻译后备缓冲区或 TLB,它会导致很大的性能损失。
翻译后备缓冲区
由于页面大小为 4kB,因此页面内的数据同时表现出时间和空间局部性。这使得页表条目成为缓存的完美候选者。
转换后备缓冲区或 TLB 是一个小型的完全关联缓存,用于存储最近访问的页表条目。通过缓存最近使用的页表条目,系统可以放弃多次查找页表,从而避免两次访问内存的问题。TLB 通常只包含几百个条目,但它的命中率非常高(高达 99%)。
图 6 显示了一个具有四个条目的 TLB。
图 6. 实现为全关联缓存的简化 TLB
结论
本文介绍了虚拟内存的概念。虚拟内存是用于扩展系统容量的内存系统的扩展。
虚拟内存还允许在应用程序或进程之间保护和隔离内存。它由计算机的操作系统和处理器的 MMU 控制和管理。虚拟内存通过分配一部分磁盘空间作为系统内存的一部分来工作。
作为内存层次结构的扩展,虚拟内存已成为计算机整体架构的基本组成部分。了解虚拟内存可以增强您在日益复杂的世界中对计算机的理解。
-
内存
+关注
关注
8文章
2996浏览量
73870 -
虚拟内存
+关注
关注
0文章
70浏览量
8050
发布评论请先 登录
相关推荐
评论