Appearance
408
操作系统
上下文切换
一、定位信息
- 所属圈层:核心层
- 前置知识:了解进程切换的过程(OS-02-03),了解PCB的内容(OS-02-01),了解CPU运行模式(OS-01-03)
- 知识网络位置:上下文切换是进程调度的底层机制,理解它对掌握调度算法的实际执行开销至关重要
- 考点热度等级:M级(中频常考)——近5年选择题出现约2–3次
二、知识点讲解
2.1 上下文的定义
**上下文(Context)**是指进程运行时CPU中的所有状态信息,包括:
- 程序计数器(PC):下一条要执行的指令地址
- 通用寄存器:运算中间结果
- 程序状态字(PSW):条件码、中断使能标志、运行模式等
- 栈指针(SP):栈的当前位置
- 内存管理相关寄存器:页表基址寄存器等
2.2 上下文切换的过程
当OS决定切换到另一个进程时,需要执行以下步骤:
- 保存当前进程上下文:将CPU中所有寄存器的值保存到当前进程的PCB中
- 更新当前进程PCB:将进程状态更新为就绪或阻塞,移入相应队列
- 选择下一个进程:调度器从就绪队列中选择下一个要运行的进程
- 更新新进程PCB:将新进程状态改为"运行"
- 恢复新进程上下文:从新进程的PCB中读取所有寄存器值,加载到CPU中
- 刷新缓存:可能需要刷新TLB和高速缓存(因为地址空间可能改变)
2.3 上下文切换的开销
上下文切换是纯开销——切换期间CPU不做任何有用工作。
| 开销来源 | 说明 |
|---|---|
| 寄存器保存/恢复 | 直接的指令执行时间 |
| 缓存失效 | 新进程的数据可能不在CPU缓存中,导致大量缓存未命中 |
| TLB失效 | 地址空间改变后TLB中的映射失效,需要重新加载 |
| 流水线刷新 | CPU流水线需要排空并重新填充 |
关键理解:上下文切换的直接开销(保存/恢复寄存器)通常只有几微秒,但间接开销(缓存/TLB失效)可能占总开销的大部分。
2.4 上下文切换 vs 模式切换
| 维度 | 模式切换 | 上下文切换 |
|---|---|---|
| 触发原因 | 中断/异常/系统调用 | 进程调度(时间片到、阻塞等) |
| 是否切换进程 | 否(同一进程的用户态↔内核态) | 是(从一个进程切换到另一个进程) |
| 开销 | 较小 | 较大(需保存/恢复更多状态) |
| 地址空间 | 不变 | 可能改变 |
| 包含关系 | 模式切换是上下文切换的一部分 | 上下文切换一定包含模式切换 |
三、记忆与理解辅助
- 口诀:"上下文=CPU的全部状态,切换=保存旧+恢复新"
- 上下文切换 vs 模式切换:模式切换是"换权限"(用户态↔内核态),上下文切换是"换进程"
- 开销来源:"直接开销小,间接开销大"——缓存/TLB失效是主要开销
四、例题与精解
例题1(基础巩固)
题目:上下文切换时,需要保存的信息不包括( )
A. 程序计数器 B. 通用寄存器 C. 进程的代码段 D. 程序状态字
命题意图:考查上下文包含的内容。
精解:
- 审题分析:题目要求选出"不需要保存"的内容
- 解题思路:上下文是CPU中的运行时状态,不包括内存中的代码和数据
- 完整步骤:
- A选项:程序计数器(PC)必须保存,否则不知道切换回来后从哪里继续执行
- B选项:通用寄存器必须保存,保存运算中间结果
- C选项:进程的代码段存放在内存中,不需要在上下文切换时保存(代码段不变)
- D选项:程序状态字(PSW)必须保存,保存条件码等状态
- 方法反思:上下文只保存CPU中的寄存器状态,不保存内存中的代码和数据
答案:C
例题2(中等提升)
题目:以下关于上下文切换的描述,正确的是( )
A. 上下文切换只发生在进程终止时 B. 上下文切换的开销主要是保存和恢复寄存器的时间 C. 同一进程内的线程切换不需要上下文切换 D. 上下文切换一定包含模式切换
命题意图:考查上下文切换的触发条件和开销。
精解:
- 审题分析:逐项判断上下文切换的特点
- 解题思路:上下文切换发生在进程调度时,开销包括直接和间接两部分
- 完整步骤:
- A选项:错误。上下文切换发生在任何需要切换进程的场景——时间片到、进程阻塞、进程终止、更高优先级到达等
- B选项:不完全正确。直接的寄存器保存/恢复开销较小,主要开销来自缓存和TLB的失效(间接开销)
- C选项:错误。内核级线程切换也需要上下文切换(保存/恢复寄存器),只是不需切换地址空间
- D选项:正确。上下文切换时需要从当前进程切换到调度器(内核态),再切换到新进程,必然涉及模式切换
- 方法反思:上下文切换一定包含模式切换,但模式切换不一定包含上下文切换(如同一进程的系统调用)
答案:D
五、考情分析
- 考查频次:近5年约2–3次
- 常见题型:选择题
- 分值占比:2分/题
- 命题趋势:主要考查上下文切换的过程和开销,可能与模式切换对比出题
六、易错点提醒
错误表现:认为上下文切换和模式切换是同一概念 错误原因:两者都涉及CPU状态的保存和恢复 正确理解:模式切换是同一进程的用户态↔内核态切换,上下文切换是不同进程之间的切换,后者包含前者
错误表现:认为上下文切换的主要开销是寄存器保存/恢复 错误原因:只看到直接开销,忽略了间接开销 正确理解:缓存/TLB失效导致的间接开销通常远大于直接的寄存器操作开销
错误表现:认为同一进程内的线程切换不需要上下文切换 错误原因:将"不切换地址空间"等同于"不切换上下文" 正确理解:内核级线程切换仍需保存/恢复寄存器(上下文切换),只是不需要刷新TLB和地址空间
错误表现:将进程的代码段和数据段也当作上下文的一部分 错误原因:混淆CPU状态和内存内容 正确理解:上下文只包含CPU寄存器中的运行时状态,代码段和数据段存放在内存中,由PCB记录地址
七、来源标注
- 依据2026考研统考408大纲
- 依据《计算机操作系统》(汤小丹/汤子瀛版)第3章
- 依据《操作系统概念》(Silberschatz版)第5章