学习交流加
- 个人qq:
1126137994- 个人微信:
liu1126137994- 学习交流资源分享qq群:
962535112
上一篇文章学习了(点击链接查看上一篇文章上一篇文章):
虚拟内存的概念与交换区的概念
MMU的作用
虚拟内存机制的意义
页表的概念
页命中与缺页
程序的局部性在虚拟内存中的作用
MMU的地址翻译过程
回顾上一篇文章,这里再补充一下:
注释:VA:虚拟地址 PTEA:页表条目地址 PTE:页表条目 PA物理内存地址
如上图,CPU的执行步骤如下:
注释:VA:虚拟地址 PTEA:页表条目地址 PTE:页表条目
如上图,CPU的执行步骤如下:
可以看到,页命中与缺页的前三步,都是一样的。我们还可以总结出一个重要的结论:
页命中完全是由硬件来处理的,而缺页,却是由硬件和操作系统内核共同完成的。
看看上面分析页命中与缺页的过程中,出现了高速缓存,如果只有物理内存很好理解,现在出现高速缓存是啥意思?
学习过上一篇文章,我们应该可以理解页命中,缺页这些简单的概念以及虚拟地址的寻址过程(如果不明白,建议先学习上一篇文章)。
我们知道,CPU寻址时,从内存中获取指令与数据的时间还是相当大的(CPU的速度远远大于内存的速度)。所以高速缓存(Cache)就出现了。
如下图,我们先来看一个高速缓存与虚拟内存结合的例子,看看此时CPU的访问过程:
这个图,其实很好理解!!!当MMU要查询PTEA以及PA时,都先去高速缓存中先查一下,看看有没有,如果高速缓存中有PTEA与PA,直接从高速缓存中获取数相应的PTE与数据。
如果高速缓存中没有相应的PTEA或者PA时,就去物理内存中获取,然后从物理内存中获取之后,将获取到的PTE或者数据再缓存到高速缓存中,然后高速缓存将获取到的数据返回给CPU执行。
注意:因为Cache是放在MMU与物理内存之间的,所以高速缓存无需处理保护问题,因为访问权限的检查是MMU地址翻译过程的一部分。
学到了这里,我们应该很清楚地址翻译的过程了。如果不清楚,就需要看上一篇文章或者深入理解计算机系统第九章。
在地址翻译的过程中,CPU每产生一个虚拟地址(VP),MMU都要去别的地方查询一个PTE。这个别的地方指:高速缓存或者物理内存。
在最坏的情况下(缺页),需要访问两次物理内存。这种开销是极其昂贵的。
在最好的情况下,MMU也需要去高速缓存中获取PTE对应的值。虽然高速缓存已经很快了,但是相对于CPU内部来说,还是有点慢。
那么能不能MMU不去别的地方获取PTE?能不能在MMU内部也搞一个类似于高速缓存的东西,来存储一部分经常被访问的PTE?答案是可以的!!!
在MMU中,有一个小的缓存,称为翻译后备缓冲器(TLB)
如下图示来看看带有TLB的 MMU,且TLB命中时,是如何执行的
我们可以看到,TLB是虚拟寻址的缓存。
下面再来看看TLB不命中时,是如何执行的
当TLB不命中时,关键点在于,MMU必须从L1高速缓存中获取到相应的PTE,新取出的PTE再放到TLB中,此时可能会覆盖一个已经存在的条目。那么当TLB中有了相应的PTE,MMU再去TLB中查找…
这里我们只学习一下直接映射法:
将cache和物理内存分成固定大小的块(如512byte/块)
物理内存中的每一块在cache中都有固定的映射位置
对应的映射公式为:
注意:任意一个物理内存块都可以映射到唯一固定的cache块(物理内存不同的块,可以映射到同一个cache块)。
比如我们想要访问某一个物理地址,我们如何知道这个地址是否在cache中?或者如何知道它在cache中的位置?
首先,现在只有一个物理地址,需要根据这个物理地址进行判断。
看下面,对物理地址有一个划分:
以上的物理地址分为3部分,都是什么意思呢?
我们利用以下规则来判断;
根据物理地址的中间的c位,找到cache中对应的块
比较物理地址的高t位,让它与cache中的flag比较,看是否相同
我们已经知道,直接映射法,很有可能不同的物理内存块映射到相同的cache块。所以直接映射法这样会导致缓存失效。但是直接映射法过程简单,所需耗时短!!
本篇文章学会了以下内容;
本文章参考狄泰软件学院相关课程与深入理解计算机系统第九章内容
想学习的可以加狄泰软件学院群,
群聊号码:199546072
本人积累了无数的技术电子书籍与各类技术的视频教程,可以加好友共同探讨学习交流。
学习探讨加个人:
qq:1126137994
微信:liu1126137994