存储器的层次结构
计算机存储器的设计目标可归纳为三个问题:
多大的容量? 多快的速度? 多贵的价格?
存储器的这三个特征即价格、容量、访问时间之间存在着一定的折中。
实现存储器系统需要各种各样的技术,但各种技术之间存在着如下关系:
- 存取速度越快,每“位”的价格越高。
- 容量越大,每“位”的价格越低。
- 容量越大,存取速度越慢。
划重点啊后两条!!
需求总会是又大又快。。但二者却存在冲突。
解决这一问题的方法是 不使用单一的存储组件或技术,而是 存储器层次结构
一种典型的层次结构如图,从上到下有这样的规律:
- 价格递减;
- 容量递增;
- 速度递减;
- 处理器访问该存储器的频率降低。
最后一条成立的基础是局部性原理
我们把容量较大、价格较低的慢速存储器作为容量小、价格高的快速存储器的后备。
高速缓存
动机:
在整个指令周期中,处理器至少访问一次存储器,处理器的执行速度必然受存储周期的限制。
如果这两者不匹配,这一限制会带来很大问题。。
理想情况下,内存的构造技术可以采用与处理器中的寄存器一样的构造技术,这样的话内存的存储周期才跟得上处理器周期。
但是成本太大。
解决的办法即利用局部性原理:
在处理器和内存之间提供一个容量小但速度快的存储器,称为高速缓存。
原理:
上图中,有一个容量相对大但速度慢的内存,以及一个容量小速度快的高速缓存。
高速缓存中有一部分内存数据的副本,当处理器试图读取存储器中的一个字节或字时,首先会检查该数据是否在高速缓存中,
如果在,该字节直接从高速缓存进入处理器;
否,将从内存中取出一个包含需要的字节或字的块,放入高速缓存中。
根据局部性原理,当一块数据被放入高速缓存中以满足一次存储器访问时,很可能接下来的多次访问也会集中在这一个块中。
高速缓存/内存结构:
内存有2^n个可以寻址的字组成,每个字有唯一的n位地址,为便于映射,可认为该存储器由一组块组成,每个块有k个字。
高速缓存中有C个存储槽,每个槽可放k个字(即可容纳一个块),槽的数量远小于内存中块的数量。
内存中块的某些自己留在告诉缓存的槽中,当处理器试图读取存储器中某一个块的一个字节或字时,而该块不在高速缓存中的槽之中时,则将这个块取到槽中。
一个槽不可能唯一或永久对应一个块。因此每个槽有一个标签以标识当前为哪个块,
标签通常是地址中较高的若干位,标识以这些位开始的所有地址。
下图为该过程: