Appearance
题目
请求分页管理系统中,假设某进程的页表内容如下:
| 页号 | 页框号 | 有效位 |
|---|---|---|
| 0 | 101H | 1 |
| 1 | —— | 0 |
| 2 | 254H | 1 |
已知:
- 页面大小 = 4 KB
- 一次内存访问 = 100 ns
- 一次快表(TLB)访问 = 10 ns
- 处理一次缺页平均 = 10⁸ ns(已含更新 TLB / 页表的时间)
- 进程驻留集大小固定为 2
- 采用 LRU 置换 + 局部淘汰
约定:
① TLB 初始为空 ② 地址转换先访问 TLB,未命中再访问页表(忽略访问页表后更新 TLB 的时间) ③ 有效位 = 0 表示页面不在内存,触发缺页中断;中断处理完返回原指令重新执行
设虚地址访问序列:2362H、1565H、25A5H。请回答:
(1) 依次访问上述三个虚地址,各需多少时间?给出计算过程。
(2) 基于上述访问序列,虚地址 1565H 的物理地址是多少?说明理由。
解析
准备工作:拆地址
页面大小 4 KB = B → 页内偏移占低 12 位、页号占剩下高位。把每个虚地址的最高 1 位(即十六进制最高位数字)当作页号、低 3 位十六进制数字当作页内偏移:
| 虚地址 | 页号 P | 页内偏移 |
|---|---|---|
| 2362H | 2 | 362H |
| 1565H | 1 | 565H |
| 25A5H | 2 | 5A5H |
(1)三次访问的时间
关键:把每次访存拆成"查 TLB → 查页表 → (缺页处理)→ 访问主存"四个阶段,按命中情况累加时间。
访问 ① 2362H(页号 2)
- TLB 初始空 → 必然 miss → 访问 TLB 10 ns
- 查页表,2 号页有效(页框 254H)→ 访问页表 100 ns
- 合成物理地址,访问主存 → 100 ns
副作用:把"页号 2 → 页框 254H"这条映射加入 TLB(题面忽略 TLB 更新时间)。
访问 ② 1565H(页号 1)
- 查 TLB:里面只有"页号 2 → 254H",没有页号 1 → miss → 10 ns
- 查页表:1 号页有效位 = 0,不在内存 → 触发缺页中断 → 100 ns(查到无效)
- 缺页处理:从磁盘把 1 号页调进来;驻留集已满(页 0、页 2 都在),按 LRU 淘汰一个 → 10⁸ ns
- 中断返回,重新执行 → 此时 1 号页已在内存、TLB 也已更新(题面允许把 TLB 更新算在 10⁸ 内)→ 再次 TLB 命中 10 ns
- 访问主存 → 100 ns
编者注(易错点):缺页前那一次访 TLB / 访页表的时间不能省——这是检测出"缺页"的必要步骤;缺页后重新执行那一次访 TLB / 访主存的时间也不能省——这是真正取出数据的开销。所以中间夹的 10⁸ ns 两侧都还有"探测时间",不要漏算。
访问 ③ 25A5H(页号 2)
- 查 TLB:第一次访问已把"页号 2 → 254H"放进 TLB → TLB 命中 10 ns
- 直接合成物理地址,访问主存 → 100 ns
编者注:TLB 命中时不查页表——这是 TLB 存在的核心价值。所以 ③ 比 ① 少 100 ns。
(2)求 1565H 的物理地址
访问 ② 时触发了缺页:从磁盘把页号 1 调进来,驻留集已满(页 0、页 2 都在),按 LRU 淘汰最久未使用的页面。
LRU 时序:
| 时刻 | 访问 | 内存中的页面(最近使用排在前) |
|---|---|---|
| 初始 | — | 页 0、页 2(顺序未定,假设页 0 先于页 2 被访问过) |
| 访问 ① | 页 2 | 页 2、页 0(页 2 最新) |
| 访问 ② | 页 1(缺页) | 淘汰页 0 → 页 1、页 2 |
所以 页 0 被淘汰,1 号页占用原页 0 的页框 = 页框号 101H。
物理地址 = 页框号 << 12 + 页内偏移:
编者注(易错点):
- 不要直接拼接成 1011 565——页框号 "101H" 已经是 12 位(实际 9 位有效),左移 12 位后是 0x101000,再加偏移 0x565 = 0x101565。整体仍是 24 位物理地址(题面没明示物理地址位宽,按"页框号 + 偏移"直接拼即可)。
- LRU 淘汰要看"最久未被访问"的页面。本题里只访问了一次页 2、没访问过页 0,所以页 0 被换出。如果题目给完整初始状态(如"上次访问页 0 在更早"),按时间序列做。