Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1000149
  • 博文数量: 135
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1785
  • 用 户 组: 普通用户
  • 注册时间: 2016-12-21 22:26
个人简介

90后空巢老码农

文章分类

全部博文(135)

文章存档

2020年(33)

2019年(54)

2018年(47)

2017年(1)

我的朋友

分类: LINUX

2020-06-30 11:58:38

  • 关于高速缓存
高速缓存就是指位于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
在介绍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,其工作方式没有太大变化,都是上层缓存命中,则直接返回;若没有命中,去下一层查找,找到之后,会回写到上层缓存。
另外,之所以这么一层一层的缓存访问下来,是托了时间空间局部性的福



阅读(70) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~