cache结构与工作原理

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

首先,要想理解cache,先理解内存。内存的简单表示如下图,内存里面的内容的查找是根据地址来进行的,也就是说内存包含两点 ①地址 ②内存的内容(存的数据),根据地址来找数据。

                                                                             

                                                                                 图1   内存的结构

    上图的0000~0008是地址,A~I是存的数据,cpu根据地址去寻找数据。图中的一个字母代表一个字节的数据。

    我们都清楚,cache中的数据就是物理内存中的数据的子集,那么对于物理内存的一个数据,根据cache中可以放置这个数据位置的多少,可以分为三种:①如果cache中只有一个位置可以容纳这个数据,则为直接映射的cache;②如果cache中有多个地方可以放置这个数据,它就是组相联的cache;③如果cache中的任何地方都可以放置这个数据,那么它就是全相连的cache;如下图2所示:

                                                              

                                                                        图2  cache的三种组成方式

    更详细的讲,cache的结构其实和内存的结构类似,也包含地址和内容,只是cache的内容除了存的数据(data)之外,还包含存的数据的物理内存的地址信息(tag),因为CPU发出的寻址信息都是针对物理内存发出的,所以cache中除了要保存数据信息之外,还要保存数据对应的地址,这样才能在cache中根据物理内存的地址信息查找物理内存中对应的数据。(当然为了加快寻找速度,cache中一般还包含一个有效位(valid),用来标记这个cache line是否保存着有效的数据)。一个tag和它对应的数据组成的一行称为一个cache line。如下图所示,下表中的一行就是一个cache line。

                                                    

                                                                  图3   cache的基本结构

具体的Data、Valid、Tag各有多大,在介绍了内存的地址划分之后再在下文中讲。

知道了cache的结构之后,如何在cache中去寻找对应的数据呢?简单起见,我们先选择 直接映射的cache组成方式进行下文的分析。

首先对于一段物理内存(block),该物理内存上的每个字节的地址划分为以下几段:[3]

                                                   

                                                                           图4   处理器物理内存地址的划分

这样的话物理内存中的数据到cache的映射关系如下图5所示:

                               

                                                                                图5   cache的查找过程(直接映射)

    上图的映射原则就是:根据物理地址的中间三位(index字段)来定位当前数据应该在cache的哪一行,把物理地址的tag字段和该地址对应的内容放入对应的cache line的tag字段和data字段,并把相应的valid位置1。那么在之后进行cache寻找的时候就可以根据cache line的tag字段来辨认当前line中的数据是数据哪个block的。

    上图5中的地址00 000 00~11 111 11按照图4的原则进行地址划分:地址的最高两位为Tag字段;中间三位为index字段;最低两位为Block Offset 字段;

由于Block Offset是两位,也就是一个block的大小是2²=4个字节的数据,也就是一个cache line的data字段包含4个字节的数据;

index为3位,说明cache共包含2³=8个组(对于直接映射的cache,也称为8个行);

很明显,cache的一个行中只能存储1 块(Block )=4字节的数据,但是按照图5的映射方式,会有2^(tag位数) = 2^2 = 4块的数映射到同一个行,此时通过Tag字段的比较来辨别是不是我们要取数据的地址,如果不是的话,也就是发生了cache的缺失。如图5的Block 0和Block 1的index字段都是000,按照上面的理论它们都应该映射到第 000=0行(这儿的行也就是组,因为图5是直接映射的cache),但是现在第0行的内容是K、L、M、N,也就是Block 1的内容,为什么呢?仔细看该cache line的tag=01,映射到第0行的块只有Block 1的tag字段=01,所以可以得知此时该cache line中存储的数据是Block 1的数据,此时如果CPU发出的访存请求是访问Block 0 的话,也就是发生了缺失。此时进一步定量分析的话,共有4个数据块竞争使用cache 第0行的位置,也就是说cache的命中率为25%。

    上面的过程总结起来就是:

物理内存的索引字段(Index)选择cache 的行通过对比物理内存和cache line的Tag来判断是否命中块偏移字段(Block Offset)可以从cache line的数据块中选择期望数据。注意在这个过程中cache的index是不占空间的,它就类似于物理内存的地址,对于物理内存来说是通过地址去寻找数据,对于cache来说,是通过index来找到对应的cache line,或者更通俗的讲就是:cache line的地址对应的就是物理内存的index字段。

    此时该cache的容量计算如下:每一个cache line的数据字段占4个字节,共2³=8行,所以数据占据4×8=32个字节,一个cache line中tag字段和valid位占2+1=3bit,整个cache的tag+valid=3bit×8行=24bit=3Byte,通常情况下我们都是一cache中数据部分占的空间表示cache的容量,也就是32字节,但是实际上,它还额外多占用了3字节的存储空间[4]。

 

 图5的分析是针对直接映射的cache进行的,对于组相联或者全相连的cache的分析与之类似。

