0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深度剖析虚拟内存

科技观察员 来源:allaboutcircuits 作者: 斯蒂芬·圣迈克尔 2022-04-28 17:06 次阅读

本文将从高层次探讨什么是虚拟内存、它存在的原因以及它是如何工作的。

在之前的文章中,我们讨论了CPU 缓存的好处。缓存是由于内存访问速度和 CPU 处理能力之间的差异而发明的。通过使用硬件缓存,最近从主内存加载的项目存储在更小的内存中,更靠近 CPU,以便在需要时可以快速检索它们。因此,缓存解决了速度问题。

但是容量呢?

在本文中,我们将了解什么是虚拟内存以及它如何帮助解决 CPU 容量问题。

内存层次结构

现代计算机系统可以同时运行数十个甚至数百个不同的应用程序。由于内存是一种有限资源,随着越来越多的应用程序消耗它,性能可能会下降,甚至完全停止。这就是虚拟内存的用武之地。图 1 显示了一个内存层次结构,包括高速缓存、主内存和虚拟内存。

poYBAGJqWTGAZ5HWAAAd69G80zw354.jpg

图 1. 内存层次结构

如图 1 所示,虚拟内存的存在是为了增加系统的内存容量。这是通过将磁盘驱动器的一部分作为“看起来”像主内存的专用内存块分配给可能需要它的任何应用程序来完成的。

为了防止磁盘访问降低速度性能,主内存充当虚拟内存的完全关联缓存,存储最近访问的磁盘位置。因此,通过使用虚拟内存,主内存成为缓存层次结构中的另一层。

虽然细节超出了本文的范围,但应该注意的是,虚拟内存是通过计算机操作系统处理器的内存管理单元 (MMU) 之间的交互来管理和控制的。

缓存与分页

回想一下,高速缓存将物理内存地址分解为多个字段。这样做是为了识别存储最近访问的数据的缓存条目。对于完全关联的缓存,这些字段是缓存标记和字节偏移。缓存条目由匹配的标签和包含数据的缓存块组成。

如果没有找到匹配的标签,这称为缓存未命中。

pYYBAGJqWTKABv6CAAAXNE9Z0qY727.jpg

图 2. 缓存命名法

虚拟内存的工作方式类似,但使用虚拟地址的概念。

虚拟地址由虚拟页号和页偏移量组成。虚拟地址用于定位内存中称为页框的项,通常大小为 4kB。

页框包含页框号和实际数据,简称为页。

页偏移量用于访问 4kB 页内的单个字。如果虚拟地址不指向在物理内存中找到的位置,则会发生页面错误,并且系统必须向磁盘驱动器发出请求的数据。当确实发生页面错误时,磁盘上的页面被移动到内存中的页面框架。在主存和磁盘之间移动页面称为分页(或交换)。

poYBAGJqWTOALMsGAAAeyj6z328352.jpg

图 3. 分页命名法

由于使用虚拟内存来扩展系统内存的容量,因此需要一种既考虑磁盘上的位置又考虑主内存中的位置的寻址方案。这就是虚拟地址的用武之地。

虚拟地址跨越磁盘驱动器和主内存,导致虚拟地址多于物理内存地址。因此,在访问页面中的数据之前,系统必须确定该数据是驻留在物理内存还是虚拟内存中。这是通过地址转换完成的。

pYYBAGJqWTSABcN2AACBSuy04QE782.jpg

图 4. 虚拟地址映射到虚拟和物理内存

地址翻译

如前所述,物理内存充当虚拟内存的完全关联缓存。回想一下,完全关联的缓存是具有多个条目的单个集合。每个条目都与缓存标记进行比较以进行匹配。由于页面大小为 4kB,即使是小型虚拟内存系统也需要数千个比较器电路。为了解决这个问题,使用了页表。

页表

页表是一种将虚拟页号(虚拟地址的一部分)映射到页框号的数据结构。

页表包含每个虚拟地址的条目以及表示该页面是否在物理内存中的有效位。如果页表项有效,则将页帧号与页偏移量(虚拟地址的另一部分)结合起来构建物理内存地址,即所需数据在内存中的存储位置。图 5 说明了如何使用页表将虚拟地址转换为物理地址。

poYBAGJqWTWAYnlXAABY5Fg_APQ762.jpg

图 5. 使用页表进行地址转换

重要的是要记住,页框号代表页面的存储位置,而物理地址代表页面中单个字的位置。如果页表项的有效位未设置,则虚拟地址必须映射到存储在磁盘上的页。

页表本身与用于定位的页一起存储在主存中。因此,使用页表,读取或写入任何页实际上需要两次内存访问。这似乎违反直觉,如果不是翻译后备缓冲区或 TLB,它会导致很大的性能损失。

翻译后备缓冲区

由于页面大小为 4kB,因此页面内的数据同时表现出时间和空间局部性。这使得页表条目成为缓存的完美候选者。

转换后备缓冲区或 TLB 是一个小型的完全关联缓存,用于存储最近访问的页表条目。通过缓存最近使用的页表条目,系统可以放弃多次查找页表,从而避免两次访问内存的问题。TLB 通常只包含几百个条目,但它的命中率非常高(高达 99%)。

图 6 显示了一个具有四个条目的 TLB。

pYYBAGJqWTaAEDYsAAAvMV3X6bo685.jpg

图 6. 实现为全关联缓存的简化 TLB

结论

本文介绍了虚拟内存的概念。虚拟内存是用于扩展系统容量的内存系统的扩展。

