Skip to content

2018年 408 操作系统 第 45 题

操作系统2018年综合题8分

题目

(本题满分 8 分)

请根据题 44 图给出的虚拟存储管理方式(32 位虚拟地址、二级页表:高 10 位 = 页目录号、中 10 位 = 页号、低 12 位 = 页内偏移;TLB / Cache / PDBR 结构如下图所示),回答下列问题。

image-20260501140356929

图(文字版):CPU 输出 32 位虚拟地址,分高 20 位"虚页号"和低 12 位"页内地址"。虚页号先查 TLB(保存若干 (Tag, 有效位, 实页号) 表项);TLB 命中则直接得实页号;TLB 缺失则进一步把虚页号拆为高 10 位(页目录号)+ 低 10 位(页号),先经 PDBR 查页目录、再查页表得到实页号。实页号 + 页内地址组成物理地址,再分 (Tag 20 位 + 组号 3 位 + 块内 5 位) 进 Cache 查询。

(1) 某虚拟地址对应的页目录号为 6,在相应的页表中对应的页号为 6,页内偏移量为 8,该虚拟地址的十六进制表示是什么?

(2) 寄存器 PDBR 用于保存当前进程的页目录起始地址。

  • 该地址是物理地址还是虚拟地址
  • 进程切换时,PDBR 的内容是否会变化?说明理由
  • 同一进程的线程切换时,PDBR 的内容是否会变化?说明理由

(3) 为了支持改进型 CLOCK 置换算法,需要在页表项中设置哪些字段?

解析

(1)求虚拟地址的十六进制表示

虚拟地址按图示拆为 3 段:

3122页目录号10 bits62112页号10 bits6110页内偏移12 bits8

按位组装(每段右对齐到自己的位段):

二进制(10 / 10 / 12 位)偏移到的位十六进制贡献
页目录号 = 60000000110左移 22 位0x01800000
页号 = 60000000110左移 12 位0x00006000
页内偏移 = 8000000000110... 8 → 0000_0000_1000左移 0 位0x00000008

按位 OR 求和:

编者注(计算技巧)

  • 一定要弄清"高位在左还是在右"。本题"页目录号"在高 10 位 → 应左移 22 位(22 = 10 页号位 + 12 偏移位)。把"6"直接当低位写成 0x6 是错的。
  • 二进制不熟时,可以直接按"段宽 = 4 / 8 / 12 位"切成十六进制:本题中两个 10 位段不是 4 的倍数、易出错,最稳的就是先写出二进制再压回十六进制。
  • 如果题目给十六进制虚拟地址反过来求 (页目录号、页号、偏移),把虚拟地址转成 32 位二进制后,从高位向低位按 (10, 10, 12) 切即可。

(2)PDBR 三连问

① PDBR 存的是物理地址还是虚拟地址?

答:物理地址。

为什么? PDBR 的作用是"在 TLB 缺失时告诉 CPU 去哪里查页目录表"。如果 PDBR 里再存一个虚拟地址,CPU 就要再查一次页表才能找到它——但查页表本身就是这次寻址的目的!这会陷入"鸡生蛋蛋生鸡"的死循环。所以 PDBR 必须直接存物理地址,让 MMU 一步到位。

② 进程切换时 PDBR 是否变化?

答:会变化。

每个进程有自己独立的虚拟地址空间和页目录,所以每个进程的页目录在物理内存里的位置不同。进程切换 = 切到另一个虚拟地址空间,必须把 PDBR 改成新进程的页目录物理地址,否则新进程会去用旧进程的页目录、寻址全错。

③ 同进程的线程切换时 PDBR 是否变化?

答:不变化。

同一进程的多个线程共享地址空间共享页目录——只是寄存器、栈不同。线程切换不需要改地址映射,PDBR 自然不动。

编者注(一句话总结)PDBR 跟着"地址空间"走,不是跟着"执行流"走。

  • 进程切换 = 换地址空间 → PDBR 换
  • 线程切换 = 换执行流但同一地址空间 → PDBR 不换

这条原则也适用于其它"地址空间相关寄存器"(如 ASID、CR3 在 x86 / TTBR 在 ARM)的考查。

(3)改进型 CLOCK 算法需要哪些页表项字段?

改进型 CLOCK 算法(改进二次机会算法)按 (访问位 A, 修改位 M) 把页面分四类,按"未用未改 → 未用已改 → 已用未改 → 已用已改"的顺序换出:

(A, M)含义优先级(先被替换)
(0, 0)最近未访问且未修改1(最先换出)
(0, 1)未访问但被改过2
(1, 0)最近访问过但未改3
(1, 1)最近访问过且改过4(最不情愿换出)

要支持这个判定,页表项里必须存:

  • 访问位(使用位 / Used / Reference Bit)A:每次访问该页时由硬件置 1;扫描时清 0
  • 修改位(脏位 / Modified / Dirty Bit)M:写该页时由硬件置 1;只有被换出且 M=1 时才需要回写磁盘

编者注(区分基础 CLOCK vs 改进 CLOCK)

  • 基础 CLOCK(二次机会):只用访问位 A。扫描遇 A=0 就换;A=1 就清 0 让它"再活一轮"
  • 改进 CLOCK:(A, M) 双位,目的是优先换出"无需写回磁盘"的干净页——少一次磁盘 I/O。所以"修改位 M"是改进版相对基础版新增的核心字段,答题时不要漏。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数