高速缓存技术(1):基本原理
文章目录
- 前言
- 存储器层次结构
- 局部性原理
- 高速缓存的结构
- 高速缓存的映射方式
- 直接映射
- 直接映射寻址
- 组相联映射
- 四路组相联寻址
- 全相联映射
- 全相联映射寻址
- 高速缓存的更新策略
- 相关参考
前言
高速缓存,即Cache,是位于CPU与主存之间的一种容量较小但速度很快的存储器,用于解决CPU处理速率和主存访问速率差异过大的问题。CPU将内存中的数据读到高速缓存时,会根据局部性原理,除了读取本次要访问的数据,还会预取本次数据的周边数据到Cache里面,如果CPU后续要读取的数据已经在高速缓存中,那么就会有效提升性能。
存储器层次结构
现代计算机系统基本都采用了层次性的存储结构。在这个层次结构中,存储设备的访问速度越来越慢、容量越来越大,并且单位成本也越来越低。存储层次结构的主要思想就是利用上一级的存储器作为下一层存储器的缓存。
局部性原理
计算机程序运行遵循局部性原则。局部性原理是指程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的某一部分。相应地,执行所访问的存储空间也局限于某个内存区域。局部性原理分为时间局部性原理和空间局部性原理:
- 时间局部性原理(Temporal locality):如果某个数据项被访问,那么在不久的将来它可能再次被访问。
- 空间局部性原理(Spatial locality):如果某个数据项被访问,那么与其地址相邻的数据项可能很快也会被访问。
具有良好局部性的程序比差的程序更多的倾向于从存储器层次结构较高层次处访问数据,因此运行的更快。
高速缓存的结构
高速缓存通常被组织成一个有多个高速缓存组的数组,每个高速缓存组包含若干个高速缓存行。如下图是高速缓存的基本结构:
高速缓存结构的基本组织如下:
- 高速缓存行:高速缓存中的最小访问单元,用于缓存内存块数据;
- 缓存组:由相同索引域的高速缓存行组成,同一内存块可以加载到缓存组的任意行中;
- 路:高速缓存组中包含的高速缓存行数,用于组相联的高速缓存中。
处理器通常使用特定的地址编码访问高速缓存,地址包含标记、组索引、偏移量三个部分:
- 标记(Tag):高速缓存地址编码的一部分,通常是高速缓存地址的高位部分,用于判断高速缓存行缓存的数据的地址是否和处理器寻址地址一致;
- 组索引:高速缓存地址编码的一部分,用于索引和查找地址在高速缓存中的哪一组;
- 偏移量:高速缓存行中的偏移量,处理器可以按字(word)或者字节(Byte)来寻址高速缓存行的内容。
高速缓存的映射方式
由于高速缓存的容量远小于主存,因此需要一种映射算法完成主存到高速缓存的映射,以及确定高速缓存行存储的是哪一块内存数据。映射方式的选择决定了高速缓存的组织结构,通常采用三种映射算法:
- 直接映射
- 组相联映射
- 全相联映射
直接映射
直接映射是最简单的映射技术,只允许将主存中的每个块映射到一个固定可用的缓存行中,这种映射方式下每个高速缓存组只有一个高速缓存行,称为直接映射高速缓存。
直接映射寻址
组相联映射
为了解决直接映射高速缓存中的高速缓存颠簸问题,组相联的高速缓存结构在现代处理器中得到广泛应用。组相联高速缓存每个组内保存有多于一个的高速缓存行,这样就支持同一内存块可以映射到特定缓存组的任意行中。
四路组相联寻址
全相联映射
全相联映射允许每一个内存块装入高速缓存中的任意行,称为全相联高速缓存。全相联高速缓存只包含一个缓存组,并由所有高速缓存行组成。
全相联映射寻址
高速缓存的更新策略
高速缓存更新策略是指当发生缓存命中时,写操作应该如何更新数据。缓存更新策略分成两种:写直通和回写:
- 写直通(write through):当处理器执行存储指令并在缓存命中时,我们更新缓存中的数据并且更新主存中的数据。缓存和主存的数据始终保持一致;
- 写回(write back):当处理器执行存储指令并在缓存命中时,我们只更新缓存中的数据,并且每个缓存行中会有一个bit位记录数据是否被修改过,称之为dirty bit。我们会将dirty bit置位。主存中的数据只会在缓存行被替换或者显示的clean操作时更新。因此,主存中的数据可能是未修改的数据,而修改的数据躺在cache中。cache和主存的数据可能不一致。
相关参考
- 《奔跑吧,Linux内核》
- 《深入理解计算机系统》
- 《计算机组成与体系结构——性能设计》
高速缓存技术(1):基本原理相关推荐
- Ajax技术的基本原理
我用一个简单的用户名验证的例子来谈一谈我对Ajax的了解: 这个例子用到了两个JSP和一个JS,我没有用后台来验证,因为原理是一样的. 1.用户注册表单页:ajaxCheckUser.jsp < ...
- 【转】交织容积重建技术:基本原理与临床价值
转自:交织容积重建技术:基本原理与临床价值_湃客_澎湃新闻-The Paper 原创 赵喜同学 XI区 单击上方蓝色字体 XI 区 或长按识别下方二维码关注我 大家好,欢迎大家访问XI区! 所有医学成 ...
- Redis基础篇 高速缓存技术与Redis的庐山真面目 AUTHOR:LBY
最新更新 8.24 创建 8.25 更新第二章 客户端的使用以及配置参数 8.25 Redis的数据 事务 百年沉浮困低谷,莫以今朝度兴衰, 人生终有高飞日,傲振才华过沧海. 什么是Redis Red ...
- 3D深度传感ToF技术的基本原理解析
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 飞行时间(ToF)相机凭借更小的外形尺寸.更宽的动态感测范围,以及 ...
- 常见无线定位技术的基本原理
目录 引言 无线电定位技术 TOA技术 TDOA技术 RTT技术 RSS技术 AOA技术 混合估计技术 引言 无线定位技术是依据测量出的无线电磁波的特征参数,利用相应位置解算方法来确定目标位置的技术. ...
- InSAR学习(四)高级的InSAR技术之基本原理
1 传统InSAR/DInSAR的限制 1.1 去相关 去相关对InSAR的影响已经在前面解释过.去相关的原因是分辨单元内部地物的变化和相对运动,以及多次观测时视角的变化.一般地,有两种方法客服去相关 ...
- 计算机指纹识别的原理步骤,指纹识别技术的基本原理及过程
在登记过程中,用户需要先采集指纹,然后计算机系统将自动进行特征提取,提取后的特征将作为模板保存在数据库或其他指定的地方.在识别或验证阶段,用户首先要采集指纹,然后经系统自动进行指纹库模板比对,然后给出 ...
- 无线定位技术的基本原理(模型)及测距技术总结
定位算法根据是否利用测量点的距离关系,分为基于测距的定位算法(range-based)和非基于测距(range-free)的定位算法两类.不同的测距方法主要的差别在于如何获得两个节点之间的距离关系(后 ...
- 射频识别(RFID)技术的基本原理、特性、发展和应用
何谓射频识别 随着高科技的蓬勃发展,智能化管理已经走进了人们的社会生活,一些门禁卡.第二代身份证.公交卡.超市的物品标签等,这些卡片正在改变人们的生活方式.其实秘密就在这些卡片都使用了射频识别技术,可 ...
最新文章
- 基于 Redis 实现分布式锁思考
- mysql as 后面字段_mysql 字段as详解及实例代码
- python调用zabbixapi接口_python3 + zabbix api 的使用
- java编写某计算器控制台程序_用java程序编写一个计算器
- 工业控制系统ICS网络安全简析
- 联想e480一键恢复小孔_thinkpade480win10如何一键还原
- 为什么说只有深度思考才能让你持续赚到钱?
- ASP.NET伪静态的方法及相关资料
- 大唐电信[600198]股票
- 产品经理适合当项目经理吗?
- 小白初学Vue之 组件与实例的关系 初试篇
- Java拦截器的简单使用
- 五个金念什么_5个火读什么???还有5个水 5个木 5个土 5个金
- 如何写好一篇技术博客
- DNS中A记录和CNAME的区别 什么是CNAME
- win10 cmd中文显示乱码
- java jui_求教java大神,下面这个JUI界面是怎么布局而成的
- [4G5G专题-6]:架构 5G的八大组网方案
- php datedif,datedif 函数怎么用?
- 铁路一线工人春运备战实录:深夜里的“钢铁工匠”