Cache(高速缓冲存储器)工作原理
什么是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(高速缓冲存储器)工作原理相关推荐
- 计算机高速缓冲存储器工作原理,高速缓冲存储器部件结构及原理解析
高速缓冲存储器部件结构及原理解析 高速缓存 CACHE用途设置在 CPU 和 主存储器之间,完成高速与 CPU交换信息,尽量避免 CPU不必要地多次直接访问慢速的主存储器,从而提高计算机系统的运行效率 ...
- cache相关概念及工作原理介绍
cache相关概念及工作原理介绍 笔者这篇文章主要从使用者的角度介绍cache的相关概念和工作原理. 一. cache是什么,为什么要用它 关于cache是什么,为什么要用它.我们从这个表格说起.下图 ...
- Cache 高速缓冲存储器
Cache(即高速缓冲存储器(Cache Memory),是我们最常听到的一个词了.在老鸟们眼中,这个词或许已没有再谈的必要,因为他们对Cache从设计的必要性到工作原理.工作过程等等都已了如指掌了: ...
- 【王道计组笔记】Cache高速缓存基本工作原理
缓存器 的引入: [王道计组笔记]高速缓存器:局部性原理及性能分析_muse_age的博客-CSDN博客 1.主存的块放到Cache中哪个位置?CPU向缓存中读取一个数据过程? (1)空位随意放:全相 ...
- Cache组成及工作原理
很多程序员认为Cache是透明的,处理器可以很聪明地安排他们书写的程序.他们非常幸运,可以安逸着忽略Cache,也安逸着被Cache忽略,日复一日,年复一年,机械地生产着各类代码.All of ...
- Cache(高速缓冲存储器)
高速缓存位于主存与CPU之间的一级存储器,由静态存储芯片(SRAM)组成,容量比较小,速度比主存 高得多,接近于CPU的速度,单位成本比内存高·Cache存储了频繁访问内存的数据. 1.Cache原理 ...
- 计算机组成原理学习笔记—— 高速缓冲存储器Cache
高速缓冲存储器 问题的提出 CPU空等问题 在多体并行存储系统中,由于I/0设备向主存请求的级别高于CPU访存,这就出现了CPU等待I/0设备访存的现象,致使CPU空等一段时间,甚至可能等待几个主存周 ...
- Cache —— 局部性原理和工作原理
一.程序访问的局部性原理 程序访问的局部性原理包括时间局部性和空间局部性. 空间局部性:在最近的未来要用到的信息(指令和数据),很可能与现在正在使用的信息在存储空间上是邻近的 时间局部性:在最近的未来 ...
- 存储系统 —— Cache(高速缓冲存储器)
本文主要介绍以下几方面的知识: Cache 的基本工作原理 Cach和主存之间的映射方式 Cache中主存块的替换算法 Cache写策略 1.Cache的基本工作原理 存储系统存在的问题 局部性原理 ...
最新文章
- [转] 前端实现文件的断点续传
- BZOJ3589 动态树(树链剖分+容斥原理)
- 如何在Chrome开发者工具console里手动调用focus方法给元素设置focus
- python子类继承父类属性实例_python – 从子类内的父类访问属性
- OpenShift 4 之Service Mesh教程(3)- 访问流量管理
- 代码投毒、删库跑路,开源生态链安全该如何保证?
- python中使用Opencv进行人脸检测
- 数据结构 图的邻接表
- 带通采样定理的数学证明及相关推导
- 我的2018OKR年终回顾与2019OKR初步规划
- 10个图库素材网站,免费可商用
- 【Unity开发小技巧】Unity混音器Mixer控制全局音量
- 大数据风控---风险量化和风险定价
- Win32窗口--XBox游戏手柄--C++--方向轮和按键捕获
- dct变换编码研究课设实验报告_制作电磁铁实验报告单_相关文章专题_写写帮文库...
- Tiny语言编译器简介
- linux用户管理(2)----修改用户模式(usermod,sudo权限等)
- c语言:判断字符串是否符合手机号码格式
- 随机过程 自相关函数 互相关函数自协方差矩阵 互协方差矩阵的区别联系
- 白帽汇赵武:我们来聊一聊实名制
热门文章
- 输入框禁止输入特殊字符\/:*? “ <>l
- ABP实战笔记:导出用户信息Excel表格
- C语言 扫雷(含递归展开)
- 短信发送验证码,每天只限三次
- 直播平台怎么搭建,你要先来学习音频基础知识
- 微信网站应用开发的详细流程和引导
- linux使用python wxpy报错_CentOS 7.2 安装 python3 + wxpy
- 2021-2022-2 ACM集训队每周程序设计竞赛(10) - 问题 A: 还原撕碎的字条,哄笑生气的毛毛 - 题解
- 用VS开发一款“飞机大战“单机游戏<C++>
- 云计算机房概念股,云计算数据中心概念股龙头有哪些?2020云计算数据中心受益股一览表(2)...