菜单

kaoqi
kaoqi
发布于 2026-08-05 / 9 阅读
1
0

高速缓存基本结构

这里主要介绍的是缓存命中与否的机制。缓存是一个比主存小很多,但是快很多的器件。

可以从逻辑的角度上,描述缓存这个硬件为一个如下输入、如下输出的一个逻辑结构抽象:

缓存的输入:

1、输入一个地址

2、输入一个解析地址的逻辑结构

3、索引对应标记不命中时,从主存中新增该索引对应正确标记地址的数据

缓存的输出:

1、以给定地址逻辑结构的方式输出命中索引的标记、索引、偏移、数据

在讨论缓存的索引命中机制时,做如下声明:

1、本文不论输入缓存的是物理地址还是虚拟地址,可以视为一种地址来讨论,先讲清楚给定一种地址时缓存的查表过程

2、本文讨论32位地址长度、字节索引、单个地址对应数据为32字节的情况下的缓存命中过程

3、索引与偏移量尽量取低位地址

4、同索引下多路缓存遵循FIFO格式

缓存在CPU中的工作逻辑

处理器在访问存储器时会把虚拟地址同时传给TLB和高速缓存。TLB是一个用于存储虚拟地址到物理地址转换的小缓存,处理器先使用有效页帧号在TLB中查找实际页帧号。如果期间发生TLB未命中,将会带来一系列严重的系统惩罚,处理器需要查询页表。假设发生TLB命中,就会很快获得合适的RPN,并得到相应的物理地址。

处理器通过高速缓存编码地址的索引域可以很快找到高速缓存对应的组,这里的高速缓存行中的数据不一定是处理器所需要的,因此有必要进行一些检查,将高速缓存行中存放的标记域和通过虚实地址转换得到的物理地址的标记域进行比较。如果相同并且状态位匹配,就会发生高速缓存命中,处理器通过字节选择域对齐部件就可以获取所需的数据。如果发生高速缓存未命中,处理器需要用物理地址进一步访问主存储器来获得最终的数据,数据也会填充到相应的高速缓存行中(这里是VIPT类型的高速缓存组织方式)。

高速缓存的基本结构概念:

1、地址:本文以32位地址为例,处理器访问高速缓存时的地址编码,可以被缓存的逻辑结构分为偏移量、索引、标记三个主要部分。

2、高速缓存行:高速缓存中最小的访问单元,包含一小段主存储器中的数据。

3、索引:高速缓存地址编码的一部分,用于索引和查找地址在高速缓存的哪一组中。

4、组:由相同索引的高速缓存组成的行

5、路:在组相连的高速缓存中,高速缓存分成的大小相同的几个块,一般指代组内能存储多少个高速缓存行

6、标记:高速缓存地址编码的一部分,通常是高速缓存地址的高位部分,用于判断高速缓存的数据的地址是否和处理器寻找的地址一致

7、偏移量:高速缓存中的偏移量,处理器可以按照字或字节的方式来进行高速缓存行的内部寻址

一个标准的VIPT缓存查表流程为:

1、处理器对访问高速缓存时的地址进行编码,根据索引域来查找组。对于组相连的高速缓存,一个组里由x个高速缓存行的时候称为x路。

2、在x个高速缓存行中通过标记域进行比对,如果其中存在标记域匹配能中的,说明命中高速缓存行。

3、通过偏移量来寻址高速缓存行对应的数据。

缓存寻址的数学结构

缓存本体遵循一个(S,E,B)的数学结构。S代表缓存中存储的组数,E代表每一个组内包含的行数,B代表一个行的大小。

缓存的地址编码遵循一个(t,s,b)的数学结构,t表示处于地址高位代表标记位的bit的数目,s表示处于地址中间代表组索引位的bit的数目,b表示处于低位代表块偏移的bit的数目。

s的位宽应当与S的个数匹配,进而可以确定当前缓存区域的大小。

高速缓存的映射方式

这里主要列举2中极端的映射方式,并以此拖出正常常用的映射方式:

1、直接映射(direct mapping)

缓存本体的(S,E,B)结构为(S,1,B)其含义为,一个地址在缓存中只会存在一种可能的块。举这个例子是想说明如果缓存本体结构E太浅的话,就会频繁触发缓存不命中,从而导致缓存被频繁的换入换出,产生严重的高速缓存颠簸(cache thrashing)。

2、全相连映射(fully associative mapping)

缓存本体的(S,E,B)结构为(1,E,B)含义为缓存中只有一个组,这里的引申含义为,如果(S,E,B)使用的(t,s,b)结构中s太大,则缓存本体不能覆盖所有的地址,很多地址事实上失效,如果s为1,则几乎没有索引的机制,实际上只能依赖E内的缓存,相当于缓存事实上退化为一个高速FIFO。

3、组组相连映射(set associative mapping)

其实就是指正常的(S,E,B)结构。


评论