首页 > 其他分享 >3.6 Cache存储器

3.6 Cache存储器

时间:2022-10-06 11:57:36浏览次数:51  
标签:Cache cache 存储器 主存 tc 3.6 访问 CPU

Cache引入原因:
(1)CPU和主存速度存在差异
(2)CPU和I/O争抢访存
一旦主存与I/O交换信息,主存可以将CPU需要的信息提前送至缓存, CPU可直接从缓存中读取所需信息,不必空等影响效率。

基本原理

功能:
解决CPU和主存之间的速度不匹配问题

实现: 全由硬件调度,对用户透明(程序员无法调用)

  • 一般采用高速的SRAM构成。

  • CPU和主存之间的速度差别很大,采用两级或多级Cache系统
    早期的一级Cache在CPU内,二级在主板上
    现在的CPU内带L1 Cahe和L2 Cahe

cache基本原理

  1. cache是介于CPU和主存之间的小容量存储器,但存取速度比主存快。主存容量配置几百MB的情况下,cache的典型值是几百KB。

  2. cache能高速地向CPU提供指令和数据,从而加快了程序的执行速度。

  3. 从功能上看,它是主存的缓冲存储器,由高速的SRAM组成。

  4. 为追求高速,包括管理在内的全部功能由硬件实现,因而对程序员是透明的。

一块由多个字构成

Cache的设计依据:

  1. 局部性原理
    CPU这次访问过的数据和指令,下次有很大的可能也是要访问的数据和指令(时间局部性);
    CPU这次访问过的数据和指令,下次有很大的可能也是附近的数据和指令(空间局部性)。

  2. CPU与Cache之间的数据传送是以字为单位
    主存与Cache之间的数据传送是以块为单位

实现原理
image

假设存储系统是模块化的,主存中每个模块和cache 相联系。
cache 分为 x 行,每行 y 个字(W)。
分配给 cache 的地址存放在一个相联存储器 CAM 中,它是按内容寻址的存储器。

当 CPU 执行访存指令时,就把所要访问的字的地址送到 CAM;
如果W 在cache中,直接读取。
如果 W 不在 cache 中,

  • 则将 W 从主存传送到 CPU。
  • 与此同时,把包含 W 的由前后相继的 4 个字所组成的一行数据送入 cache,替换原来 cache 中的一行数据。

在这里,由始终管理 cache 使用情况的硬件逻辑电路来实现替换算法。

1CPU读主存时,便把地址同时送给Cache和主存,
Cache控制逻辑依据地址判断此字是否在Cache中

  • 若在(命中)此字立即由Cache传送给CPU
  • 否则(未命中),则用主存读周期把此字从主存读出送到CPU
    与此同时,把含有这个字的整个数据块从主存读出送到Cache中。

Cache的命中率

从CPU来看,增加一个Cache的目的,就是在性能上使主存的平均读出时间尽可能的接近Cache的读出时间。

为了达到这个目的,在所有的存储器访问中由Cache满足CPU需要的部分应占很高的比例,即Cache的命中率应接近于1。由于程序访问的局部性,实现这个目标是可能的。

在一个程序执行期间,设\(N_c\)表示Cache完成存取的总次数,\(N_m\)表示主存完成存取的总次数,h定义为命中率,则有

\[命中率:h=N_c/(N_c+Nm) \]

若\(t_c\)表示命中时的Cache访问时间,\(t_m\)表示未命中时的主存访问时间,1-h表示未命中率,则Cache/主存系统的平均访问时间\(t_a\)为:

\[Cache/主存系统的平均访问时间:t_a=h*t_c+(1-h)t_m \]

我们追求的目标是,以较小的硬件代价使Cache/主存系统的平均访问时间ta越接近tc越好。

设\(r=t_m/t_c\)表示主存慢于Cache的倍率,e表示访问效率,则有

\[访问效率:e=\frac {tc}{ta}=\frac{tc}{(h*tc+(1-h)*t_m)} \]

\[=\frac{1}{(h+(1-h)*r)} \]

\[=\frac{1}{(r+(1-r)*h)} \]

由表达式看出,为提高访问效率,命中率h越接近1越好,r值以5—10为宜,不宜太大。

因此:命中率h与程序的行为、Cache的容量、组织方式、块的大小有关。

、CPU执行一段程序时,Cache完成存取的次数为1900次,主存完成存取的次数为100次,已知Cache存取周期为50ns,主存存取周期为250ns,求Cache/主存系统的效率和平均访问时间。

解:
h=Nc/(Nc+Nm)=1900/(1900+100)=95%
r=tm/tc=250ns/50ns=5
e=1/(r+(1-r)h)=1/(5+(1-5)×0.95=83.3%
ta=tc/e=50ns/0.833=60ns

两种不同速度、不同容量、不同价格的存储器组织在一起,需要解决有关的三个问题:信息放置问题、替换问题和改写问题。

标签:Cache,cache,存储器,主存,tc,3.6,访问,CPU
From: https://www.cnblogs.com/kingwz/p/16757331.html

相关文章

  • 3.5 并行存储器
    由于CPU和主存储器之间在速度上是不匹配的,这种情况便成为限制高速计算机设计的主要问题。为了提高CPU和主存之间的数据传输率,除了主存采用更高速的技术来缩短读出时间外,......
  • SpringBoot--解决@Transactional与@CacheEvict联合使用导致的缓存与数据库的一致性问
    ​简介说明    本文介绍@Transactional与@CacheEvict联合使用导致的缓存与数据库的一致性问题的原因及解决方案。注解的作用        @Transactional:给当前......
  • [Oracle] LeetCode 146 LRU Cache 经典题
    DesignadatastructurethatfollowstheconstraintsofaLeastRecentlyUsed(LRU)cache.ImplementtheLRUCacheclass:LRUCache(intcapacity)Initializethe......
  • Cache缓存帮助类
    publicclassCache{privatestaticCache_cache=HttpRuntime.Cache;///<summary>///本地缓存获取///</summary>///<paramname="name"......
  • STM32F10x SPL V3.6.2 集成 FreeRTOS v202112
    STM32F10xSPL集成FreeRTOS在整理GCCArm工具链的Bluepill代码示例,常用外设都差不多了,接下来是FreeRTOS,网上查到的基本上都是基于旧版本的集成,STM32SPL版本......
  • Memcached vs Redis, 挑选哪一个?
    MemcachedvsRedis,挑选哪一个?标签:MencachedRedisMemchached还是Redis?该用哪一个?当我们讨论改进性能的时候,这是每次技术讨论中最常见的一个问题。每当性能需要改善时......
  • 关于128X8静态存储器芯片设计(转)
    今天在网上找资料,找到了这个拿来和大家分享学习,其实集成电路也不过如些,并不像普通人想象的那个复杂,那么高不可攀!一、设计基本思路 首先基本存储单元有128个每个8位的存......
  • 安装redis-4.0.9和memcached
    安装redis-4.0.9和memcached yum-yinstallgcc-c++wgetvimunzipzipmemcachedcd/mkdirsoftwarecd/softwarewgethttp://download.redis.io/releases/redis-4.0......
  • memcached安装
    安装memcached yuminstall-ymemcached /usr/bin/memcached-d-l192.168.7.129 -p11211-m150-uroot -d守护进程模式(退出终端窗口之后使程序还在运行),-l......
  • springboot 整合Ehcache的使用
    Springboot提供了换粗的统一整合接口,方便缓存技术的开发与管理。Generic,JCache,Ehcache,Hazelcast,Infinispan,Couchbase,Redis,Caffenine,Simple(默认缓存),Memcached。如何整合......