【计算机系统原理】 组相联 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。
相关推荐
CDN3602 小时前
【踩坑实录】前端开发必看:一次由CSS缓存引发的线上事故与SEO反思
前端·css·缓存
Aray12343 小时前
Redis Cluster 集群选举机制
数据库·redis·缓存
ego.iblacat15 小时前
Redis 核心概念与部署
数据库·redis·缓存
苏渡苇17 小时前
5 分钟跑起 Redis(Docker 版)
数据库·redis·缓存·docker·redis入门
Jul1en_17 小时前
【Redis】Zset类型、命令及应用场景
数据库·redis·缓存
杨凯凡18 小时前
【014】基本类型与包装类:缓存、相等性、NPE
java·数据结构·缓存
weisian15121 小时前
Java并发编程--33-Redis分布式缓存三大核心架构:主从、哨兵、分片,落地实战与选型
java·redis·缓存·主从架构·哨兵架构·分片架构
heimeiyingwang1 天前
【无标题】
网络·缓存·docker·性能优化·架构
我不听你讲话1 天前
Redis 配置与优化核心内容总结
数据库·redis·缓存
Wy_编程1 天前
redis 客户端编程
数据库·redis·缓存