Skip to content

2024年 408 操作系统 第 25 题

操作系统2024年选择题2分

题目

在支持页式存储管理的系统中,进程切换时 OS 要执行( )。

Ⅰ. 更新 PC(程序计数器)值 Ⅱ. 更新栈基址寄存器值(ebp) Ⅲ. 更新页表基址寄存器值

错因

A

只记住了"进程切换 = 切地址空间",认为换一下页表基址就够了。但 PC 和栈也是上下文的核心组件——不切 PC,下一条指令就跑回旧进程的代码;不切栈基址,函数调用栈帧错位、局部变量乱串。三者一个都不能漏。

B

典型的"进程切换 vs 线程切换"混淆。线程切换只切 PC + 栈 + 寄存器(不切页表,因为同进程地址空间相同);进程切换还得切页表基址(地址空间私有)。选 B 的人按线程切换的思路想进程切换,漏掉了 Ⅲ。

C

记得"进程切换 = 切地址空间 + 切执行流",但把"栈"漏在外面——觉得栈基址寄存器不算"控制流"的一部分。但栈是进程私有数据,每个进程的栈在各自地址空间里有独立位置,必须切换基址。漏 Ⅱ 是对"栈也属于进程上下文"印象不深。

总解析

核心知识点:进程切换时,OS 必须保存原进程的完整 CPU 上下文,并恢复新进程的上下文。"完整"=能让新进程从原断点继续运行所需的所有状态。

进程上下文必含项

寄存器 / 状态是否更新为什么
PC(程序计数器)决定下一条要执行的指令;不切就跑回旧代码
栈基址寄存器(ebp/rbp)进程的栈在私有地址空间,不切则栈帧错位、局部变量乱串
页表基址寄存器(CR3 / TTBR0)地址空间私有,不切则虚拟地址按旧进程页表翻译,访问的是别人的物理页
通用寄存器组中间运算结果都存在这里
PSW / 状态字包含 ZF、SF、CF 等条件码,影响分支跳转

题面给出的 Ⅰ、Ⅱ、Ⅲ 都是必要项,三者一个都不能漏。

易混点:进程切换 vs 线程切换

切换类型PC栈基址页表基址通用寄存器
线程切换(同进程)✗(地址空间不变)
进程切换

进程切换比线程切换"重",重就重在切页表基址——连带 TLB 全部失效、Cache 命中率骤降,这是进程切换开销远大于线程切换的根本原因。

速记:执行流(PC)+ 数据流(栈)+ 地址空间(页表),进程切换三件套全要换。

最终答案是 D

最后更新:

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

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