首页 > 其他分享 >缓存Cache

缓存Cache

时间:2023-09-22 15:02:10浏览次数:34  
标签:缓存 标记 分区 Cache 调入 内存 CPU

研究生课程老师给了一篇论文,是关于缓存的,看完Abstract一脸懵逼之后决定来恶补一下,视频是观看的计算机组成原理(哈工大刘宏伟),这个随笔里的截图什么也都是视频里直接截图的,我只是想做个笔记自己之后再看~~~。

一、缓存存在的目的
image
程序局部性原理:通俗来讲就是一个变量在程序运行过程中,如果被引用过一次,那后续很有可能会再被引用到。在这里如果CPU访问一个块,那就将其调入缓存,我们认为CPU后边还会多次访问这个块,这样速度就能提高。

二、工作原理
(1)内存与缓存的编址
image
内存与Cache的块大小相同,但是数量不同,内存中的块的个数会远远大于Cache中的块的个数。两者的块内大小完全相同,两者传输数据的单位就是一个块,所以块内字节顺序不变,两者一一对应。Cache上的标记,标记了内存块和Cache块的对应关系,如果内存块要调入到Cache中,那么Cache相应的块的标记就是内存块号,CPU想要找内存中的块的话就先利用标记从Cache中找。

(2)命中与未命中
image

(3)Cache-内存系统效率

\[效率e = \cfrac{访问Cache 的时间}{平均访问时间} \times 100\% \]

设Cache命中率为\(h\),访问Cache的时间为\(t_c\),访问主存的时间为\(t_m\),那么:

\[效率e = \cfrac{t_c}{h \times t_c + (1 - h) \times t_m} \times 100\% \]

当\(h = 0\)时,说明一次都没有命中,\(e\)达到最小值\(\cfrac{t_c}{t_m}\);
当\(h = 1\)时,说明全部命中,\(e\)达到最大值\(1\),即\(100\%\)命中率。

三、Cache基本结构
image
CPU访问内存,需要给出地址(块号 + 块内地址),其中块内地址相同,Cache块号需要将内存块号输入到映射变换机构获得,然后判断是否命中,如果命中,则直接从Cache中调入CPU;如果不命中,则需要访问内存,同时判断内存块是否能够调入Cache,如果Cache满,则需要进入替换机构执行替换算法,如果Cache没满,则直接调入。

四、Cache的读写操作
(1)读操作
image
(2)写操作
image

四、Cache的地址映射

  • 直接映射
  • 全相联映射
  • 组相联映射
    (1)直接映射
    image
    根据Cache长度和内存长度,把内存划分为若干个分区,每个分区大小与Cache的大小相同,就是包含的字块数相同,所以每个分区中的第0块就只能调入到Cache的第0块,每个分区的第1块,就只能调入到Cache的第1块......,Cache每一块前边的标记就是当前块在内存(主存储体)的分区号,CPU给出的访问地址就是主存子块标记(分区号) + Cache子块地址(块号) + 字块内地址,比较器就可以直接比较主存子块标记和Cache子块标记即可(分区号),缺点就是容易发生冲突,导致Cache利用率很低,因为内存的每一块能够调入Cache的位置只有一块,假如现在Cache中只有内存分区0中的第1块,现在CPU想要内存分区1中的第1块,这样就只能把Cache中第1块挤出去,但是明明Cache还有很多其他位置,这就导致了利用率低。

(2)全相联映射
image
内存的每一块都可以存放到Cache的任何一块,Cache中的标记是当前块在内存中的块号,这样Cache利用率高了,但是找起来就麻烦了,当CPU给出访问地址后,需要从头到尾在Cache中对着标记挨着找。

(3)组相联映射
image
就是直接相联和全相联的折衷。
先将Cache分成块,然后再分成组,每组中可以包含2,4,6......块,Cache分成了多少组,内存中每个分区就包含了多少块,就是内存中每个分区的第0块就只能去Cache的第0组,第1块就只能去Cache的第1组,......,去到Cache的组里之后就属于是全相联了,就可以随便选位置。

四、替换算法
(1)FIFO先进先出算法
最早进入Cache的块会在Cache满后最早被替换出去。
(2)近期最少使用算法LRU算法
最近一段时间里是用最少的块会被替换走,比较好的体现了程序的局部性(时间局部性)。

标签:缓存,标记,分区,Cache,调入,内存,CPU
From: https://www.cnblogs.com/ZhengLijie/p/17722307.html

相关文章

  • 手动下载并安装 PHP 和 WinCache
    https://learn.microsoft.com/zh-cn/iis/application-frameworks/scenario-build-a-php-website-on-iis/configuring-step-1-install-iis-and-php手动下载并安装PHP和WinCache打开浏览器到 WindowsforPHP下载页 并下载PHP非线程安全zip包。从 适用于PHP的......
  • 浅析Postgresql cache hit ratio
    一、查找cachehitratio 查看cachehitratio 这个东西其实放到其他数据库也是一样,如果你的内存对于系统的缓冲支持不足,需要的数据无法驻留在内存,经常会产生faultpage(有些数据库对于读取的数据不在内存中的一种叫法),那就必须要要查看你的一个系统参数cachehitratio,......
  • 记录一下前端缓存分类汇总(indexDB、localStorage、sessionStorage)
    什么是缓存?当我们第一次访问网站的时候,比如juejin.cn,电脑会把网站上的图片和数据下载到电脑上,当我们再次访问该网站的时候,网站就会从电脑中直接加载出来,这就是缓存。缓存的优点和应用场景Web缓存种类:indexDB、localStorage、sessionStorage。缓解服务器压力,不用每次都去请......
  • KVCache原理简述
    在GPT的推理过程中,它根据完整的提问和回答的已生成部分,来生测下一个词(的概率)。例如,我们的提问是【天王盖地虎,】,回答是【宝塔镇河妖。】。那么第一次,GPT根据【天王盖地虎,】生成【宝】,之后根据【天王盖地虎,宝】生成【塔】,以此类推,直到碰上终止符。这里面提问【天王盖地虎,】的QKV......
  • CDN内容缓存
    CDN分发系统的架构。CDN系统的缓存,也是一层一层的,能不访问后端真正的源,就不打扰它。在没有CDN的情况下,用户向浏览器输入www.web.com这个域名,客户端访问本地DNS服务器的时候,如果本地DNS服务器有缓存,则返回网站的地址;如果没有,递归查询到网站的权威DNS服务器,这个权威DNS......
  • 谷歌优化里的cache: 搜索运算符
    cache: 运算符是可用于查找网页的缓存版本的搜索运算符。Google会生成缓存版本,以便在网站无法访问的情况下,用户仍可访问网页。cache: 运算符只能用于网页搜索。虽然Google缓存的目标受众群体是Google搜索用户,但它对网站创建者和开发者了解Google在将网页编入索引时看到的......
  • Redis学习之缓存穿透
    缓存穿透攻击者可以恶意请求数据库中不存在的数据,从而使得每次查询都要绕过缓存查数据库,增大数据库的压力。解决方案:1.缓存空值:比如塞一个空字符串。注意可以给空对象的键过期时间设置短一些,或者在新增数据时强制清除下对应缓存(防止查出来还是null)2.布隆过滤器预防做法:......
  • Redis学习之缓存实现及缓存更新
    介绍什么是缓存?缓存就是数据交换的缓冲区(称作Cache[kæʃ]),是存贮数据的临时地方,一般读写性能较高。为什么需要缓存?提前准备好数据,便于更快地读写。 缓存是把双刃剑,要权衡利弊。优点:降低后端负载提高读写效率,降低响应时间缺点:数据一致性成本代码维护成本运维......
  • dns缓存中毒43.227.199.x
    什么是DNS缓存中毒DNS缓存中毒是一种网络攻击,它使您的计算机误以为它会到达正确的地址,但事实并非如此。攻击者使用DNS缓存中毒来劫持互联网流量并窃取用户凭据或个人数据。DNS缓存中毒攻击也称为DNS欺骗,它试图诱骗用户将其私人数据输入不安全的网站。什么是DNS缓存在讨论攻击之......
  • 缓存穿透,缓存击穿,缓存雪崩区别
    缓存穿透,缓存击穿,缓存雪崩区别发现自己有时候明明已经做过了,可能是缺少回顾总结,过了几天这部分知识就会忘的一干二净,一点有记不住,还有这三个概念有时候确实不太能把他分清楚,面试的时候也有让自己说清楚,说的一塌糊涂,所以总结一下一、缓存穿透,缓存击穿,缓存雪崩简单的区别缓存......