一、缓存的体系结构
1. Cache层次结构
计算机系统中缓存层次结构通常由多个级别的缓存组成,这些级别包括L1缓存、L2缓存和L3缓存。每个级别的缓存都有不同的特性,例如容量、访问速度和成本。层次化缓存结构的设计旨在利用不同级别缓存的优势,通过提供更小、更快的缓存来提高数据访问速度,并通过较大、较慢的缓存提供更大的存储容量。这有助于平衡性能和成本。
以下是一般的层次化缓存结构图:
2. CPU读取方式
- 程序执行时,会先将内存中的数据加载到共享的 L3 Cache 中,再加载到每个核心独有的 L2 Cache,最后进入到最快的 L1 Cache,之后才会被 CPU 读取。
- CPU读取数据时:
-
-
发起读取请求(Fetch):
- CPU 从程序计数器(Program Counter,PC)中获取下一条指令的地址。
- 将该地址发送到 L1 指令缓存。
-
L1 指令缓存检查(L1 I-cache Check):
- 如果指令在 L1 指令缓存中命中(Cache Hit),则直接从 L1 指令缓存中读取指令。
- 如果没有命中(Cache Miss),则继续到下一级缓存。
-
L2 缓存检查(L2 Cache Check):
- 如果指令在 L2 缓存中命中,从 L2 缓存中读取指令,并更新 L1 指令缓存。
- 如果没有命中,则继续到下一级缓存。
-
L3 缓存检查(L3 Cache Check):
- 如果指令在 L3 缓存中命中,从 L3 缓存中读取指令,并更新 L2 和 L1 指令缓存。
- 如果没有命中,则继续到主内存。
-
主内存访问(Main Memory Access):
- 如果指令在主内存中,从主内存中读取指令,并更新 L3、L2 和 L1 指令缓存。
-
指令解码(Decode):
- CPU 对获取的指令进行解码,识别出具体的操作。
-
执行指令(Execute):
- CPU 根据解码结果执行相应的操作,可能包括读取或写入数据。
-
以下是Cache结构图:
3. 映射方式
关联性的选择取决于系统的设计目标和性能需求。直接映射简单,但冲突可能较多;组相联映射在性能和成本之间取得平衡;全相联映射提供最大的关联性,但通常需要更多的硬件资源。不同的应用场景可能需要不同类型的缓存关联性。
-
直接映射(Direct Mapping):
- 原理:主要原理是将主存中的每个块映射到缓存中的一个特定缓存行。具体来说,一个主存块只能映射到缓存的一个固定位置,而不是可以在多个位置中选择。这个