【计算机系统原理】 组相联 Cache 地址划分与访问过程

目录

组相联映射

主存地址划分

[1. 计算地址总位数](#1. 计算地址总位数)

[2. 计算块内偏移量](#2. 计算块内偏移量)

[3. 计算 Cache 组数与组号位数](#3. 计算 Cache 组数与组号位数)

[4. 计算标记位(Tag)位数](#4. 计算标记位(Tag)位数)

[5. 地址划分结果](#5. 地址划分结果)

[主存块与 Cache 行的映射关系](#主存块与 Cache 行的映射关系)

[1. 映射规则](#1. 映射规则)

[2. 示例映射](#2. 示例映射)

[CPU 访问主存单元 0240CH 的过程](#CPU 访问主存单元 0240CH 的过程)

[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 路组相联 → 每组 2 行 → 组数 = 16 / 2 = 8 = 2^3
  • 因此组号占 3 位,用于定位 Cache 组。

4. 计算标记位(Tag)位数

标记位 = 地址总位数 - 组号位数 - 块内偏移位数 = 18 - 3 - 6 = 9位,用于唯一标识主存块。

5. 地址划分结果

地址段 位数 作用
标记位(Tag) 9 位 标识主存块,与 Cache 组内各行标记比较
组号(Index) 3 位 定位 Cache 中的目标组
块内偏移(Offset) 6 位 定位主存块内的具体字节

主存块与 Cache 行的映射关系

1. 映射规则

  • 主存块号 = 主存地址 / 块大小
  • 组号 = 主存块号 mod 组数
  • 主存块只能映射到对应组内的任意一行(2 路组相联 → 每组 2 行可选)

2. 示例映射

以主存块号 i 为例:

  • 组号 g = i mod 8
  • 可映射到第 g 组的第 0 行或第 1 行
  • 若组内两行均已满,则需按替换算法(如 LRU)替换其中一行

CPU 访问主存单元 0240CH 的过程

1. 地址分解

将十六进制地址 0240CH 转换为 18 位二进制:0240CH = 0000 0010 0100 0000 1100B

  • 块内偏移(低 6 位):000011B0CH
  • 组号(中间 3 位):010B2
  • 标记位(高 9 位):000000100B04H

2. 访问流程

  1. 地址拆分:CPU 将 18 位地址拆分为 9 位标记、3 位组号、6 位块内偏移。
  2. 组定位 :根据组号 2 定位到 Cache 的第 2 组。
  3. 标记比较 :将标记 04H 与第 2 组内两行的标记并行比较:
    • 若某行标记匹配且有效位为 1 → Cache 命中
    • 若未匹配或有效位为 0 → Cache 缺失
  4. 命中处理 :根据块内偏移 0CH,从命中行中读取目标字节并返回 CPU。
  5. 缺失处理
    • 向主存请求读取包含 0240CH 的整个主存块(64B)。
    • 将主存块加载到第 2 组的空闲行中;若组内无空闲行,按替换算法淘汰一行。
    • 更新该行标记为 04H,有效位置 1。
    • 根据块内偏移 0CH 读取目标字节并返回 CPU。
相关推荐
ofoxcoding6 天前
在AI API聚合平台配置DeepSeek V3.2提示词缓存实战:快速接入与成本优化指南
人工智能·spring·缓存·ai
NeilYuen6 天前
gRPC结合FAISS构建AI助手语义缓存模块(一):设计
人工智能·缓存·faiss
taocarts_bidfans6 天前
反向海淘跨境缓存架构优化:taocarts Redis分层缓存实战技术
redis·缓存·架构·反向海淘·taocarts
退休倒计时6 天前
【每日一题】LeetCode 146. LRU 缓存 TypeScript
算法·leetcode·缓存·typescript
炘爚6 天前
Linux——Redis
数据库·redis·缓存
小挪号底迪滴6 天前
Redis 和 MySQL 数据不一致怎么办?缓存更新策略实战
redis·mysql·缓存
闪电悠米6 天前
黑马点评-Redis ZSet-实现关注 Feed 流
服务器·网络·数据库·redis·缓存·junit·lua
Saniffer_SH7 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
AC赳赳老秦7 天前
OpenClaw + 飞书多维表格:自动同步数据、生成统计图表、触发自动化任务
java·大数据·python·缓存·自动化·deepseek·openclaw