【软件开发底层知识修炼】四 深入浅出处理器之四 结合高速缓存以及TLB与虚拟内存

学习交流加

  • 个人qq:
    1126137994
  • 个人微信:
    liu1126137994
  • 学习交流资源分享qq群:
    962535112

文章目录

  • 0、回顾
  • 1、高速缓存(Cache)的引入
  • 2、利用TLB加速地址翻译
  • 3、Cache与物理内存是如何映射的
    • 3.1、直接映射法:
    • 3.2、直接映射原理
    • 3.3、直接映射法的特点
  • 4、总结

上一篇文章学习了(点击链接查看上一篇文章上一篇文章):

  • 虚拟内存的概念与交换区的概念

  • MMU的作用

  • 虚拟内存机制的意义

    • 虚拟内存作为内存管理工具
    • 虚拟内存作为内存保护工具
  • 页表的概念

  • 页命中与缺页

  • 程序的局部性在虚拟内存中的作用

  • MMU的地址翻译过程

0、回顾

回顾上一篇文章,这里再补充一下:

  • 当页命中时,CPU硬件执行的步骤

在这里插入图片描述

注释:VA:虚拟地址 PTEA:页表条目地址 PTE:页表条目 PA物理内存地址

如上图,CPU的执行步骤如下:

  1. 处理器生成一个虚拟地址,并把它传送给MMU
  2. MMU生成PTE地址,并从高速缓存/物理内存请求得到它
  3. 高速缓存/物理内存向MMU返回PTE
  4. MMU根据得到的PTE索引页表,从而构造物理地址,并把物理地址传送给高速缓存/物理内存
  5. 高速缓存/物理内存返回请求的数据或者指令给CPU
  • 当缺页时,CPU的硬件执行过程

在这里插入图片描述

注释:VA:虚拟地址 PTEA:页表条目地址 PTE:页表条目

如上图,CPU的执行步骤如下:

  1. 处理器生成一个虚拟地址,并把它传送给MMU
  2. MMU生成PTE地址,并从高速缓存/物理内存请求得到它
  3. 高速缓存/物理内存向MMU返回PTE
  4. PTE中的有效位是0,所以MMU触发了一次异常,传递CPU中的控制到操作系统内核中的缺页异常处理程序
  5. 缺页异常处理程序确定出物理内存中的牺牲页,如果这个页面被修改了,就将它换出道磁盘
  6. 缺页异常处理程序将需要的页面调入到高速缓存/物理内存,并更新内存中的PTE
  7. 缺页异常处理程序返回到原来的进程,再次执行导致缺页的指令。CPU将引起缺页的地址再次发送给MMU。因为虚拟页面现在缓存在物理内存中了,所以此次就会命中,物理内存就会将所请求的数据或者指令返回给CPU

可以看到,页命中与缺页的前三步,都是一样的。我们还可以总结出一个重要的结论:
页命中完全是由硬件来处理的,而缺页,却是由硬件和操作系统内核共同完成的。

1、高速缓存(Cache)的引入

看看上面分析页命中与缺页的过程中,出现了高速缓存,如果只有物理内存很好理解,现在出现高速缓存是啥意思?

学习过上一篇文章,我们应该可以理解页命中,缺页这些简单的概念以及虚拟地址的寻址过程(如果不明白,建议先学习上一篇文章)。

我们知道,CPU寻址时,从内存中获取指令与数据的时间还是相当大的(CPU的速度远远大于内存的速度)。所以高速缓存(Cache)就出现了。

  • Cache是一种小容量高速存储器
  • Cache的存取速度与CPU的运算速度几乎同量级
  • Cache在现代计算机系统中直接内置于处理器芯片中
  • 在处理器和内存之间设置cache(精确来讲是将Cache放在MMU与物理内存之间)
  • 把内存中被频繁访问的数据和指令复制到cache中
  • 页表也在内存中,将被频繁访问的PTE,复制到Cache中
  • 大多数情况下,CPU可以直接从cache中取指令与数据

如下图,我们先来看一个高速缓存与虚拟内存结合的例子,看看此时CPU的访问过程:
在这里插入图片描述

这个图,其实很好理解!!!当MMU要查询PTEA以及PA时,都先去高速缓存中先查一下,看看有没有,如果高速缓存中有PTEA与PA,直接从高速缓存中获取数相应的PTE与数据。

如果高速缓存中没有相应的PTEA或者PA时,就去物理内存中获取,然后从物理内存中获取之后,将获取到的PTE或者数据再缓存到高速缓存中,然后高速缓存将获取到的数据返回给CPU执行。

注意:因为Cache是放在MMU与物理内存之间的,所以高速缓存无需处理保护问题,因为访问权限的检查是MMU地址翻译过程的一部分。

2、利用TLB加速地址翻译

