本文讲什么?

老样子,在正式开始介绍“高速缓冲存储器”之前,我们先来了解一下其相关的信息。

我相信,上面这张图你一定已经非常熟悉了,没错,这就是在本章绪论说的“存储器的层次结构”。
上一讲我们介绍了存储层次结构中的L4,即主存。继续向上看,你会看到L3、L2、L1都是高速缓冲存储器。那么究竟什么是高速缓冲存储器呢?那就要从“速度”这个关键词说起。
随着计算机硬件行业的不断进步,以因特尔为首的芯片企业造出了一代又一代的高速CPU, 可以说CPU处理数据的速度是越来越快。但是从图中我们能够看到,L0-L6的设备的速度是逐渐下降的,而且速度相差越来越大。
虽然说近年来的存储技术也有进步,但是照着CPU就差远了。这就造成了CPU和主存之间速度差距越来越大。高速缓冲存储器的存在就是为了尽可能的消除这种差距。
在这个存储层次结构中,虽然高速缓冲存储器分为三个档次,但是他们的作用都是相同的,都是起到一种桥梁的作用,不同的只是速度和造价。此外,L1的速度几乎和寄存器的速度相同。接下来,我们来看看高速缓冲存储器在CPU中的具体位置。

这种结构进一步的验证了存储器的层次结构——高速缓冲存储器位于寄存器之下的特点。好了,说了这么多,那让我们来看看高速缓冲存储器的工作原理吧!

高速缓冲存储器(Cache)的工作原理

实际上,Cache的工作原理非常简单,就是利用了映射的方式来获取主存信息。
我们知道,主存的地址范围是2^n(即2^n个字),而每个字都有一个n位的地址。(不明白的可以翻翻这个系列的前几篇文章)。所谓映射,就是两个元素之间的对应关系。而我们很清楚,主存的容量肯定是远远大于高速缓冲存储器的。所以,这种映射必然是一对多的关系,某部分高速缓冲存储器中的内容对应着主存中的的吧部分内容。
为了实现上面所说的映射,我们需要对主存和缓存进行块的划分,使这些“字块”实现一对多的映射关系。简略图如下:
可以看见,我们将主存和缓存划分成了一个又一个的字块,从而实现映射关系。

CPU想要处理信息,首先就是看缓存(高速缓冲存储器)中是否存在信息,如果存在,那么好,就从缓存中读入一个字(一个字块可能包括多个字);如果缓存中没有数据,那么就会根据这种映射关系,将主存中的数据一个字块一个字块地映射到相应的位置,然后再由CPU进行读取即可。
这里有一个名词,叫做缓存命中和缓存不命中。上面说的两种情况中的第一种就是缓存命中,而后一种就是缓存不命中。命中率是衡量缓存的效率的。命中率越高,效率越好。命中率=缓存命中/(缓存命中+缓存不命中)。

上面说的例子,可以理解为映射中的第一种方式——直接相连映射。下面我们就来详细的了解一下映射方式。

主存——高速缓冲存储器之间的映射方式

直接映射

下图给出了直接映射的示意图:

直接相连映射可以说是一种最简单的方法,为什么这样说呢,因为他的逻辑最为清晰、也是最好理解的一种映射方式。
你可能会说,这么复杂的一个图你跟我说这是最简单的方法,你怕不是个傻子吧!不要急,听我慢慢说。
首先,先看Cache,Cache被分成了2^c 块,而主存则被分成了n*2^c, n就是n组,从图中的连接线可以很直观的看出,主存中的字块0~2^c-1 块对应着Cache中的0~2^c-1 块。而主存中的2^c 块则是对应着Cache中的第0块,依次类推。即主存中的每一组字块对应着Cache中的相应字块。
好了,对应关系说完了,我们来解释一下图中的其他内容。
首先说标记,标记代表的意义就是当前Cache字块中的数据是否有效。可以这样想,我们之前讲了缓存命中和缓存不命中,当CPU向缓存推送地址,说“我想拿到Cache中字块0上的数据”,那么好,Cache首先要看看字块0上的标记位是否为1,如果是1,就把这个数据给CPU,这就叫缓存命中;如果标记位为0,则说明此时Cache上的数据无效,则不推送,这就叫做缓存不命中。你可能会这样想:Cache上的数据不都是从主存上拿到的吗,为什么还会有无效的时候呢?这样的例子不少,比如说Cache刚通电的那一瞬间,这时候Cache上面是没有数据的,标记位的0就起了很大作用。如果发现是0的话,接着主存会向Cache推送数据的,这一点不必担心。看到这,我相信你肯定也知道比较器是个什么玩意了。

