缓存失效(Cache Miss)发生在处理器需要访问的数据不在缓存中时。这会导致处理器必须从主内存中检索数据,这是一个比从缓存读取数据慢得多的操作。 硬件处理细节取决于具体的缓存架构和处理器设计,但一般步骤如下:
-
地址翻译和索引: 处理器首先将逻辑地址翻译成物理地址,然后根据地址查找缓存。这通常涉及到多级缓存(L1, L2, L3等等),处理器会先在速度最快的L1缓存中查找。
-
缓存命中/失效检测: 缓存会检查目标地址是否在缓存行中。如果找到(缓存命中,Cache Hit),则直接读取数据;如果没有找到(缓存失效,Cache Miss),则会触发一个读取内存的操作。
-
内存访问: 如果发生缓存失效,处理器会向内存控制器发出请求,内存控制器则从主内存中读取包含所需数据的缓存行。这通常是一个相对耗时的过程。
-
缓存行填充: 从内存读取的数据会以缓存行的形式(通常是64字节或更大的块)写入缓存。这保证了空间局部性,即后续访问同一缓存行附近的数据时会更快。
-
数据替换: 如果缓存已满,需要选择一个缓存行替换。常用的替换策略包括LRU (Least Recently Used,最近最少使用) 和FIFO (First In First Out,先进先出)。
-
数据返回: 将所需数据从缓存或内存返回给处理器,继续执行指令。
不同类型的缓存失效:
- Compulsory Miss (Cold Miss): 第一次访问数据时发生,因为数据之前不在缓存中。
- Capacity Miss: 缓存大小有限,无法容纳所有需要的数据。
- Conflict Miss: 由于缓存的组织方式(例如,直接映射缓存),多个数据映射到同一个缓存行导致的失效。
硬件层面,缓存失效处理涉及到复杂的信号传输和控制逻辑,包括:
- 内存控制器: 管理内存访问,并与处理器和内存进行通信。
- 缓存控制器: 管理缓存的读写操作,包括替换策略和冲突处理。
- 高速缓存总线: 连接处理器、缓存和内存控制器,实现高速数据传输。
- TLB (Translation Lookaside Buffer): 加速地址翻译的过程。