【高等计算机体系结构第九讲:分层存储体系结构和Cache】
在计算机体系结构中,分层存储体系结构是一种常见的设计策略,旨在优化访问速度和存储容量之间的平衡。它由多个层次组成,通常包括CPU寄存器、高速缓存(Cache)、主内存以及磁盘存储等。每一层都有不同的访问速度和容量,高速缓存作为内存和处理器之间的桥梁,通过快速响应常用数据来减少处理器等待时间。
Cache的工作原理是基于局部性原理,即程序运行过程中,数据倾向于在一段时间内集中访问。Cache将最近频繁访问的数据块(称为块或页面)从主内存复制到速度更快的Cache中,当CPU需要数据时,首先查找Cache,如果找到则称为命中,否则称为未命中。命中率越高,性能提升越大。高速缓存通常分为L1、L2、L3等层次,L1最接近CPU,速度最快但容量最小,L3缓存则更大,可能为全核心共享。
Maurice Wilkes是早期研究Cache的重要人物,他在1965年的论文《Slave Memories and Dynamic Storage Allocation》中探讨了存储分配策略和早期的Cache设计理念。他的工作对现代计算机体系结构产生了深远影响。
本讲还涉及了精确异常处理方案,这是现代处理器设计中的一个重要问题。处理器可能会乱序执行指令以提高性能,但在遇到异常时,必须能够恢复到异常发生前的正确状态。这里有几种方法:
1. 重排序缓冲区(Reorder Buffer, ROB):允许乱序执行,但在提交到寄存器堆之前进行重新排序,确保最终结果的正确性。然而,这可能导致需要从ROB中获取未写入寄存器的结果。
2. 历史缓冲区(History Buffer, HB):在异常发生时撤销已经执行但未提交的更新,保持寄存器堆的最新状态。但这会增加异常处理时延。
3. 未来寄存器堆:维护两个寄存器堆,一个是按程序序更新的体系结构寄存器堆,另一个是前端寄存器堆,用于乱序执行。异常时需要在寄存器堆间复制数据。
精确异常处理的目标是在分支预测错误时快速恢复前端状态,以便正确指令能立即执行。这可以通过在分支取指时保存前端寄存器状态并对比分支旧的指令结果来实现。
此外,现代处理器的流水线设计包括保留站和重排序缓冲区两个“驼峰”,分别对应调度窗口和指令窗口。乱序执行通过寄存器重命名、缓冲和标签广播来消除错误相关,构建受限的数据流图。Tomasulo算法有效地处理乱序执行,通过资源分配和调度来最大化指令执行效率。
乱序执行的机器虽具有类似数据流图的特性,但其ISA(指令集架构)仍然基于冯诺依曼模型,执行顺序在微体系结构层面被打破了。这种设计允许处理器内部并发执行多条指令,提高处理器性能,但对外部来说,程序仍然是顺序执行的。