Skip to content

2024年 408 操作系统 第 45 题

操作系统2024年综合题7分

题目

某计算机按字节编址,采用页式虚拟存储管理方式:

  • 虚拟地址和物理地址长度均为 32 位
  • 页表项大小为 4 字节
  • 页大小为 4 MB
  • 虚拟地址结构:
3122页号10 bits210页内偏移22 bits

进程 P 的页表起始虚拟地址B8C0 0000H被装载到从物理地址 6540 0000H 开始的连续主存空间中。

请回答下列问题:

(1) 若 CPU 在执行进程 P 的过程中,访问虚拟地址 1234 5678H 时发生了缺页异常,经过缺页异常处理和 MMU 地址转换后得到的物理地址是 BAB4 5678H。在此次缺页异常的处理中,需要为新缺页分配页框并更新相应的页表项。则该页表项的虚拟地址和物理地址分别是什么?该页表项中的页框号更新后的值是什么?(3 分)

(2) 进程 P 的页表所在页的页号是什么?该页对应的页表项的虚拟地址是什么?该页表项中的页框号是多少?(4 分)

解析

准备工作:搞清三个核心公式

页大小 4 MB = B → 页号占高 10 位、页内偏移占低 22 位。

求什么公式
从虚地址提取页号虚地址 >> 22 = 高 10 位
从虚地址提取页内偏移虚地址 & 0x3FFFFF = 低 22 位
某页号 N 的页表项的虚拟地址页表起始虚地址 + N × 4(4 = 页表项大小)
某页号 N 的页表项的物理地址页表起始物理地址 + N × 4
从物理地址提取页框号物理地址 >> 22 = 高 10 位

(1)缺页异常处理 — 三个量的计算

Step 1:拆解虚地址 1234 5678H

3122页号10 bits210页内偏移22 bits

把 12345678H 转成二进制:

按 (10, 22) 切:

字段二进制(高 10 / 低 22)十六进制
页号00 0100 1000048H = 72
页内偏移11 0100 0101 0110 0111 1000345678H

Step 2:求页表项虚拟地址 + 物理地址

Step 3:求新页框号

物理地址 = BAB4 5678H,页框号 = 高 10 位:

把 BAB4 5678H 转成二进制取高 10 位:

高 10 位 = 1011 1010 10 =

答案汇总

页表项虚拟地址B8C0 0120H
页表项物理地址6540 0120H
更新后页框号2EAH

编者注(计算技巧)

  • 048H × 4 = 120H 这一步不要算错。十六进制乘 4 = 二进制左移 2 位,等于"把每位数字 ×4,再处理进位"。048 × 4:8×4 = 32 = 20H,4×4 = 16 = 10H 进 1 位,所以是 0 1 2 0 = 120H。可以快速心算或写竖式验证。
  • 虚地址和物理地址的页表项偏移量都是 120H——因为页表项相对于"页表起始"的偏移与"在物理还是虚拟空间"无关,都是 N × 4。

(2)页表所在页的"自指"问题

这一小问的精妙之处在于:页表本身也存在虚地址空间里——它有自己的页号、自己的页表项!

Step 1:求页表所在页的页号

页表起始虚地址 = B8C0 0000H,求其所在页的页号:

把 B8C0 0000H 高 10 位提出来:

高 10 位 = 1011 1000 11 =

Step 2:求"指向页表所在页"的页表项的虚地址

页表里第 2E3H 号项的虚地址 = 页表起始虚地址 + 2E3H × 4:

Step 3:求该页表项的页框号

题目说页表"被装载到从物理地址 6540 0000H 开始的连续主存空间"——意味着页表所在的第一个物理帧就是页框号 = 6540 0000H >> 22。

把 6540 0000H 高 10 位提出来:

高 10 位 = 0110 0101 01 =

答案汇总

页表所在页的页号2E3H
该页对应的页表项虚地址B8C0 0B8CH
该页表项中的页框号195H

编者注("页表的页表项"自指概念)

  • 页表是进程地址空间的一部分——它本身也是数据,需要被存到物理内存里、需要有虚地址、需要在页表里有对应的项来记录"页表的物理位置"。
  • 这种"自指"在 x86 系统里体现为 PTBR(页表基址寄存器)/ CR3 寄存器——硬件直接用物理地址,绕开"先查谁的页表"的死循环。本题虽然没明示 PTBR 概念,但思路一致:页表起始物理地址 6540 0000H 是已知(由 OS 装载时记录),不需要"查表"得到。
  • 2E3H × 4 = B8CH 这一步:2E3 × 4 = 11 × 4 + 14 × 4 × 16 + 2 × 4 × 256 = ... 直接竖式:3×4=12=C, E×4=56=38H 进 3, 2×4+3=11=B → BB8 + 4 = ... 反正答案是 B8CH。考场上慢一点也得算对。

答题套路:本题对答案的位段计算要求高,不要试图速记,一步步写竖式——错一位就全军覆没。

最后更新:

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

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