1、cache的作用
cache由SRAM构成,cache存取速度远高于内存,存储容量远小于主存。
cache仅保存主存中最活跃的一部分副本,以便CPU能高速的访问他们,从而解决CPU与内存速度不匹配的问题。
2、程序的局部性访问原理
(1)时间局部性
现在正在用的数据,很可能在不久的将来仍然被使用。
(2)空间局部性
现在正在用的数据,很可能与不久的将来要用到的数据相邻。
3、cache工作原理
为了方便cache和主存空间交换信息,cache和主存都被划分为许多大小相等的块,每一块由若干字节组成,cache块也成为cache行。

CPU访存可以分为两种方式,一种是先访问cache,未命中再访问主存,另一种是二者同时访问。
CPU根据MAR中的地址访存,若访存地址在Cache中命中,就将此块一次性的从主存调入cache。
4、cache命中率与cache
CPU欲访问的信息已经在cache中的比率称为cache的命中率。
cache命中率 = 访问cache次数/访问主存次数+访问cache次数
假设命中率为H,Tc为命中是的cache访问时间,tm为未命中时的主存访问时间
(1)先访问cache,未命中再访问主存
平均访问时间ta = H*tc + (1-H)*(tc + tm )
(2) 同时访问cache和主存
平均访问时间 ta = Htc + (1-H)tm
主存的映射关系
重头戏登场了,首先我们想一下,为什么需要映射呢,他有什么作用呢?CPU访问cache如果没有命中,他就会去访问主存,之后需要将主存中的这一块复制到cache中。那么问题就来了,这块内容我该放在cache的哪里呢,我为什么就放在这里,不放在另一个地方,这就是地址映射的作用了。
主存分块制度:引入这种制度后,主存的物理地址就划分为了主存块号加块内地址。
同理cache地址也会分为几个部分,包块标记、cache行号、块内地址。其中cache行号和块内地址对那个主存中的主存块号和块内地址。
标记的作用:指明当前这一块是主存中那一块的副本。
同时,每个cache行会分配一个有效位,来说明cache行中的信息是否有效,1代表有效,0代表无效。
1、全相联映射
主存中的每一块都可以装入cache中的任意位置
主存地址结构:

cache地址结构:

举个栗子:
假设主存为1MB,按字节编址,cache有八个cache行,行长为64B
那么可以得出:主存容量:1MB-》2^20B——》主存地址为20位
行长:64B-》2^6B->块内地址6位
全相联映射中,直接讲整个主存块号用作标记,也就是讲主存中的某一块映射到cache中的某一块后,cache中的标记就是映射过来的主存块号,此时,就可以通过cache当前这一块的标记来指明当前这一块是主存中的哪一块的副本。
全相联映射的优缺点分析:
优点:灵活,cache冲突率低,空间利用率高,命中率也高
缺点:比较速度缓慢,实现成本高,通常需要采用昂贵的按内容寻址的相联存储器进行地址映射。
2、直接映射
主存中的每一块只能装入cache的唯一位置。
主存块在cache中的位置 = 主存块号%cache的总块数
主存地址结构:

在全相联映射中,是直接讲整个主存块号用作标记,而在直接映射中,由于主存块的映射方式为主存块号%cache总块数,而cache总块数一般可以写成2^n次方的形式,所以说主存块号的后n位已经直接指明了当前这一块主要存放在cache中的哪一个位置,也就是主存块号的后n位是cache行号。故我们假设主存块号为m位,cache行号n位,标记则不需要像全相联映射那样m位,只需要m-n位。











