Cache引入原因:
(1)CPU和主存速度存在差异
(2)CPU和I/O争抢访存
一旦主存与I/O交换信息,主存可以将CPU需要的信息提前送至缓存, CPU可直接从缓存中读取所需信息,不必空等影响效率。
基本原理
功能:
解决CPU和主存之间的速度不匹配问题
实现: 全由硬件调度,对用户透明(程序员无法调用)
-
一般采用高速的SRAM构成。
-
CPU和主存之间的速度差别很大,采用两级或多级Cache系统
早期的一级Cache在CPU内,二级在主板上
现在的CPU内带L1 Cahe和L2 Cahe
cache基本原理
-
cache是介于CPU和主存之间的小容量存储器,但存取速度比主存快。主存容量配置几百MB的情况下,cache的典型值是几百KB。
-
cache能高速地向CPU提供指令和数据,从而加快了程序的执行速度。
-
从功能上看,它是主存的缓冲存储器,由高速的SRAM组成。
-
为追求高速,包括管理在内的全部功能由硬件实现,因而对程序员是透明的。
一块由多个字构成
Cache的设计依据:
-
局部性原理
CPU这次访问过的数据和指令,下次有很大的可能也是要访问的数据和指令(时间局部性);
CPU这次访问过的数据和指令,下次有很大的可能也是附近的数据和指令(空间局部性)。 -
CPU与Cache之间的数据传送是以字为单位
主存与Cache之间的数据传送是以块为单位
实现原理
假设存储系统是模块化的,主存中每个模块和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