虚拟内存还允许在应用程序或进程之间保护和隔离内存。它由计算机的操作系统和处理器的 MMU 控制和管理。虚拟内存通过分配一部分磁盘空间作为系统内存的一部分来工作。

作为内存层次结构的扩展,虚拟内存已成为计算机整体架构的基本组成部分。了解虚拟内存可以增强您在日益复杂的世界中对计算机的理解。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72752
  • 虚拟内存
    +关注

    关注

    0

    文章

    70

    浏览量

    8018
收藏 人收藏

    评论

    相关推荐

    为什么需要虚拟内存

    《现代操作系统》03章 存储管理(二)0 前文3 虚拟内存3.1 简介3.2 分页3.2.1 page & page frame3.2.2 MMU的工作机制3.3 页表3.4 加速分页过程
    发表于 02-23 06:10

    如何定义虚拟内存

    本文将探讨什么是虚拟内存,它为什么存在,以及它如何工作。缓存的发明是因为内存访问速度和 CPU 处理能力之间的差异。通过使用硬件缓存,最近从主存储器加载的项目被存储在一个更小的内存中,更接近 CPU
    发表于 04-11 10:20

    虚拟内存是什么_虚拟内存有什么用

    虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器
    发表于 11-01 10:03 9596次阅读
    <b class='flag-5'>虚拟内存</b>是什么_<b class='flag-5'>虚拟内存</b>有什么用

    简单剖析虚拟内存与交换分区

    很多朋友会把虚拟内存认为就是交换分区。其实,虚拟内存并非真正存在的物理空间,它仅仅是一个虚拟的东西。
    的头像 发表于 02-09 08:44 5903次阅读

    了解虚拟内存内存分页的概念

    应用程序来说对物理内存地址一无所知。它只可能通过虚拟内存地址来进行数据读写。程序中表达的内存地址,也都是虚拟内存地址。进程对虚拟内存地址的操
    的头像 发表于 02-15 14:19 6739次阅读
    了解<b class='flag-5'>虚拟内存</b>和<b class='flag-5'>内存</b>分页的概念

    虚拟内存不足怎么解决

    电脑的虚拟内存不足以后,很多功能就无法使用了,且会弹出如下所示的页面。这就说明虚拟内存无法满足我们的使用需求,就需要咱们对电脑的虚拟内存进行重新设置。那么如何设置呢?请看下文。
    的头像 发表于 03-14 14:29 1.3w次阅读

    虚拟内存关闭了好不好

    首先,关掉虚拟内存肯定是不好的,如果内存小于16G的话,关掉容易出问题。虚拟内存,让系统托管最好。随着现在电脑可用内存的不断增大,虚拟内存
    的头像 发表于 03-14 14:41 1.9w次阅读

    虚拟内存设置多少合适

    虚拟内存是一种电脑内存管理的一种技术,虚拟内存通常用到的地方是玩大型游戏和使用较大的处理软件时候虚拟内存才能起到作用,下面小编就给大家介绍悉尼内存
    的头像 发表于 03-14 14:48 4.2w次阅读

    虚拟内存是什么意思

    虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器
    的头像 发表于 03-14 14:50 6898次阅读

    如何设置电脑的虚拟内存

    随着现在电脑的流行,各种品牌的电脑已经非常普遍了,而且配置越来越高,内存也越来越大,同时虚拟内存的扩展也增大了,那么虚拟内存怎么设置最好?下面来介绍一下。
    发表于 05-27 17:34 2035次阅读

    虚拟内存怎么设置_虚拟内存注意事项

    虚拟内存是什么呢?虚拟内存,它只是相对于我们平时用的内存而说的,就比如如果系统的物理内存的空间是处于入不敷出的状态的时候,电脑的操作系统此时就会在硬盘上开辟出来一块磁盘空间,并且将其当
    发表于 06-11 10:45 1810次阅读

    虚拟内存的概念与设置方法

    相信许多小伙伴们在使用电脑的时候都会遇到虚拟内存不足的提示,那小伙伴们是否知道什么叫做虚拟内存。今天小编就来为小伙伴们介绍一下虚拟内存的作用以及教大家如何去设置虚拟内存的容量,希望对小
    发表于 06-12 10:38 1298次阅读

    虚拟内存低如何解决

    现在计算机的使用频率相当高,在我们使用计算机的时候有时候就会出现虚拟内存低的情况,这时候我们就不知道该怎么办了?我们都知道虚拟内存的设置一般都是默认的,是由系统管理的大小,如果虚线虚拟内存低我们需要做的就是对
    发表于 06-13 10:36 952次阅读

    进程虚拟内存布局以及进程的虚拟内存分配释放流程,涉及的代码

    我们计划通过一系列文章来介绍虚拟内存分配/释放,缺页处理,内存压缩/回收,内存分配器等知识,梳理虚拟内存的管理。本章节结合代码介绍进程虚拟内存
    的头像 发表于 06-28 09:38 3581次阅读

    虚拟内存的基本概念

    对主存的抽象概念,即是虚拟内存(Virtual Memory)。 虚拟内存为每个进程提供了一个一致的、私有的地址空间,它让每个进程产生了一种自己在独享主存的错觉(每个进程拥有一片连续完整的内存空间) 。 理解不深刻的人会认为
    的头像 发表于 06-22 14:51 1057次阅读
    <b class='flag-5'>虚拟内存</b>的基本概念