什么是cache?

cache的中文译名为高速缓冲存储器(快取记忆体),高速缓冲存储器(Cache)其原始意义,是指存取速度比一般随机存取记忆体(ram)来得快的一种ram,一般而言它不像系统主记忆体那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。

cache的存在意义?

CPU发展速度大大快于主存,CPU性能每年增长大约增长50%,符合CPU摩尔定律,而主存每十年提升50%,cache的存在弥补了CPU与主存间的速度不匹配问题。





地址映射:


如何映射:
主存中的某一块可以随意放到cache有空位的某一块。


Q:怎么判断此时要存储的cache行内是否存在数据呢?(命中与未命中)

A:可以通过设置有效位来判断cache行内是否有数据存在。

Q:还有一个问题,因为我们是在cache内随机存储的,那么该怎么判断这一行数据是代表主存里的哪行数据?

A:数据存储到cache时顺便把蓝色框框里面的主存字块标记也存到cache里面对应的位置,由于整块地址传过去的时候块中间的地址顺序是没有打乱的,所以不需要传输字块内地址(就是图中黑色的部分)。


如何映射:
主存当中某一块通过一定的计算方法固定放到cache中固定的某一块。

但是如图中,连续放到cache第7块后就放满了,假如想要继续放第8块数据,就需要用8这个在主存中的行号除以cache的总行数8,得到的余数0就是接下来主存中的块准备放在cache的行号。

这是也会出现与全相联映射同样的问题,需要在cache中标记这是代表主存中哪一块的数据。

在全相联映射中所选取的标记项包括绿色和蓝色的部分,这是因为全相联映射在cache中只保证了每一行内部的地址顺序,行之间的顺序是乱的。

但是在直接映射中,不仅保证了行内地址的顺序,还保证了8行(图中的例子为8行)为一组之间行的顺序。

所以,代表cache字块地址的蓝色部分是不需要保存的,只需要保存高位的主存字块标记(绿色部分)即可,如图所示,0行~7行的绿色部分都是000……0,直到主存第8行需要再次保存到cache中第0行的时候,绿色部分才发生了变化。

全相联映射和直接映射的优缺点:

全相联映射因为是有空位就随意放,所以空位的利用率是非常高的;

直接映射利用率就差了些,比如,放置了第0行后,而且后面7行都还没有存放数据,如果现在想要存放的是主存内第8块数据,由于直接映射的特性,第8块只能被限制存放在cache中第0行,所以,即使后面还有空位也无法存放,只能替换掉cache中第0行的数据。

但是直接映射的优点就是需要额外存放的标记项比较少,同时cache是需要硬件来帮助识别这些对应的位置的,在需要识别的信息比较多的时候电路也是比较复杂的,所以从这两个方面来看,直接映射相比全相联映射是有优势的。

而接下来的第三种方法则综合了前面两种方法的优势。

如何映射:
先按照编号分组,分完组后再到组内随意存放。

假设:

也可以说成二路组相联(每组有两块)。

主存紫色二进制代表cache的组号,蓝色框框作为标记项。

地址映射的总结:


cache满了或者准备要存放的位置被占用了该怎么办?

这就需要考虑替换方法了,而替换的方式是根据一定的替换算法来实现的。

替换算法:




用例题来解析:

一、

那么计算机是怎么知道此时有没有命中呢?

内置有相联存储器这个物理器件。

在放入主存的第5号块后,还需要放置第2号块内存,但是cache内已经放满了,那接下来就需要用到替换算法了,而且不同的替换算法会对cache产生不同的结果。



LRU的手动算法:
从后往前看,如果这块号以往出现过,就划掉以往出现的,没有出现过就不用管,然后再从前往后看,第一块没被划掉的就是最近最少使用的块。

二、




因为直接映射是相当于对号入座的,所以在映射的时候一旦有冲突就会直接替换掉,不涉及替换策略。

三、





写策略:

cache工作原理小结:

简图:

详细化:

cache除了有存储体之外,还会有一个cache主存地址映射变换机构,作用就是为了完成上述的地址映射功能,CPU在传送地址的时候可以通过总线把地址同时传送给主存和cache主存地址映射变换机构。
在命中的情况下,地址通过这个映射机构之后就会被翻译成相对应的cache地址,然后cache就能通过这个地址获取到数据,通过数据总线把数据传送给CPU;
在没有命中的情况下,就会用到一个cache替换机构,作用就是完成上述的替换策略,在这个机构的控制下,主存和cache之间会通过一个直接通路进行快速的替换,替换成功后再由cache和CPU之间进行交流,或者也可以直接由主存在替换的过程中把数据传送给CPU。

假设:

现在CPU发出一个地址,想要访问的是主存的3号块,那么根据cache主存地址映射变换机构判断,如果命中,CPU就能直接从cache中获取数据并处理数据,如果是读操作,cache和主存中的数据是不发生变化的,如果是写操作,就涉及到了写策略的问题。

写策略有两种情况:

①写回法: 因为CPU可能会多次修改准备改写的数据,这样的话每次改写都通知主存就会增加工作量,所以可以让cache中的数据被改写不用及时反馈给主存,等全部改写完成再反馈给主存,类似之前的有效位,这样的操作也需要通过设置一个脏位来完成,作用是来表示cache中某一块数据是否被修改,当某一块数据不被需要了,就可以通过脏位来判断这一块数据是被直接覆盖掉还是写回主存。

②全写法: 当cache中的数据被修改时,对应的把主存的数据也修改了,这样的策略不需要设置脏位,但是由于改写cache数据和改写主存数据的速度差距是很大的,所以一般会增加一个写缓冲,写缓冲的作用就是用来暂存一系列的写回操作,暂存的速度是非常快的,暂存完之后CPU就可以去做其他事情,之后就可以由写缓冲缓慢地写回主存,但是写缓冲也会面临着在写操作的频率过高时发生溢出的情况。

