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

学习交流加缓存

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

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

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

  • MMU的做用学习

  • 虚拟内存机制的意义操作系统

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

  • 页命中与缺页翻译

  • 程序的局部性在虚拟内存中的做用3d

  • MMU的地址翻译过程cdn

0、回顾

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

  • 当页命中时,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

能够看到,页命中与缺页的前三步,都是同样的。咱们还能够总结出一个重要的结论: 页命中彻底是由硬件来处理的,而缺页,倒是由硬件和操做系统内核共同完成的。

一、高速缓存(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地址翻译过程的一部分。

二、利用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中查找......

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

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

3.一、直接映射法:

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

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

  • 对应的映射公式为:

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

如图:

在这里插入图片描述

注意:任意一个物理内存块均可以映射到惟一固定的cache块(物理内存不一样的块,能够映射到同一个cache块)。

3.二、直接映射原理

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

首先,如今只有一个物理地址,须要根据这个物理地址进行判断。

看下面,对物理地址有一个划分:

在这里插入图片描述
以上的物理地址分为3部分,都是什么意思呢?

咱们利用如下规则来判断;

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

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

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

好比下面这个例子:

在这里插入图片描述

3.三、直接映射法的特色

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

四、总结

下面笼统的用流程图归纳一下处理器的数据访问过程:

在这里插入图片描述

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

  • 高速缓存的做用
  • TLB的做用
  • 物理内存与cache之间的映射原理
相关文章
相关标签/搜索