高速缓存就是指位于CPU和主存(DRAM)之间的硬件存储,目前大多数都是3层,L1到L3,其访问速度以CPU时钟周期为单位的对照大致如下表(数字不太精确,有个直观感受)
cpu时钟周期
|
1
|
L1访问
|
3
|
L2访问
|
10
|
L3访问
|
40
|
DRAM访问
|
350
|
高速缓存是按照行来进行组织结构的,其大致分如下几类:
1. 通用的高速缓存存储器的组织结构
一个计算机系统,地址县一共m根,则其可寻之范围是[0,2^m-1];那这样的一台机器的高速缓存将被组织成一个有S=2^s个高速缓存组的数组,每个组内包含E个高速缓存行,每一行是由一个B=2^b字节的数据块组成的(也就是说块内的字节偏移两为[0,2^b-1]),一个有效位指明这一行是否包含有意义的信息,还有t=m-(s+b)个组内行标记位,具体如下图:
这样,一个高速缓存的容量也就是C=S*E*B
其工作流程大概是
a)一个地址(物理地址)addr过来,先根据s位组索引找到对应的组
b)再根据t位标记来找到对应的行,并check行当中存储的有效位
c)若步骤2当中的行有效,则根据b位块内偏移找到对应的字节
2. 直接映射高速缓存
每个组都只有一行的情况,称为直接映射高速缓存,其工作方式同上
3. 组相关高速缓存
通常情况下,就是1当中说的形式,这里需要注意的是,如果选中的行没有在高速缓存当中,并且高速缓存已经满了,需要进行缓存的替换,具体替换策略有LFU,LRU等
在介绍TLB之前,需要先简单蒋介下地址转换的过程,如下图:
a)cpu发送进程要访问的虚拟地址给MMU
b)MMU县根据VA查看其对应的页表项是否位于L1当中,如果命中,直接返回页表项当中对应的物理地址PA;若没有命中,需要L1 cache去和贮存沟通,获取对应的页表项,并将页表项同时返回给MMU和放入L1 cache
c)MMU对得到的物理地址PA进行访问,若L1命中,则直接返回对应数据;如果L1没有命中,则需要去主存中查询,并将结果同时返回给cpu和放入L1
这样的工作流程其实是可以工作的,但是人们对于速度的追求是没有止境的,为了平衡L1和处理器之间的时间差,大佬们在cpu芯片当中加入了TLB缓存,它是MMU直连的,速度堪比寄存器。TLB当中每一行都保存着一个由页表项组成的块,其组织形式和上面的高速缓存类似,如下图所是:
其中tlb标记和tlb索引由虚拟页号(VPN)决定
有了TLB之后,虚拟地址转物理地址就相当于在L1和MMU之间家了一个更加高速的缓存TLB,其工作方式没有太大变化,都是上层缓存命中,则直接返回;若没有命中,去下一层查找,找到之后,会回写到上层缓存。
另外,之所以这么一层一层的缓存访问下来,是托了时间空间局部性的福
阅读(2129) | 评论(0) | 转发(0) |