Skip to content

2009年 408 操作系统 第 46 题

操作系统2009年综合题8分

题目

请求分页管理系统中,假设某进程的页表内容如下:

页号页框号有效位
0101H1
1——0
2254H1

已知:

  • 页面大小 = 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 位十六进制数字当作页内偏移:

1512页号4 bits110页内偏移12 bits
虚地址页号 P页内偏移
2362H2362H
1565H1565H
25A5H25A5H

(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 + 页内偏移:

2312页框号12 bits101H110页内偏移12 bits565H

编者注(易错点)

  • 不要直接拼接成 1011 565——页框号 "101H" 已经是 12 位(实际 9 位有效),左移 12 位后是 0x101000,再加偏移 0x565 = 0x101565。整体仍是 24 位物理地址(题面没明示物理地址位宽,按"页框号 + 偏移"直接拼即可)。
  • LRU 淘汰要看"最久未被访问"的页面。本题里只访问了一次页 2、没访问过页 0,所以页 0 被换出。如果题目给完整初始状态(如"上次访问页 0 在更早"),按时间序列做。

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题