学到了这里,我们应该很清楚地址翻译的过程了。如果不清楚,就需要看上一篇文章或者深入理解计算机系统第九章。

在地址翻译的过程中,CPU每产生一个虚拟地址(VP),MMU都要去别的地方查询一个PTE。这个别的地方指:高速缓存或者物理内存。

在最坏的情况下(缺页),需要访问两次物理内存。这种开销是极其昂贵的。

在最好的情况下,MMU也需要去高速缓存中获取PTE对应的值。虽然高速缓存已经很快了,但是相对于CPU内部来说,还是有点慢。

那么能不能MMU不去别的地方获取PTE?能不能在MMU内部也搞一个类似于高速缓存的东西,来存储一部分经常被访问的PTE?答案是可以的!!!

在MMU中,有一个小的缓存,称为翻译后备缓冲器(TLB)

如下图示来看看带有TLB的 MMU,且TLB命中时,是如何执行的

在这里插入图片描述

  1. CPU产生一个虚拟地址
  2. 第二部和第三部是MMU从TLB中取出相应的PTE
  3. MMU将这个虚拟地址翻译成一个物理地址,并将它发送到高速缓存/物理内存。
  4. 高速缓存/物理内存将所请求的数据字返回给CPU

我们可以看到,TLB是虚拟寻址的缓存。

下面再来看看TLB不命中时,是如何执行的

在这里插入图片描述

当TLB不命中时,关键点在于,MMU必须从L1高速缓存中获取到相应的PTE,新取出的PTE再放到TLB中,此时可能会覆盖一个已经存在的条目。那么当TLB中有了相应的PTE,MMU再去TLB中查找…

3、Cache与物理内存是如何映射的

这里我们只学习一下直接映射法:

3.1、直接映射法:

  • 将cache和物理内存分成固定大小的块(如512byte/块)

  • 物理内存中的每一块在cache中都有固定的映射位置

  • 对应的映射公式为:

    • Pos(cache) = 内存块号 % cache总块数

如图:
在这里插入图片描述

注意:任意一个物理内存块都可以映射到唯一固定的cache块(物理内存不同的块,可以映射到同一个cache块)。

3.2、直接映射原理

比如我们想要访问某一个物理地址,我们如何知道这个地址是否在cache中?或者如何知道它在cache中的位置?

首先,现在只有一个物理地址,需要根据这个物理地址进行判断。

看下面,对物理地址有一个划分:
在这里插入图片描述
以上的物理地址分为3部分,都是什么意思呢?

我们利用以下规则来判断;

  • 根据物理地址的中间的c位,找到cache中对应的块

  • 比较物理地址的高t位,让它与cache中的flag比较,看是否相同

    • 如果相同:说明数据在高速缓存中有缓存,那么此时根据物理内存的b位找到cache对应的块中的偏移
    • 如果不同:说明数据在缓存中没有缓存,此时就将物理内存中对应的数据复制到cache中

比如下面这个例子:
在这里插入图片描述

3.3、直接映射法的特点

我们已经知道,直接映射法,很有可能不同的物理内存块映射到相同的cache块。所以直接映射法这样会导致缓存失效。但是直接映射法过程简单,所需耗时短!!

4、总结

下面笼统的用流程图概括一下处理器的数据访问过程:
在这里插入图片描述

本篇文章学会了以下内容;

  • 高速缓存的作用
  • TLB的作用
  • 物理内存与cache之间的映射原理

本文章参考狄泰软件学院相关课程与深入理解计算机系统第九章内容
想学习的可以加狄泰软件学院群,
群聊号码:199546072

本人积累了无数的技术电子书籍与各类技术的视频教程,可以加好友共同探讨学习交流。
学习探讨加个人:
qq:1126137994
微信:liu1126137994

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

研发中会使用到的工具

研发中会使用到的工具分享一下后续持续更新

【软件开发底层知识修炼】五 gcc-C语言编译器

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 文章目录1、GCC与gcc2、gcc的幕后工作3、实用的gcc选项3.1、预处理选项-解决宏错误3.2、-S参数-辅助编写汇编程序的好方法3.3、获取系统头文件路径3.4…

思维模型分享

思维模型1.思维建模1.1 模型的用途1.2构建模型的3种方法1.3多样性预测定理1.4分类模型1.5 变差模型1.5.1 解释变差的百分比1.6 模型误差分解定理1.7 多模型思维1.8 对人类行为建模1.8.1 理性行为者模式2.模型思维2.1 正态分布2.2中心极限定理2.2.1 平方根法则2.2.2 检验显著性2…

在工程中最常用的 vim使用技巧

学习交流加(可免费帮忙下载CSDN资源):个人微信: liu1126137994学习交流资源分享qq群1(已满): 962535112学习交流资源分享qq群2: 780902027 文章目录1、vim编辑常用快捷键2、文件索引…

动态规划过程

