前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图解 | CPU-Cache

图解 | CPU-Cache

作者头像
虚拟化云计算
发布2021-05-08 15:24:23
1.2K0
发布2021-05-08 15:24:23
举报
文章被收录于专栏:虚拟化云计算虚拟化云计算

‍‍‍

‍‍‍这是图解系列之CPU cache基本原理

关注阅读更多图解

对内存管理还不太清楚的可以先看看我之前关于MMU的文章。

早期的CPU没有Cache,随着CPU频率的提高,主内存跟不上CPU的频率,CPU需要等待主存,所以 Cache 的出现了,它是解决CPU和内存之间的频率不匹配的问题。

缓存级别越小,越接近CPU,意味着速度越快,容量越小。

下面是一种典型的Cache分布图,每个CPU核独享L1和L2 Cache,一个CPU封装内的核共享L3 Cache。

当CPU读写内存时,首先获取L1 Cache中的数据,如果没有,则再去L2 Cache中找,依次类推,如果Cache中不存在,就去主内存中找,路径越长,时间越长。

Cache的组织结构

Cache的组织形式是:把Cache划分成多个Set,每个Set中有多路Cacheline。

Cacheline中包含valid、tag和data,valid和tag会在查找Cacheline时用到,data是真正缓存的内存数据。

1 直接映射,每个Set只有一个Cacheline。

2 组相联,多个Set,每个Set有多个Cacheline。

3 全相联,只有一个Set,所有Cacheline都在这个Set中。

其中组相联中有一个Way的概念,用来表示一个Set中Cacheline的数量。

例如一个Set中有4个Cacheline的话,就叫4路组相联( 4-way set associative)。

Cache的查找方式

CPU发出虚拟地址后,会在Cache中查找该地址对应的内存数据。

地址被分成了3段:

offset是表示该内存数据在Cacheline中data中的offset。

index是用来定位Set的。

tag是和Cacheline中的tag做匹配的。

这里:

offset的位数和一条Cacheline内数据长度对应。

index的位数和set的数量对应。

首先根据index来查找到对应的Set。

然后根据tag去和Set中每条Cacheline做比较。

最后根据offset在Cacheline的data中找到对应的数据。

Cache控制器查找Cacheline时,可以根据物理地址,也可以根据虚拟地址,也可以物理和虚拟地址相结合的查找。

1. VIVT,index和tag都取自虚拟地址。

CPU发出虚拟地址后,Cache控制器直接把虚拟地址分三段,去匹配Cacheline。如果 cache miss,则通过MMU进行虚实转换load内存到Cacheline,此时cache hit。

2. PIPT,index和tag都取自物理地址。

CPU发出虚拟地址后,经过MMU转换为物理地址。Cache控制器把物理地址分三段,去匹配Cacheline。如果 cache miss,则load内存到Cacheline,此时cache hit。

3. VIPT,index取自虚拟地址,tag取自物理地址。

CPU发出虚拟地址后,Cache控制器在虚拟地址中取index,通过MMU进行虚实转换后取tag,然后去匹配Cacheline,如果cache miss则load内存到Cacheline,此时cache hit。

4. PIVT,index取自物理地址,tag取自虚拟地址。

这是图解系列之CPU cache基本原理

关于一致性以及别名和歧义

将在后面的文章中介绍

关注阅读更多图解

重要的事:Cloud3今后会陆续出些图解系列的文章,这系列文章中如果发现有错误,可以在留言中指出。对于指出的逻辑错误,Cloud3会给予红包感谢。当然错别字就算了,你会把我搞破产的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 虚拟化云计算 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档