在cache小姐协助下的CPU访存全流程🤔

一、 带 Cache 的 CPU 访存完整流程

CPU执行一条访存指令(读或写)时,并不会直接与主存打交道,而是优先与Cache交互。整个流程如下:

  1. CPU发出请求: CPU产生一个内存地址(逻辑地址,经过MMU转换为物理地址),并连同读/写信号一起发送给Cache控制器。

  2. Cache命中判断 (Cache Hit / Miss): 这是流程的关键分水岭。

    • Cache控制器根据地址的索引字段 (Index) 定位到Cache中的某一个或某一组Cache行。

    • 然后,比较地址的标记字段 (Tag) 与该Cache行中存储的标记是否一致。

    • 同时,检查该Cache行的有效位 (Valid Bit) 是否为1。

    • 如果 标记匹配有效位为1,则判断为 “Cache命中 (Cache Hit)”

    • 否则,即为 “Cache缺失 (Cache Miss)”

  3. 后续操作:

    • 若命中 (Hit):

      • 读命中: Cache控制器直接从命中的Cache行中,根据地址的块内偏移字段 (Offset),取出对应的字节或字,通过内部总线高速地传送给CPU。访存操作快速完成。

      • 写命中: 根据写策略(Write Policy)进行操作。

        • 写直通 (Write-Through): 同时写入Cache和主存。

        • 写回 (Write-Back): 只写入Cache,并将该Cache行标记为“脏”(Dirty)。该行的数据只有在被替换时,才会被写回主存。

    • 若缺失 (Miss): 系统将启动一套相对复杂的“缺失处理机制 (Miss Handling)”。


二、 缓存缺失 (Cache Miss) 的处理机制

如果Cache缺失,访问主存和更新Cache是同时完成的吗?

不是同时完成的,这是一个有明确先后逻辑顺序的过程,但现代CPU通过优化技术使其部分操作可以并发执行,从而缩短延迟。

下面是标准的、逻辑上的处理步骤:

步骤 1:暂停CPU (Stall the CPU)

当发生Cache Miss时,CPU无法立即获得它想要的数据,因此其执行流水线会暂停 (Stall),等待数据从主存中取回。

步骤 2:访问主存 (Access Main Memory)

Cache控制器会接管后续工作,向主存控制器发出一个读请求

步骤 3:数据从主存调往Cache (Block Transfer)

主存响应请求,找到对应的数据块,通过系统总线将其传输给Cache控制器。

步骤 4:数据交付与Cache更新 (重点!)

这是最关键的一步,它直接回答了你的问题。当数据块从主存传输过来时,发生了两件事:

流程总结与回答


三、 考点分析与陷阱

  1. Cache缺失代价 (Miss Penalty): 这是衡量Cache性能的重要指标,指的是从发生缺失到CPU获得数据所需的时间。其主要构成是访问主存的时间

  2. 写回策略的额外开销: 考题中经常会涉及计算Cache缺失的代价。一个常见的陷阱是,如果替换策略选中了一个“脏块”,考生必须记得加上将脏块写回主存的时间

  3. “关键宇优先”技术: 这个概念是理解Cache效率的关键。它解释了为什么在Cache缺失后,CPU的停顿时间可以小于“主存访问时间 + Cache更新时间”的总和。

  4. 数据块传输: 一定要牢记,Cache和主存之间的数据交换单位是块 (Block),而不是字 (Word)。这是Cache工作的基础,也是利用空间局部性原理的体现。