是什么
-
定义:虚存与 Cache/TLB 联合寻址 是现代计算机层次化存储系统的核心机制。CPU 产生的逻辑地址(虚拟地址)先通过 TLB/页表 翻译为物理地址,再利用物理地址去检索 Cache/主存 获取目标数据。
-
大白话:虚拟地址是“程序里的门牌号”(虚的),页表/TLB 是“公安局户籍册/手机通讯录快查”(把虚门牌换成真实物理地址),Cache 是“随身小包”(根据真实物理地址看随身包里有没有装这个东西)。
核心内容
1. 虚拟地址与物理地址的划分方法
地址划分的基础是 页面大小(Page Size),它决定了虚实地址中完全相同的“页内偏移量”。
-
页内偏移量位数():
-
虚拟地址划分:
-
虚拟地址总位数
-
虚页号(VPN)位数 (位于虚拟地址的高位)
-
页内偏移(Offset)位数 (位于虚拟地址的低位)
-
-
物理地址划分:
-
物理地址总位数
-
页框号/物理页号(PPN)位数 (位于物理地址的高位)
-
页内偏移(Offset)位数 (位于物理地址的低位)
-
2. 物理地址访问 Cache 的字段切分
物理地址进入 Cache 后,按照映射方式切分为 3 个字段(由低到高):
[ Cache Tag (标记) ] + [ Cache 行号/组号 (Index) ] + [ 块内地址 (Offset) ]
(高位 P - c - b) (中间 c 位) (低位 b 位)
-
块内地址位数():
-
行号/组号位数():
-
直接映射:
-
组相联映射:
-
-
Cache Tag 位数:
3. 经典访问全链路:虚地址 页表 物理地址 Cache
虚拟地址 (VA)
├── 高位:虚页号 ────────► 查页表 ──► 命中(有效位=1) ──► 取得页框号
└── 低位:页内偏移 ───────────────────────────────────────┐ (原样拼接)
▼
拼接为物理地址 (PA)
│
┌───────────────────────────────────────────────────────────┘
▼
物理地址 (PA) 拆分
├── 低位:块内偏移 (b位)
├── 中间:Cache行号 (c位) ──► 索引到对应 Cache 行
└── 高位:Cache Tag ──────► 与该行 Tag 硬件比对 ──► 相等且有效位=1 ?
├── 命中 (Hit) → 读写Cache
└── 缺失 (Miss) → 访问主存调块
4. TLB(快表)的切分与页面存在性判断
TLB 是页表的硬件 Cache,它的输入仅为“虚页号”,切勿使用整个虚拟地址!
-
TLB 地址字段划分(针对虚页号):
-
TLB 组号位数
-
TLB Tag 位数
-
-
页面存在性判定法则:
-
TLB 命中且有效位为 1 该页 一定在主存中(TLB 是页表中有效活跃项的子集)。
-
TLB 未命中 需继续查主存中的页表(若页表有效位为 1 则在主存,为 0 则产生缺页异常)。
-
例题
-
题目(2011 统考真题):
某计算机存储器按字节编址,虚拟地址空间大小为 16MB,主存(物理)地址空间大小为 1MB,页面大小为 4KB;Cache 采用直接映射方式,共 8 行;主存与 Cache 之间交换的块大小为 32B。
-
虚拟地址共有几位,哪几位表示虚页号?物理地址共有几位,哪几位表示页框号?
-
使用物理地址访问 Cache 时,物理地址应划分成哪几个字段?说明每个字段的位数及在物理地址中的位置。
-
虚拟地址
001C60H所在的页面是否在主存中?若在主存中,则对应的物理地址是什么?访问该地址时是否 Cache 命中?说明理由。(页表内容:虚页号 1 对应有效位 1、页框号04;Cache 内容:第 3 行有效位 1、标记105) -
假定配置一个 4 路组相联的 TLB,共可存放 8 个页表项。若此时虚拟地址为
024BACH,说明其所在的页面是否存在于主存中?(TLB 内容:组 0 的第 4 路有效位 1、标记012、页框号1F)
-
-
分析与完整推导:
-
第 1 问(虚/实地址切分):
-
虚拟空间 ;主存空间 。
-
页面大小 页内偏移占低 12 位(第 0~11 位)。
-
虚页号占虚拟地址高 (第 12~23 位)。
-
页框号占物理地址高 (第 12~19 位)。
-
-
第 2 问(物理地址访 Cache 切分):
-
块内地址位数 (第 0~4 位)。
-
Cache 行号位数 (第 5~7 位)。
-
Cache Tag 位数 (第 8~19 位)。
-
-
第 3 问(查页表与 Cache):
-
虚拟地址
001C60H:低 12 位为页内偏移C60H,高 12 位为虚页号001H(即 1)。 -
查页表虚页号 1 对应有效位为 1 在主存中。
-
页框号为
04H,拼接得物理地址为04C60H(二进制0000 0100 1100 0110 0000_2)。 -
划分物理地址:低 5 位为块内偏移
00000_2;中间 3 位为行号011_2 = 3;高 12 位为 Tag0000 0100 1100_2 = 04CH。 -
查 Cache 第 3 行:有效位为 1,但其 Tag 为
105H04CHCache 未命中。
-
-
第 4 问(查 TLB):
-
TLB 组数 ,组号占 1 位;虚页号共 12 位,TLB Tag 占 。
-
虚拟地址
024BACH虚页号为高 12 位024H(二进制0000 0010 0100_2)。 -
最低 1 位为 TLB 组号:
0(第 0 组);高 11 位为 TLB Tag:0000 0010 010_2 = 012H。 -
在 TLB 第 0 组中找到有效位 1、Tag 为
012H的项 TLB 命中,页面一定在主存中。
-
-
-
规范答案:
-
虚拟地址共 24 位,高 12 位(第 12~23 位)表示虚页号;物理地址共 20 位,高 8 位(第 12~19 位)表示页框号。
-
物理地址划分为:
-
块内地址:低 5 位(第 0~4 位)
-
Cache 行号:中间 3 位(第 5~7 位)
-
标记(Tag):高 12 位(第 8~19 位)
-
-
虚拟地址
001C60H所在页面在主存中。对应物理地址为04C60H。访问该地址 Cache 未命中,因为物理地址对应的 Cache 行号为 3,Tag 为04CH,而 Cache 第 3 行中存储的 Tag 为105H,Tag 不匹配。 -
虚拟地址
024BACH所在页面存在于主存中。理由:该地址虚页号为024H,对应 TLB 第 0 组且 Tag 为012H,匹配到 TLB 中有效位为 1 的项(TLB 命中),TLB 是页表的有效子集,故该页必在主存中。
-
⚠️ 易错点
Warning
TLB 划分误用整个虚拟地址:TLB 缓存的是“页表项”,输入对象是 虚页号(VPN),绝不能把低 12 位的页内偏移也拿来算 TLB 组号和 Tag。
十六进制跨位拆分错误:物理地址
04C60H拆分 Cache 字段时,行号占第 5~7 位,正好跨在十六进制字符中间。必须先展开为二进制0000 0100 1100 0110 0000再截取,不能盲猜十六进制数字。混淆页内偏移与块内偏移:
页内偏移由**页面大小(如 4KB 12位)**决定,用于虚实地址转换;
块内偏移由**Cache 块大小(如 32B 5位)**决定,用于 Cache 内部寻址。
TLB 命中与主存存在性的逻辑推导:TLB 命中 页面必在主存;但 TLB 未命中 缺页(可能只是快表没装下,主存页表里仍然有效)。