目录
[1. 计算地址总位数](#1. 计算地址总位数)
[2. 计算块内偏移量](#2. 计算块内偏移量)
[3. 计算 Cache 行数与行号位数](#3. 计算 Cache 行数与行号位数)
[4. 计算标记位(Tag)位数](#4. 计算标记位(Tag)位数)
[5. 地址划分结果](#5. 地址划分结果)
[主存块与 Cache 行的映射关系](#主存块与 Cache 行的映射关系)
[CPU 访问主存单元 0240CH 的过程(Cache 为空)](#CPU 访问主存单元 0240CH 的过程(Cache 为空))
[1. 地址分解](#1. 地址分解)
[2. 访问流程](#2. 访问流程)
直接映射



主存地址划分
1. 计算地址总位数
主存容量 256KB = 2^8 × 2^10 B = 2^18 B,因此主存地址总长度为 18 位。
2. 计算块内偏移量
块大小 64B = 2^6 B,因此块内偏移占 6 位,用于定位块内字节。
3. 计算 Cache 行数与行号位数
- Cache 总块数(行数):
1KB / 64B = 16 = 2^4行 - 因此行号占 4 位,用于定位 Cache 中的目标行。
4. 计算标记位(Tag)位数
标记位 = 地址总位数 - 行号位数 - 块内偏移位数 = 18 - 4 - 6 = 8位,用于唯一标识主存块。
5. 地址划分结果
| 地址段 | 位数 | 作用 |
|---|---|---|
| 标记位(Tag) | 8 位 | 标识主存块,与 Cache 行的标记比较 |
| 行号(Index) | 4 位 | 定位 Cache 中的目标行 |
| 块内偏移(Offset) | 6 位 | 定位主存块内的具体字节 |
主存块与 Cache 行的映射关系
映射规则
- 主存块号 = 主存地址 / 块大小
- 行号 = 主存块号 mod Cache 行数
- 主存块只能映射到固定的某一行,无法选择其他行
CPU 访问主存单元 0240CH 的过程(Cache 为空)
1. 地址分解
将十六进制地址 0240CH 转换为 18 位二进制:0240CH = 0000 0010 0100 0000 1100B
- 块内偏移(低 6 位):
000011B→0CH - 行号(中间 4 位):
0100B→4行 - 标记位(高 8 位):
00000010B→02H
2. 访问流程
- 地址拆分:CPU 将 18 位地址拆分为 8 位标记、4 位行号、6 位块内偏移。
- 行定位 :根据行号
4定位到 Cache 的第 4 行。 - 标记比较 :
- 因 Cache 初始为空,该行有效位为 0 → Cache 缺失。
- 缺失处理 :
- 向主存请求读取包含
0240CH的整个主存块(64B)。 - 将主存块加载到 Cache 第 4 行中,更新该行标记为
02H,有效位置 1。
- 向主存请求读取包含
- 数据读取 :根据块内偏移
0CH,从第 4 行中读取目标字节并返回 CPU。
核心特点总结
- 直接映射:硬件实现简单,速度快,但块冲突率高,多个主存块会竞争同一 Cache 行。
- 地址划分:标记位 + 行号 + 块内偏移,行号直接决定映射位置,无替换选择空间。