动态规划过程应用背包问题:分享一下 有一个背包,容量是4磅,现有如下产品 1)要求达到的目标为装入的背包的总价值最大,并且要求重量不能超出 2) 要求转入的物品不能重复 思路分析:算法其实是模型建立的过程 …

【剑指offer - C++/Java】5、用两个栈实现队列

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 牛客网题目链接:用两个栈实现队列 文章目录1、题目分析2、代码Java代码:C代码3、总结题目描述: 用两个栈来实现一…

【剑指offer - C++/Java】6、旋转数组的最小数字

题目链接:旋转数组的最小数字 文章目录1、题目描述2、题目分析3、代码3.1 Java代码3.2、C代码4、总结1、题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小…

设计模式-责任链模型

责任链模式场景: OA审批系统 CEO 审批项目 经费 500万<x ≤\leq≤ 1000万总监 审批的经费 300万 < x ≤\leq≤ 500万总监秘书 审批的经费 100万< x ≤\leq≤ 300万研发经理 审批的经费 50万 <x ≤\leq≤ 100万 传统方式 是 (接收到请求后&#xff0c;根据相应金额&…

【OS学习笔记】三 计算机的启动过程

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章迈进了汇编的大门&#xff0c;点击链接查看上一篇文章&#xff1a;汇编语言和汇编软件 上一篇文章大概学会以下内容&#xff1a; 了解汇编…

【OS学习笔记】四 什么是虚拟机

虚拟机是软件 对于第一次听说虚拟机&#xff08;Virtual Machine&#xff0c;VM&#xff09;的人来说&#xff0c;可能以为还要再花钱买一台计算机&#xff0c;这恐怕是他们最担心的。所谓虚拟机&#xff0c;就是在你的计算机上再虚拟出另一台计算机来。这台虚拟出来的计算机&…

TCP/IP协议族之运输层(TCP流量控制和拥塞控制 [1])

TCP的流量控制 1. 利用滑动窗口实现流量控制 如果发送方把数据发送得过快&#xff0c;接收方可能会来不及接收&#xff0c;这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快&#xff0c;要让接收方来得及接收。 利用滑动窗口机制可以很方便地在TCP连接上实现…

英语词源记忆法

英语词源记忆法后续持续更新中

【OS学习笔记】五 VirtualBox的下载、安装和配置

上一篇文章学习了&#xff1a;计算机的启动过程&#xff08;点击链接查看上一篇文章&#xff09; 今天来接着上一篇文章&#xff0c;解决我们学习中的实验环境问题。 参考&#xff1a;X86汇编语言-从实模式到保护模式。作者李忠。纯学习笔记。如有侵权请联系我删除 1、下载O…

spring体系思维导图

spring体系思维导图1. spring 思维导图2. springboot 思维导图3. springcloud 思维导图之前整理的&#xff0c;后续持续更新中1. spring 思维导图 2. springboot 思维导图 3. springcloud 思维导图

idea模板

idea模板1.类注解模板2.方法注解模板3.自定义代码生成模板每次下载新版本的idea 或者换笔记本都需要重新&#xff0c;配置注解&#xff0c;而且从网上找了很多都或多或少有问题&#xff0c;每次要花费一些时间配置&#xff0c;这里整理一下。自定义代码生成模版&#xff0c;设置…

【OS学习笔记】六 实模式:编写主引导扇区代码

上一篇文章学习了&#xff1a;计算机的启动过程&#xff08;点击链接查看上一篇文章&#xff09; 这篇文章学习记录为&#xff1a;编写主引导扇区代码。 参考&#xff1a;《X86汇编语言-从实模式到保护模式》-李忠。纯学习笔记&#xff0c;更详细内容请阅读正版书籍。如有侵权…

【OS学习笔记】七 Bochs的下载、安装和配置

参考&#xff1a;《X86汇编语言-从实模式到保护模式》-李忠。纯学习笔记&#xff0c;更详细内容请阅读正版书籍。 1 开源的BOCHS虚拟机软件 Bochs是开源软件。它用软件来模拟处理器取指令和执行指令的过程&#xff0c;以及整个计算机硬件。当它开始运行时&#xff0c;就直接模…

【OS学习笔记】八 实模式:编写主引导扇区代码-另一种更高效的写法

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章&#xff0c;我们用比较原始的方法编写了主引导扇区的代码。点击链接查看上一篇文章&#xff1a;编写主引导扇区代码 本片文章将学习以下内…

【OS学习笔记】九 实模式:从汇编的角度理解栈结构

上一篇文章以一种更加高效的方法编写了主引导扇区的代码。主要是引入了循环和跳转指令。点击链接查看上一篇文章&#xff1a;编写主引导扇区代码-另一种更高效的写法 本篇文章&#xff0c;继续上一篇文章的学习。同样还是编写汇编代码加载到主引导扇区让CPU直接执行。但是我们…