如果是组相连的cache每个组(set)里面包含多个行(line),通过内存地址的index字段来寻址组,确定组之后再根据tag来确定是否命中

对于全相连的cache,就不需要index字段了,因为全相连的cache相当于只有一个组的组相连cache。这是只需要根据要寻址的地址的tag来逐一与cache中的tag字段比较,如果有与之匹配的cache line,也就是cache hit了,如果遍历整个cache,也没有找到匹配的cache line,那就是cache miss了。

 

注:为了叙述的简单性,省略了内存地址通过TLB的的虚实转换部分,由[1]可知,内存地址的Tag部分其实是需要先经过TLB的转化才能够去和cache line的tag部分去进行匹配的。
--------------------- 
作者:十一月zz 
来源:CSDN 
原文:https://blog.csdn.net/baidu_35679960/article/details/78610804 

版权声明:本文为博主原创文章,转载请附上博文链接!

cache基础解析 cache 是一个放置在处理器和主存之间的小容量高速存储器阵列。它是一个存储部分最近访问的主存内容的缓冲。相比于系统存储器,处理器在可能的情况下更优先使用cache存储器,以改善系统的平均性能。写缓冲器是一个位于处理器内核主存之间的非常小的先进先出(FIFO)存储器,它可以把处理器内核cache存储器从低速的主存写操作中解脱出来。局部性原理说明,程序在执行过程中会频繁运行小范围的循环代码,而这些代码会对数据存储器中的局部数据反复访问。它解释了为什么使用带cache的内核后,系统的平均性能会显著改善。 阅读详情

相关推荐

深入解析Cache工作原理:从基础结构到高效优化策略

本文深入解析了Cache(高速缓存)的工作原理,从基础结构到高效优化策略。通过类比小卖部超市,生动阐释了Cache作为CPU主内存间高速存储区域的核心价值。文章详细拆解了Cache的经典布局(统一分离)、Cache结构、控制器工作流程,并重点探讨了直接映射组相联映射如何解决访问冲突。同时,系统阐述了写策略(直写/回写)、替换策略(LRU/轮转)和分配策略(读分配/写分配)三大核心机制,并提供了数据布局、代码优化、预取及多级Cache利用等实战优化技巧,旨在帮助开发者编写出对Cache友好的高性能代

weixin_29276847的博客 284

存储器学习笔记(cache、寄存器、内存、硬盘)

目录储存单位换算存储器的分级catch的结构工作原理结构三种映射方式直接映射全相联映射组相联映射总结cache的基本结构cache line) 储存单位换算 bit(比特)是计算机中表示数据的最小单位,经常听到的16位机、32位机,就是指比特 Byte(字节)是计算机处理数据的单位,计算机以字节为单位处理数据 1Byte = 8 bit KB、MB、GB中的B指的就是Byte,字节是数据传输的基本单位,为8位2进制数,00000000~ 11111111换算成十位数就是0~255 1TB=1024GB

qq_36334929的博客 4659

零成本矩阵玩法:1人运营5个账号的自动化工具链配置(2025全平台实战)

通过“AI内容生产+工具链分发+自动化变现”的组合拳,即使是新手也能实现1人运营5个账号的规模化收益。关键在于选对工具设计标准化流程。未来,矩阵运营的竞争将聚焦于工具使用效率数据洞察深度,快人一步者方能抢占先机!

TuFuir的博客 3700

cache和内存

1)cache预取 2)cache一致性 3)TLB问题和大页 4)DDIO

造梦先森Kai的专栏 5169

Cache是什么?看完你就懂了(适用于小白)

基于计算机组成的简单Cache讲解 本文目录 为什么需要Cache Cache的基本特点 什么样的数据需要放入Cache Cache的基本结构 Cache的工作流程 Cache工作原理 Cache的改进 为什么需要Cache(高速缓冲存储器)? 我们都知道CPU处理数据的速度非常快,虽然内存的读写速度也不慢,但是相对于CPU它的速度就显得太慢了,所以如果单纯地让CPU对内存进行读写,所消耗...

panda的博客 6万+

cache存储器最全详细介绍

