高速缓存存储器(Chche)

为了解决CPU和主存之间速度不匹配的问题,计算机系统中引入了高速缓存(Chche)的概念。

基本想法:使用速度更快但容量更小、价格更高的SRAM制作一个缓冲存储器,用来存放经常用到的信息;这样一来,CPU就可以直接与Chche交换数据,而不用访问主存了。

这种方案有效的原因:对大量典型的程序分析后,发现在一定时间内,CPU要从主存取指令或数据,只会访问主存局部的地址区域。这是由于指令和数据在内存中是连续存放的,而且有些指令和数据会被多次调用;也就是说,指令和数据在主存中地址分布不是随机的,而是相对的簇聚。这使得CPU执行程序时,访问内存具有相对的局部性;这称为程序访问的局部性原理。

  • 时间局部性:如果一个数据现在被访问了,那么以后也很有可能被访问
  • 空间局部性:如果一个数据现在被访问了,那么它周围的数据在以后也可能会被访问。

局部性原理是Cache高效工作的理论基础。

1.Cache的基本工作原理

为了方便Cache与主存交换信息,Cache和主存都被划分为了相等的块Cache块又称Chche行,每块由若干字节组成,块的长度称为块长。由于Cache的容量远小于主存的容量,所以Cache中的块数要远少于主存中的块数,Chche中仅保存主存中最活跃的若干块的副本

1.Cache工作原理

假设主存按照字节编址,地址用n位二进制码表示,那么主存容量为2^nB;块的大小为16个字节,那么主存中块的个数为:2^{n-4}。如果我们对每个块也做一个编号,其实就对应着地址的前n-4位。

因此,我们将地址分为两部分:主存块号和块内地址。

 高n-4位表示主存中的“块地址”,低4位表示“块内地址”。

块内地址其实可以看做具体存储字在块内的“偏移量”。

类似,Cache中地址也可以分为这样的两部分。

由于Cache中块长和主存一致,高位是块号,低位是行内地址。

可以按照某种策略预测CPU在未来一段时间内要访问的数据,将其装入Cache。

当CPU要读取主存中的某个字时,可分为两种情况:

  • Cache命中:需要的字已经在缓存中,就将其地址转换为缓存地址,直接访问Cache
  • Cache未命中:需要的字不再缓存中,仍需访问主存,并将该字所在的块一次性地从主存调入Cache。

如果某个主存块已经调入了Cache,就称它们之间建立了对应关系。

由于Cache容量没有主存大,我们就需要某种替换算法。

将需要调入Cache的信息替换掉之前某个Cache块的信息。

因此,一个缓存块不会永远只对应一个主存块。

==================================================================

总结:CPU与Cache之间的数据交换通常以字为单位;而Cache与主存之间的数据交换则以块为单位。

2.命中率

Cache的效率通常用命中率来衡量。

命中率是指CPU要访问的信息已经在Cache中的比率。

Cache的容量和块长都是影响命中率的重要因素。

3.Cache的基本结构  

 

4.Cache的改进

Cache的改进,主要就是由一个缓存改为使用多个缓存

主要有两个方向:增加Cache级数、将统一的Cache改为分立的Cache。

(1)两级缓存

最初在CPU和主存之间只设一个缓存,称为单一缓存

随着集成电路密度的提高,这个缓存直接与CPU集成在一个芯片中了,所以又称为片内缓存(片载缓存)。

由于片内缓存容量无法做到很大,所以可以考虑在片内缓存和主存之间再加一级缓存,称为片外缓存,也由SRAM组成。

这种有两级缓存的Cache系统被称为“两级缓存”,片内缓存作为第一级(L1),片外缓存作为第二级(L2)。

(2)分立缓存

指令和数据都存放在同一缓存内的Cache被称为统一缓存

分立缓存则将其存放在两个缓存中一个叫指令Cache,另一个叫数据Cache。这两种缓存的选择考虑如下两个因素:

  • 主存结构:如果计算机主存中指令、数据是统一存储的,则相应的Cache采用统一缓存;如果主存指令、数据分开存储,则相应的Cache采用分立缓存。
  • 机器对指令执行的控制方式:如果采用了超前控制或者流水线控制方式,一般都采用分立缓存。

超前控制,是指在当前指令执行尚未结束时就提前把下一条准备执行的指令取出

流水线控制,就是多条指令同时分阶段执行。(类似于多体低位存储方式)

2.Chche和主存之间的映射

Cache块中的信息是主存中某个块的副本,地址映射是指主存地址空间映射到Cache地址空间,这相当于定义了一个函数:

                                     Cache地址=f(主存地址)