全相联映射

如果说直接相连映射是最简单的方法的话,那么全相连映射就是一种最粗暴的映射方式。还是先看图:

我相信你此时一定知道我为啥说这是一种相当粗暴的映射方式了,没错,看到那交错纵横的线,一开始我是拒绝的,这货太暴力了。
标记位自然是不用说,主要是这货的主存不分组,主存中的任何一个字块都可以映射到Cache中的任何一个字块,所以看起来十分的凌乱。但是还是有好处的,你看直接映射,比如说主存还是分成n组,也就是说Cache中的每一个字块都有n个主存中的字块对应,且主存中的字块只能对应Cache中的一个字块。所以说,如果Cache中的数据没有失效的时候,主存中的其他的n-1个字块都是需要等待的。
但是全相联映射不同——主存中的字块可以对应任何一个Cache中的字块,也就是说,如果主存想要向Cache推送数据,只需要挑一个失效的地方,将原有数据覆盖即可。
这种方式比较混乱,电路可能会很复杂,同时又会造成较高的成本。

组相联映射

计算机组成原理很有意思,你会发现,在计算机结构的设计方案中,一般都是这样的:有一种比较简单的方案,但是效率并不怎么好,然后有一种效率很好的方案但是可能过于复杂,接着就会出现第三种方案,一般这种方案都是以上二者的折中。在有效的消除了二者的缺点的同时,又极大的利用了二者的优点,不得不感叹这些科学家的聪明才智。

首先说对应方式,组相联的映射方式和直接相连的映射方式相同,都是主存中的每一组字块中的每一个字块对应着Cache中的一个相应字块,但是有不同之处在于,Cache中的字块分成了两组,这种方式也叫做二路组相联。
其次说下这种连接方式的优点:可以看到,在二路组相联中,除非是Cache中每块的两组字块都被占用了,否则不存在冲突的问题,这大大提高了效率,同时又没有全相联那种暴力的方式。

总结

本文详细的讨论了Cache的工作原理及三种映射方式,希望对大家有所帮助。
如果你喜欢我的文章,请帮忙点赞;如果你对本文内容存在疑问,请留言告诉我。您的点赞和留言是对原创作者的最大支持,感谢您的阅读。
此外,本人一直在寻找志同道合的小伙伴,同样如此的可以邮件联系我:roobtyan@outlook.com.
本人微信公众号:

转载于:https://www.cnblogs.com/roobtyan/p/9576682.html

