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