高速缓存存储器(Chche)

news2024/11/26 14:42:34

为了解决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.coloradmin.cn/o/1852164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

csdn上传源码资源卖钱能买房买车吗?每天最高收入200-500?

csdn上传源码卖钱能买房买车吗,最高收入200-500? 作者收入日榜 不***孩 收益617.32元 程***妍 收益534.56元 s***n 收益323.71元 盈***客 收益315.05元 极***计 收益284.17元

K8S - 实现statefulset 有状态service的灰度发布

什么是灰度发布 Canary Release 参考 理解 什么是 滚动更新,蓝绿部署,灰度发布 以及它们的区别 配置partition in updateStrategy/rollingUpdate 这次我为修改了 statefulset 的1个yaml file statefulsets/stateful-nginx-without-pvc.yaml: --- apiVe…

Kimichat使用案例027:有效使用 kimichat 的15个高级技巧

文章目录 一、明确具体:表达清晰、避免使用模糊措辞。二、提供背景信息:提供相关的细节和背景信息。三、每次只问一个问题四、设定明确的标准五、要求解释六、管理期望七、确定问题类型八、调整语言水平九、提供范例十、及时提供反馈十一、明确对话角色十二、 保持对话的连贯…

Java程序之百鸡百钱问题

题目: 百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,…

如何设置MySQL远程访问权限?

MySQL是一种流行的关系型数据库管理系统,它广泛应用于各种Web应用程序和数据驱动的应用中。在默认情况下,MySQL只允许本地访问,为了能够从远程服务器或客户端访问MySQL数据库,我们需要进行一些额外的设置和配置。 安装和配置MySQ…

git拉取gitee项目到本地

git安装等不做赘述。 根据需要选择不同操作 1.只是单纯拉取个项目,没有后续的追踪等操作 不需要使用git init初始化本地文件夹 新建一个文件夹用于存储项目,右键选择 git bash here 会出现命令行窗口 如果像我一样,只是拉取个项目作业&…

vuejs3用gsap实现动画

效果 gsap官网地址&#xff1a; https://gsap.com/ 安装gsap npm i gsap 创建Gsap.vue文件 <script setup> import {reactive, watch} from "vue"; import gsap from "gsap"; const props defineProps({value:{type:Number,default:0} }) cons…

CAD二次开发(11)-在用C#进行CAD开发SQLite和SqlSugar的使用

1. System.Data.SQLite的使用 1.1 包的引入 利用 Nuget引入其相关包 1.2 App.config配置引入到CAD 因为我们当前的项目是类库项目&#xff0c;需要依托于宿主程序才可以运行&#xff0c;所以我们就得需要将SQLite自动生成的App.config里面的部分配置移植到CAD的配置文件中…

从工具产品体验对比spark、hadoop、flink

作为一名大数据开发&#xff0c;从工具产品的角度&#xff0c;对比一下大数据工具最常使用的框架spark、hadoop和flink。工具无关好坏&#xff0c;但人的喜欢有偏好。 目录 评价标准1 效率2 用户体验分析从用户的维度来看从市场的维度来看从产品的维度来看 3 用户体验的基本原则…

双叒叕-一个-Android-MVVM-组件化架构框架?

LifecycleViewModelLiveDataViewBindingAndroid KTXOkHttp:网络请求Retrofit:网络请求MMKV:腾讯基于 mmap 内存映射的 key-value 本地存储组件Glide:快速高效的Android图片加载库ARoute:阿里用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦BaseR…

Instagram APIj接口——快速获取Ins帖子媒体内容下载链接

一、引言 在社交媒体蓬勃发展的今天&#xff0c;Instagram已成为用户分享照片、视频和精彩瞬间的首选平台。然而&#xff0c;对于很多用户来说&#xff0c;想要保存或分享Instagram上的精彩内容却常常遇到困扰。为了解决这个问题&#xff0c;我们精心打造了一款全新的Instagra…

yolov8训练初体验

最近在爬一些数据&#xff0c;有些网址的验证码比较难搞&#xff0c;于是使用yolov8来解决。 一、数据打标签并转为txt 使用的软件为X-AnyLabeling。内置各种模型&#xff0c;方便打标。 打标完成后由于是json格式&#xff0c;所以我们使用python转换即可 import json import…

51单片机STC89C52RC——5.1 LCD1602液晶显示屏

目录 目的 一&#xff0c;STC单片机模块 二&#xff0c;LCD1602 2.1 模块简介 2.2 针脚 2.3 DDRAM地址与显示器对应关系 2.4 标准字库表 2.5 常用指令 2.6 读写操作 三&#xff0c;创建Keil项目 四&#xff0c;代码 五&#xff0c;代码编译、下载到51单片机 六&a…

浏览器-服务器架构 (BS架构) 详解

目录 前言1. BS架构概述1.1 BS架构的定义1.2 BS架构的基本原理 2. BS架构的优势2.1 客户端简化2.2 易于更新和维护2.3 跨平台性强2.4 扩展性高 3. BS架构的劣势3.1 网络依赖性强3.2 安全性问题3.3 用户体验局限 4. BS架构的典型应用场景4.1 企业内部应用4.2 电子商务平台4.3 在…

洛谷 P10584 [蓝桥杯 2024 国 A] 数学题(整除分块+杜教筛)

题目 思路来源 登录 - Luogu Spilopelia 题解 参考了两篇洛谷题解&#xff0c;第一篇能得出这个式子&#xff0c;第二篇有比较严格的复杂度分析 结合去年蓝桥杯洛谷P9238&#xff0c;基本就能得出这题的正确做法 代码 #include<bits/stdc.h> #include<iostream&g…

单选题22届期末复习PTA

知识点&#xff1a; 1. (p->n) 会递增 p->n 的值&#xff0c;但是这个表达式的值仍然是递增之前的值 p->n 会得到 a[0].n 的值&#xff0c; p->n 也会递增 p->n 的值&#xff0c;但是这个表达式的值是递增后的值 p->next->n 访问 p 指向的结点的下一…

八大排序浅入浅出

1&#xff09;选择一个增量序列t1&#xff0c;t2&#xff0c;…&#xff0c;tk&#xff0c;其中ti>tj&#xff0c;tk1&#xff1b; 2&#xff09;按增量序列个数k&#xff0c;对序列进行k 趟排序&#xff1b; 3&#xff09;每趟排序&#xff0c;根据对应的增量ti&#xff…

头歌资源库(16)分苹果

一、 问题描述 二、算法思想 首先&#xff0c;我们可以初始化一个数组apple来记录每个孩子分配的苹果数量&#xff0c;将所有元素初始化为1&#xff0c;表示每个孩子至少分配到一个苹果。 然后&#xff0c;从左到右遍历评分数组ratings&#xff0c;判断当前孩子的评分与前一个…

自动驾驶仿真测试用例表格示例 ACC ELK FCW

自动驾驶仿真测试用例表格示例 测试用例概览 本测试用例表格涵盖了自动驾驶系统中多个关键功能和场景的测试&#xff0c;旨在确保系统在不同条件下的表现和稳定性。 用例编号测试项目测试描述预期结果实际结果通过/失败TC-001ACC功能测试在高速公路上启用ACC&#xff0c;测试车…

2024最新版Python 3.12.4安装使用指南

2024最新版Python 3.12.4安装使用指南 2024最新版Python 3.12.4安装使用指南0. Python的受欢迎程度1. 安装最新版Python 3.12.42. 验证Python 3.12.4版本3. 验证Python功能4. 使用IDLE交互式开发模式5. 安装Python扩展库相关阅读&#xff1a; By Jackson 2024最新版Python 3.12…