由于Cache块和主存块长一样,而块内地址只是字在当前块内的“偏移量”,所以映射转换之后块内地址是不变的。我们仅仅需要Cache块号和主存块号之间的函数关系。

                                     Cache地址=f(主存地址)

Cache块远少于主存块,所以Cache块不可能永远对应唯一的主存块,需要在Cache中为每一个块加一个标记,指明它是主存中哪一块的副本。这个标记的内容,应该能够唯一确定对应主存块的编号。

另外,为了说明Cache行中的信息是否有效,每个Cache行还需要一个有效位,该位为1时,表示Cache中该映射的主存块数据有效;为0则无效。

地址映射的方式有如下3种:

1.直接映射

直接映射的思路非常简单,就是“挨个对应”,主存中的每一块只能装入Cache中的唯一位置。

由于Cache容量很小,当主存中的块已经“遍历”完所有Cache地址后,下一个主存块的对应位置就又成了Cache中的第一行(第一个块)。

很明显,这跟“顺序存储”的思路是一样的,用主存块数对Cache的总行数取模,就可以得到对应的Cache的行号了:

                           Cache行号=主存行号  mod  Cache总行数

因此,直接映射方式下,主存地址结构为:

访问内存的过程: 

2.全相联映射

全相联映射方式下,主存的地址结构为:

全相联映射方式的优点是灵活,Cache行的冲突概率低,空间利用率高,命中率也高;缺点是标记的速度较慢(标记变长了),实现成本较高。

3.组相联映射

把直接映射和全相联映射两种方式结合起来,就是组相联映射方式。

组相联的思路就是将Cache行分为Q个大小相等的组,每个主存块可装入对应组的任意一行;

它所在的组则按照顺序依次排列得到。

也就是组间采用直接映射、而组内采用全相联映射的方式

当Q等1时,则是全相联映射

当Q等于Cache时,则是直接映射。

 访问过程以及三种映射方式的区别

 

3.Cache中主存块的替换算法

最不经常使用算法一者是可能二者都为0或者同一个不为0的数,从而导致随机替换

二者是不具备时间累计的性质,无法确定上次使用是什么时候。 

这里我们最常使用LRU算法: 

4.Cache写策略

我们的Cache写分为命中和未命中两种情况

(1)Cache写命中

(2)Cache写未命中 

Cache行的表示: 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/359280.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何打包数据库文件

使用 mysqldump 命令: mysqldump -u username -p database_name > output_file.sql username 是数据库的用户名。database_name 是要导出的数据库名称。output_file.sql 是导出的 SQL 文件名,可以自定义。 示例: mysqldump -u root -p…

Python-正则表达式