因为主存地址空间大小为256MB,所以为2的28次方,因为Cache主存块的大小需要相等,所以主存块分为22块(2的28次方除于2的6次方)主存块号为22位,因为主存地址为28位,所以剩余6位给块内地址。因为主存地址空间大小为256MB,所以为2的28次方,因为Cache主存块的大小需要相等,所以主存块分为22块(2的28次方除于2的6次方)主存块号为22位,因为主存地址为28位,所以剩余6位给块内地址。如下图:0号Cache块存储的是9号主存,3号Cache块存储的不是0号主存(因为有效位是0)

m0_59860403的博客 7447

Cache的功能、结构工作原理

 高速缓冲存储器是存在于主存CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。 Cache的功能是用来存放那些近期需要运行的指令数据。目的是提高CPU对存储器的访问速度。为此需要解决2个技术问题:一是主存地址缓存地址的映象及转换; 二是按一定原则对Cache的内容进行替换。   Cache结构工作原理如图2.3.1所示。

ChipArtist's Blogs 4793

4.2 计算机体系结构——存储层次结构——cache工作原理

cache是小容量、高速缓冲存储器,由SRAM组成,速度几乎和CPU一样快。一般将cache和主存的存储空间都划分为若干大小相同的块

知识,既贵,又便宜。 2万+

(转)Cache的功能、结构工作原理

Cache的功能、结构工作原理   高速缓冲存储器是存在于主存CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。 Cache的功能是用来存放那些近期需要运行的指令数据。目的是提高CPU对存储器的访问速度。为

hivivi的专栏 1719

cache说明

参考 cache结构工作原理 计算机缓存Cache以及Cache Line详解

chengbeng1745的博客 317

Cache工作原理Cache一致性,你想知道的都在这里

关注「开源Linux」,选择“设为星标”回复「学习」,有我为您特别筛选的学习资料~可以随便到网上查一查,各大互联网公司笔试面试特别喜欢考一道算法题,即LRU缓存机制,又顺手查了一下LRU...

关注微信公众号【开源Linux】,后台回复『10T』,领取10T学习资源大放送,涵盖Linux、虚拟化、容器、云计算、网络、Python、Go等书籍和视频 2628

深入理解Cache工作原理

点击上方“码农突围”,马上关注这里是码农充电第一站,回复“666”,获取一份专属大礼包真爱,请设置“星标”或点个“在看作者:桔里猫来源:https://zhuanlan.zhihu.com...

欢迎关注公众号:【码农突围】,回复9999,可以获取一份LeetCode刷题笔记 215

Arm cache 研究

Cache工作原理    Cache工作原理是基于程序访问的局部性。     对大量典型程序运行情况的分析结果表明,在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内。指令地址的分布本来就是连续的,再加上循环程序段和子程序段要重复执行多次

winmenaruto的专栏 799

29高速缓冲器Cache工作原理

1、 程序访问的局部性原理 程序访问的局部性原理包括时间局部性和空间局部性。 2、 Cache的基本工作原理 Cache位于存储器层次结构的顶层,通常由SRAM构成,其基本结构如下

weixin_41883890的博客 269

【深圳大学计算机系统2】实验五 Cache实验

在优化后的代码中,我们使用OpenMP库的指令进行并行化,通过使用#pragma omp parallel for指令,将矩阵相乘的任务分配给多个线程并行执行。2.矩阵分块:将大矩阵分割为更小的块,可以提高局部性,减少对主存的访问次数,从而提高Cache的命中率和数据重用,进而提高性能。在优化后的代码中,我们使用了矩阵分块的策略,将矩阵相乘过程划分为多个小块的计算,以充分利用局部性。通过调整循环的顺序,使得内层循环访问的数据更加连续,可以提高缓存命中率,减少缓存不命中的次数,从而提高性能。

归忆_AC的博客 3495

CDN的cache节点(http)结构工作原理总结(图自画)

无数的cache节点再加上调度就是一个cdn,当然这玩意如果放在运营商里面就是个cache,一来可以帮运营商节省流量,节省其到别的运营商的回源带宽,二来提高用户的用户体验,让用户访问速度更快,结构图如下:650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/7F/00/wKiom1cPSAfj_xAOAADpDp_qBCY949.png

运维网咖社 1082
上一篇: RAM、ROM的概念与区别,Cache
下一篇: 4.0 Xilinx Zynq-7000 SoC Data Sheet: Overview
桃子味的梨
博客等级 码龄12年 129粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值