如果没有命中, 对于写操作,与命中情况一样,对应着两种写策略。

①写分配法: CPU就会发现想要改写的数据不在cache中,会从主存中调入cache,此时调入后再次访问就命中了,由于改写cache数据的速度比直接改写主存数据的速度块,所以就直接改写cache数据,之后与写回法一样,设置一个脏位判断是否写回主存。

②非写分配法: 直接在主存改写数据,不调入cache。

写策略小结:

结合两种写策略的优缺点,可以采用多级cache

Cache(高速缓冲存储器)工作原理相关推荐

  1. 计算机高速缓冲存储器工作原理,高速缓冲存储器部件结构及原理解析

    高速缓冲存储器部件结构及原理解析 高速缓存 CACHE用途设置在 CPU 和 主存储器之间,完成高速与 CPU交换信息,尽量避免 CPU不必要地多次直接访问慢速的主存储器,从而提高计算机系统的运行效率 ...

  2. cache相关概念及工作原理介绍

    cache相关概念及工作原理介绍 笔者这篇文章主要从使用者的角度介绍cache的相关概念和工作原理. 一. cache是什么,为什么要用它 关于cache是什么,为什么要用它.我们从这个表格说起.下图 ...

  3. Cache 高速缓冲存储器

    Cache(即高速缓冲存储器(Cache Memory),是我们最常听到的一个词了.在老鸟们眼中,这个词或许已没有再谈的必要,因为他们对Cache从设计的必要性到工作原理.工作过程等等都已了如指掌了: ...

  4. 【王道计组笔记】Cache高速缓存基本工作原理

    缓存器 的引入: [王道计组笔记]高速缓存器:局部性原理及性能分析_muse_age的博客-CSDN博客 1.主存的块放到Cache中哪个位置?CPU向缓存中读取一个数据过程? (1)空位随意放:全相 ...

  5. Cache组成及工作原理

        很多程序员认为Cache是透明的,处理器可以很聪明地安排他们书写的程序.他们非常幸运,可以安逸着忽略Cache,也安逸着被Cache忽略,日复一日,年复一年,机械地生产着各类代码.All of ...

  6. Cache(高速缓冲存储器)

    高速缓存位于主存与CPU之间的一级存储器,由静态存储芯片(SRAM)组成,容量比较小,速度比主存 高得多,接近于CPU的速度,单位成本比内存高·Cache存储了频繁访问内存的数据. 1.Cache原理 ...

  7. 计算机组成原理学习笔记—— 高速缓冲存储器Cache

    高速缓冲存储器 问题的提出 CPU空等问题 在多体并行存储系统中,由于I/0设备向主存请求的级别高于CPU访存,这就出现了CPU等待I/0设备访存的现象,致使CPU空等一段时间,甚至可能等待几个主存周 ...

  8. Cache —— 局部性原理和工作原理

    一.程序访问的局部性原理 程序访问的局部性原理包括时间局部性和空间局部性. 空间局部性:在最近的未来要用到的信息(指令和数据),很可能与现在正在使用的信息在存储空间上是邻近的 时间局部性:在最近的未来 ...

  9. 存储系统 —— Cache(高速缓冲存储器)

    本文主要介绍以下几方面的知识: Cache 的基本工作原理 Cach和主存之间的映射方式 Cache中主存块的替换算法 Cache写策略 1.Cache的基本工作原理 存储系统存在的问题 局部性原理 ...

最新文章

  1. [转] 前端实现文件的断点续传
  2. BZOJ3589 动态树(树链剖分+容斥原理)
  3. 如何在Chrome开发者工具console里手动调用focus方法给元素设置focus
  4. python子类继承父类属性实例_python – 从子类内的父类访问属性
  5. OpenShift 4 之Service Mesh教程(3)- 访问流量管理
  6. 代码投毒、删库跑路,开源生态链安全该如何保证?
  7. python中使用Opencv进行人脸检测
  8. 数据结构 图的邻接表
  9. 带通采样定理的数学证明及相关推导
  10. 我的2018OKR年终回顾与2019OKR初步规划
  11. 10个图库素材网站,免费可商用
  12. 【Unity开发小技巧】Unity混音器Mixer控制全局音量
  13. 大数据风控---风险量化和风险定价
  14. Win32窗口--XBox游戏手柄--C++--方向轮和按键捕获
  15. dct变换编码研究课设实验报告_制作电磁铁实验报告单_相关文章专题_写写帮文库...
  16. Tiny语言编译器简介
  17. linux用户管理(2)----修改用户模式(usermod,sudo权限等)
  18. c语言:判断字符串是否符合手机号码格式
  19. 随机过程 自相关函数 互相关函数自协方差矩阵 互协方差矩阵的区别联系
  20. 白帽汇赵武:我们来聊一聊实名制

热门文章

  1. 输入框禁止输入特殊字符\/:*? “ <>l
  2. ABP实战笔记:导出用户信息Excel表格
  3. C语言 扫雷(含递归展开)
  4. 短信发送验证码,每天只限三次
  5. 直播平台怎么搭建,你要先来学习音频基础知识
  6. 微信网站应用开发的详细流程和引导
  7. linux使用python wxpy报错_CentOS 7.2 安装 python3 + wxpy
  8. 2021-2022-2 ACM集训队每周程序设计竞赛(10) - 问题 A: 还原撕碎的字条,哄笑生气的毛毛 - 题解
  9. 用VS开发一款“飞机大战“单机游戏<C++>
  10. 云计算机房概念股,云计算数据中心概念股龙头有哪些?2020云计算数据中心受益股一览表(2)...