目录 一、打开正则表达式 二、正则表达式的使用 1、限定符 (1)x*:*表示它前面的字符y 可以有0个或多个; (2)x:表示它前面的字符可以出现一次以上;(只可以匹配多次&…

C++必修:模版的入门到实践

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 贝蒂的主页:Betty’s blog 1. 泛型编程 首先让我们来思考一个问题,如何实现一个交换函数&#x…

晨持绪科技:开好一家抖音小店运营怎么做

在数字时代,抖音小店以其独特的社交媒体优势迅速崛起,成为许多创业者的新宠。但如何有效运营,却是一门学问。首要任务是确定你的小店定位,这关系到后续的产品选择、目标客户群及营销策略。定位明确后,接下来便是挑选适…

工程文档CAD转换必备!在 Java 中将 DWG 转换为 JPG

Aspose.CAD 是一个独立的类库,以加强Java应用程序处理和渲染CAD图纸,而不需要AutoCAD或任何其他渲染工作流程。该CAD类库允许将DWG, DWT, DWF, DWFX, IFC, PLT, DGN, OBJ, STL, IGES, CFF2文件、布局和图层高质量地转换为PDF和光栅图像格式。 Aspose AP…

使用 GitHub Actions 编译和发布 Android APK

使用 GitHub Actions 编译和发布 Android APK 在现代软件开发中,持续集成和持续部署(CI/CD)已成为不可或缺的一部分。对于 Android 开发者来说,自动化编译和发布 APK 不仅节省时间,还能确保每次发布的一致性。本文将介…

电脑用什么录屏?这3款软件你值得拥有

随着电脑技术的发展,录屏已经成为用户日常办公、学习、娱乐的重要工具之一。录屏软件种类繁多,功能各异,但如何选择合适的录屏软件成为用户面临的难题。本文将介绍电脑用什么录屏,并推荐三款软件,通过对比分析各自的特…

24.6.16

星期一: 补cf global round26 C2 cf传送门 思路:有效操作2只有一次,且反转后不会再出现负数,即后面能贡献 2^n-i个方案,再乘上前面 2^(k>0的次数) 代码如下&…

Golang | Leetcode Golang题解之第166题分数到小数

题目&#xff1a; 题解&#xff1a; func fractionToDecimal(numerator, denominator int) string {if numerator%denominator 0 {return strconv.Itoa(numerator / denominator)}s : []byte{}if numerator < 0 ! (denominator < 0) {s append(s, -)}// 整数部分numer…

解决安全规模问题:MinIO 企业对象存储密钥管理服务器

在强大可靠的存储解决方案领域&#xff0c;MinIO 作为持久层脱颖而出&#xff0c;为组织提供安全、持久和可扩展的存储选项。MinIO 通常负责处理关键任务数据&#xff0c;在确保高可用性方面发挥着至关重要的作用&#xff0c;有时甚至在全球范围内。存储数据的性质&#xff0c;…

Codepen Three.js环境依赖配置

Codepen Three.js环境依赖配置 前言 如果想在CodePen环境写Three.js依赖的项目&#xff0c;环境搭建可以参考该Codepen项目: Chill the lion 详细 打开设置可以看到以下配置 更多项目参考 1. Chill the Lion Chill the Lion 是一个基于 ThreeJS 制作的 WebGL 示例。它由…

RecyclerVIew->加速再减速的RecyclerVIew平滑对齐工具类SnapHelper

XML文件 ItemView的XML文件R.layout.shape_item_view <?xml version"1.0" encoding"utf-8"?> <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"100dp"android:layout_heig…

大腾智能,基于云原生的国产工业协同平台

大腾智能是一家基于云原生的国产工业软件与数字化协同平台&#xff0c;专注于推动企业数字化转型与升级&#xff0c;为企业提供一系列专业、高效的云原生数字化软件及方案&#xff0c;推动产品设计、生产及营销展示的革新&#xff0c;实现可持续发展。 大腾智能旗下产品 3D模型…

美的集团员工自爆工资+年终奖收入明细,网友说:这待遇,老婆根本不让跳槽!...

发现需求&#xff1a;研究与实践是关键 在任何领域&#xff0c;只要深入研究&#xff0c;就会发现无数的需求。如果没有发现需求&#xff0c;那只能说明对行业的了解还不够透彻。学校通过考试发现学生的问题&#xff0c;职场上也一样&#xff0c;通过不断实践发现问题。理论知识…

XSS+CSRF组合拳

目录 简介 如何进行实战 进入后台创建一个新用户进行接口分析 构造注入代码 寻找XSS漏洞并注入 小结 简介 &#xff08;案例中将使用cms靶场来进行演示&#xff09; 在实战中CSRF利用条件十分苛刻&#xff0c;因为我们需要让受害者点击我们的恶意请求不是一件容易的事情…

196.每日一题:检测大写字母(力扣)

代码解决 class Solution { public:bool detectCapitalUse(string word) {int capitalCount 0;int n word.size();// 统计大写字母的数量for (char c : word) {if (isupper(c)) {capitalCount;}}// 检查是否满足三种情况之一if (capitalCount n) {// 全部字母都是大写return…

Adobe Premiere 视频编辑软件下载安装,pr 全系列资源分享!

Adobe Premiere以其强大的功能、灵活的操作和卓越的性能&#xff0c;成为视频编辑领域的佼佼者。 在剪辑方面&#xff0c;Adobe Premiere提供了强大而灵活的工具集。用户可以在直观的时间线上对视频进行精细的裁剪、剪辑和合并操作。无论是快速剪辑短片&#xff0c;还是精心打造…

我真是反感那些叉劈。

再转一下&#xff0c;想看的自己提取吧。

MyBatis 动态 SQL怎么使用?

引言&#xff1a;在现代的软件开发中&#xff0c;数据库操作是任何应用程序的核心部分之一。而在 Java 开发领域&#xff0c;MyBatis 作为一款优秀的持久层框架&#xff0c;以其简洁的配置和强大的灵活性被广泛应用。动态 SQL 允许开发人员根据不同的条件和场景动态地生成和执行…

前端也需要知道的一些常用linux命令

前端也需要知道的一些常用linux命令 1.问题背景2.连接工具&#xff08;SecureCRT_Portable&#xff09;a.下载工具b.连接服务器c.登录到root账户 3.基本命令a.cd命令和cd ..b.ll命令和ls命令c:cp命令d.rm命令e:rz命令f.unzip命令g.mv命令h.pwd命令&#xff08;这里没有用到&…