为什么使用Cache
- 因为主存和CPU发展速度的剪刀差,导致主存与CPU之间性能差异越来越大,主存称为限制计算速度的瓶颈。为了缓解这种差异,在主存与CPU之间加入速度更高的Cache。
- 由于IO访存优先级比较高,在IO访存的时候,主存一直忙,会造成CPU空等。为了解决这个问题,也需要在主存与CPU之间加入Cache作为缓冲。
程序访问的局部性原理
Cache的基本结构和读写操作
读操作
- 通过地址变换算法将主存地址变换为缓存地址
- 判断缓存是否命中
- 若命中,就将信息送入CPU
- 若未命中,则将信息通过主存调入CPU,同时将信息写入缓存,需要替换时,利用替换算法进行替换
写操作
写操作需要解决Cache和主存一致性的问题,一般采用两种方式
- Write Through
同时将信息写入主存和Cache,写操作时间就是访问主存的时间,更新策略比较容易实现 - Write Back
只把数据写入Cache,当块从Cache中退出时才将更新了的数据写入主存,写操作时间就是访问Cache的时间,但是增加了Cache的复杂性
Cache的命中与命中率
Cache的命中是指欲读取的数据已经在缓存内。
命中率是指命中Cache的次数占访问信息总次数的比率,
h
=
N
c
N
c
+
N
m
h =\frac{N_c} {N_c+N_m}
h=Nc+NmNc
平均访存时间
t
a
t_a
ta为
t
a
=
h
×
t
c
+
(
1
−
h
)
×
t
m
t_a = h\times t_c+(1-h)\times t_m
ta=h×tc+(1−h)×tm
访存效率
e
e
e为
e
=
t
a
t
c
×
100
%
e=\frac{t_a}{t_c} \times 100\%
e=tcta×100%
Cache的改进
- 增加Cache的级数
- 将Cache分立,做成分立缓存(程序和数据)