虚拟内存
引入
词汇
| English | 释义 | 拼音 |
|---|---|---|
| virtual address | 虚拟地址 | xū nǐ dì zhǐ |
| page table/peɪdʒ ˈteɪbl/ | 页表 | yè biǎo |
| physical frame | 物理页框 | wù lǐ yè kuāng |
| TLB | 快表 | kuài biǎo |
| page fault/peɪdʒ fɒlt/ | 缺页 | quē yè |
最宏伟的幻象
- 虚拟地址 virtual address 拆成页号与页内偏移;页表 page table 把虚页映射到物理页框 physical frame,每页一条;TLB 快表缓存翻译。
- 课程机:16 位虚拟、256 字节页 $\Rightarrow$ 256 个虚页;12 位物理 $\Rightarrow$ 16 个页框——每个进程可寻址 64 KiB,而实体只有 4 KiB。

{exercise:uni-cs0704-mapping}
练习
16 位虚拟地址、256 字节页有——个虚页。
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
8 位页号加 8 位偏移:2 的 8 次方 256 页。
先走路,后命中
- 地址 $0x0204$:偏移 $0x04$、VPN $0x02$。首次访问:TLB 未中、查表——VPN 2 到 5 号框,物理 $5 \times 256 + 4 = 0x0504$;TLB 缓存 VPN 2。
- 地址 $0x0210$:同一 VPN——TLB 命中,物理 $0x0510$,免查表。10 项 LRU TLB 上 8 页循环 8000 次访问只未中 8 次(强制性):命中率 $99.9\%$。
{exercise:uni-cs0704-walk}
练习
VPN 2 映射到 5 号框时,地址 0x0204 翻译为——
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
框号 × 256 加偏移:5 × 256 + 4 = 0x0504。
缺页与它的价钱
- 地址 $0x0400$:VPN 4,表项无效 $\to$ 缺页 page fault。进程阻塞;OS 选受害者(LRU、脏——先写回)、读入该页、更新页表与 TLB、重启指令。
- 代价模型:TLB 命中 1 ns、查表 10 ns、缺页 5 ms——百万分之一概率的缺页平均每次访问仍摊 5 ns:层次结构容忍稀有,不容忍频繁。
例子
无效访问是错误;缺页只是取数。valid 位区分二者。
{exercise:uni-cs0704-fault}
练习
缺页与无效访问的差别在于缺页——
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
缺页 = 取数(有效位说不在内存但有映射);无效 = 错误。