交互演示(计算机组成原理)
本页承载存储器层次结构章的配套交互演示。章节正文的地址划分表可先手算,再回到本页输入地址逐步验证。
Cache 地址划分与映射
设定与章节算例一致:Cache 容量 8 KB、块 32 B、主存地址 16 位(可直接输入或点击示例地址 0x35c4a)。切换直接映射 / 2 路组相联,观察同一段地址二进制中"标记 | 行(组)号 | 块内偏移"三段宽度如何重新切分,以及行号与标记随之改变。
Cache 容量 8 KB · 块 32 B(地址共 16 位)
主存地址:
110101110001001010
| 主存块号 | 6882 | 地址右移 5 位 |
| Cache 行号 | 226 | 块号 mod 256(即取行号段 10111000) |
| 标记 tag | 26(3 位) | 块号除以 256,存于行/组内有效位旁用于比对 |
| 块内偏移 | 10 | 低 5 位(1001010) |
查找过程:按行号 226 定位唯一一行→ 比对标记 26 → 命中则用偏移 10 取字节;标记不匹配即缺页,整块换入
指令流水线时空图
预置 6 条 MIPS 风格指令,五段流水线(IF 取指 / ID 译码 / EX 执行 / MEM 访存 / WB 写回)。其中 I2(sub $t4,$t0,$s3)的源操作数 $t0 由 I1(add $t0,$s1,$s2)产生,构成 RAW 数据冒险。切换"无冒险 / 数据冒险(加气泡/暂停)"两种模式对照:单步推进时钟周期,时空图逐拍点亮、当前拍绿框高亮;数据冒险模式下(无转发、寄存器堆同拍"前半写后半读"口径)I2 在 EX 前插入 2 个气泡滞留 ID,其后指令逐级顺延滞留 IF。每步附当前拍发生了什么,底部静态计算总时间、吞吐率、加速比,可直接与 中央处理器 章 5.3~5.5 节的公式与算例对照。
6 条指令 · 五段流水线 · I2 依赖 I1 的 $t0(RAW,无转发口径停 2 拍)
| 指令 \ 时钟 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| I1 add $t0,$s1,$s2 | IF | ID | EX | MEM | WB | · | · | · | · | · |
| I2 sub $t4,$t0,$s3 | · | IF | ID | EX | MEM | WB | · | · | · | · |
| I3 and $t5,$s1,$s6 | · | · | IF | ID | EX | MEM | WB | · | · | · |
| I4 or $t6,$s7,$s0 | · | · | · | IF | ID | EX | MEM | WB | · | · |
| I5 xor $t7,$s1,$s4 | · | · | · | · | IF | ID | EX | MEM | WB | · |
| I6 addi $t8,$s2,10 | · | · | · | · | · | IF | ID | EX | MEM | WB |
第 1 拍:I1 IF(取指)
第 1 / 10 拍 · 蓝=正常段 橙=气泡(滞留 ID) 灰=IF×(滞留 IF) 绿框=当前拍
性能(k=5 段、n=6 条、停顿 s=0 拍):总时间 = k+n-1+s = 10 拍; 吞吐率 = n/T = 6/10 ≈ 0.60 条/拍;加速比 = nk/T = 30/10 = 3.00
使用建议
- 先按章节的地址划分表手算 0x35c4a 在直接映射下的行号与标记,再切换到本页同参数核对
- 切换 2 路组相联后观察:组号位数减少 1、标记位数增加 1——这正是"组相联用更长的标记换更灵活的放置"的直观体现
- 换一个地址(如 0xabcd0)重复两种映射的手算与验证,直到不需要工具也能直接写出三段划分
- 流水线演示先在"无冒险"模式走完 10 拍,再切"数据冒险"对比第 3~5 拍:I2 两次滞留 ID(气泡)、I3 起滞留 IF(IF×),体会"停顿向后传染"
- 对照底部性能行验证公式:无冒险 拍、加速比 ;插入 2 个气泡后 拍、加速比降到 ——停顿 直接进分母
更多交互动画(中断处理流程、DMA 三种传输方式)将陆续加入本页。