漫谈计算机组成原理(五)高速缓冲存储器相关推荐

  1. 计算机组成原理之高速缓冲存储器(Cache)

    概述 问题的提出 由上一篇计算机组成原理之主存储器中的存储器分层结构图可知,CPU(寄存器)和主存(DRAM)之间存在速度的差异,由于主存的速度很慢,在CPU访存时,就会出现CPU的"空等& ...

  2. 计算机组成原理试卷五套,计算机组成原理(五套试题)

    计算机组成原理(五套试题) 计算机组成原理试题(一) 一.选择题(共20分,每题1分) 1.零地址运算指令在指令格式中不给出操作数地址,它的操作数来自______. A.立即数和栈顶: B.暂存器: ...

  3. 计算机底层:高速缓冲存储器

    计算机底层:高速缓冲存储器 高速缓冲存储器(cache) 简称 缓存 ,位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快.在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即 ...

  4. loop在计算机组成原理,计算机组成原理五章.ppt

    文档介绍: 5 处理机设计-数据路径和控制部件 哺忆箩店都嘛馆搞隔侯粹辣秃告***钾咳馁刘伞熙婿员萤涤煤拳撩砚妆缕斩计算机组成原理五章计算机组成原理五章 来辟津沥独同摇恰君卫艘虚潜惯龄彰毛堤占贴汀贰豁 ...

  5. 计算机组成原理五套试卷,送给将要挂科的你

    图片上传失败,原文档链接在文章末尾. 计算机组成原理试题(一 一.选择题(共20分,每题1分) 1.零地址运算指令在指令格式中不给出操作数地址,它的操作数来自______. A.立即数和栈顶: B.暂 ...

  6. 计算机组成原理9-高速缓冲存储器

    目录 一.概述 二.Cache的工作原理 1.Cache命中率 Cache –主存系统的效率 2.Cache 的基本结构 3.Cache 的读写操作 Cache 的写操作 Cache 的改进 三.Ca ...

  7. 计算机组成原理试卷五套,山东理工计算机组成原理五套题之题5

    练习题五 一.选择题(每小题1分,共20分) 1. 对计算机的产生有重要影响的是______. A.牛顿 维纳 图灵 B.莱布尼兹 布尔 图灵 C.巴贝奇 维纳 麦克斯韦 D.莱布尼兹 布尔 克雷 2 ...

  8. 计算机组成原理 五,重学计算机组成原理(五)

    CPU执行的也不只是一条指令,一般一个程序包含很多条指令 因为有if-else.for这样的条件和循环存在,这些指令也不会一路平直执行下去. 一个计算机程序是怎么被分解成一条条指令来执行的呢 1 CP ...

  9. 计算机组成原理——组成篇

    文章目录 计算机组成原理 -- 组成篇 1. 计算机的总线与I/O设备 a.计算机的总线(Bus) 1.为什么要使用总线? 2.总线的两大基本特征是什么? 3.总线分为几类? 分类: 4.系统总线按照 ...

最新文章

  1. spark集群使用hanlp进行分布式分词操作说明
  2. 文本分类的目的和分类的方法
  3. MVC4做网站六后台管理:6.2网站信息设置
  4. Python编程专属骚技巧7
  5. loss值多少才算收敛_一个家庭一年要存多少钱才算正常?国家统计局给出“答案”...
  6. gatsby_将Gatsby默认启动程序转换为使用样式化组件
  7. C语言复杂声明解读简明方法
  8. JMeter组件之Test Fragment
  9. [转载] 第一个Python CGI编程和配置
  10. 1解锁方式9008_黔隆科技刷机教程金立E7忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...
  11. 黑客帝国屏幕保护源码
  12. 去掉office标题前的黑点
  13. python实现非常有趣的数学问题
  14. Spring5学习笔记------4、JdbcTemplate
  15. 达梦数据库初始化常用参数查询及介绍
  16. **Matlab中CLF的使用**
  17. jmeter阶梯式加压(逐渐加压和降压)
  18. Architecto rem incidunt non ratione illum.Molestiae voluptatem enim iste temporibus.
  19. 宅急送项目第六天笔记!
  20. 【GD32F427开发板试用】三、USB转CAN功能开发与试用总结

热门文章

  1. 5种炫酷的数据可视动态图,用Python轻松实现
  2. 人工耳蜗做完以后有没有副作用
  3. 正则表达式及限制字数
  4. 拆色制作助手-查字导航2.0提供常用字体文档和常用图标下载
  5. web前端全栈0基础到精通(祺)07
  6. sinc函数卷积_希尔伯特变换卷积核函数的近似分析
  7. 【Windows】Windows 无法访问\\xxx.xxx.xxx.xxx 共享文件夹
  8. 潭州课堂25班:Ph201805201 django 项目 第三十二课 后台站点管理(课堂笔记)
  9. Unity3D XR/VR PICOXR 导入网上下载的unitypackage
  10. 生成对抗网络(Generative Adversarial Networks)