Skip to content

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决定切换到另一个进程时,需要执行以下步骤:

  1. 保存当前进程上下文:将CPU中所有寄存器的值保存到当前进程的PCB中
  2. 更新当前进程PCB:将进程状态更新为就绪或阻塞,移入相应队列
  3. 选择下一个进程:调度器从就绪队列中选择下一个要运行的进程
  4. 更新新进程PCB:将新进程状态改为"运行"
  5. 恢复新进程上下文:从新进程的PCB中读取所有寄存器值,加载到CPU中
  6. 刷新缓存:可能需要刷新TLB和高速缓存(因为地址空间可能改变)

2.3 上下文切换的开销

上下文切换是纯开销——切换期间CPU不做任何有用工作。

开销来源说明
寄存器保存/恢复直接的指令执行时间
缓存失效新进程的数据可能不在CPU缓存中,导致大量缓存未命中
TLB失效地址空间改变后TLB中的映射失效,需要重新加载
流水线刷新CPU流水线需要排空并重新填充

关键理解:上下文切换的直接开销(保存/恢复寄存器)通常只有几微秒,但间接开销(缓存/TLB失效)可能占总开销的大部分。

2.4 上下文切换 vs 模式切换

维度模式切换上下文切换
触发原因中断/异常/系统调用进程调度(时间片到、阻塞等)
是否切换进程否(同一进程的用户态↔内核态)是(从一个进程切换到另一个进程)
开销较小较大(需保存/恢复更多状态)
地址空间不变可能改变
包含关系模式切换是上下文切换的一部分上下文切换一定包含模式切换

三、记忆与理解辅助

  1. 口诀:"上下文=CPU的全部状态,切换=保存旧+恢复新"
  2. 上下文切换 vs 模式切换:模式切换是"换权限"(用户态↔内核态),上下文切换是"换进程"
  3. 开销来源:"直接开销小,间接开销大"——缓存/TLB失效是主要开销

四、例题与精解

例题1(基础巩固)

题目:上下文切换时,需要保存的信息不包括( )

A. 程序计数器 B. 通用寄存器 C. 进程的代码段 D. 程序状态字

命题意图:考查上下文包含的内容。

精解

  1. 审题分析:题目要求选出"不需要保存"的内容
  2. 解题思路:上下文是CPU中的运行时状态,不包括内存中的代码和数据
  3. 完整步骤
    • A选项:程序计数器(PC)必须保存,否则不知道切换回来后从哪里继续执行
    • B选项:通用寄存器必须保存,保存运算中间结果
    • C选项:进程的代码段存放在内存中,不需要在上下文切换时保存(代码段不变)
    • D选项:程序状态字(PSW)必须保存,保存条件码等状态
  4. 方法反思:上下文只保存CPU中的寄存器状态,不保存内存中的代码和数据

答案:C

例题2(中等提升)

题目:以下关于上下文切换的描述,正确的是( )

A. 上下文切换只发生在进程终止时 B. 上下文切换的开销主要是保存和恢复寄存器的时间 C. 同一进程内的线程切换不需要上下文切换 D. 上下文切换一定包含模式切换

命题意图:考查上下文切换的触发条件和开销。

精解

  1. 审题分析:逐项判断上下文切换的特点
  2. 解题思路:上下文切换发生在进程调度时,开销包括直接和间接两部分
  3. 完整步骤
    • A选项:错误。上下文切换发生在任何需要切换进程的场景——时间片到、进程阻塞、进程终止、更高优先级到达等
    • B选项:不完全正确。直接的寄存器保存/恢复开销较小,主要开销来自缓存和TLB的失效(间接开销)
    • C选项:错误。内核级线程切换也需要上下文切换(保存/恢复寄存器),只是不需切换地址空间
    • D选项:正确。上下文切换时需要从当前进程切换到调度器(内核态),再切换到新进程,必然涉及模式切换
  4. 方法反思:上下文切换一定包含模式切换,但模式切换不一定包含上下文切换(如同一进程的系统调用)

答案:D


五、考情分析

  • 考查频次:近5年约2–3次
  • 常见题型:选择题
  • 分值占比:2分/题
  • 命题趋势:主要考查上下文切换的过程和开销,可能与模式切换对比出题

六、易错点提醒

  1. 错误表现:认为上下文切换和模式切换是同一概念 错误原因:两者都涉及CPU状态的保存和恢复 正确理解:模式切换是同一进程的用户态↔内核态切换,上下文切换是不同进程之间的切换,后者包含前者

  2. 错误表现:认为上下文切换的主要开销是寄存器保存/恢复 错误原因:只看到直接开销,忽略了间接开销 正确理解:缓存/TLB失效导致的间接开销通常远大于直接的寄存器操作开销

  3. 错误表现:认为同一进程内的线程切换不需要上下文切换 错误原因:将"不切换地址空间"等同于"不切换上下文" 正确理解:内核级线程切换仍需保存/恢复寄存器(上下文切换),只是不需要刷新TLB和地址空间

  4. 错误表现:将进程的代码段和数据段也当作上下文的一部分 错误原因:混淆CPU状态和内存内容 正确理解:上下文只包含CPU寄存器中的运行时状态,代码段和数据段存放在内存中,由PCB记录地址


七、来源标注

  • 依据2026考研统考408大纲
  • 依据《计算机操作系统》(汤小丹/汤子瀛版)第3章
  • 依据《操作系统概念》(Silberschatz版)第5章

考研全科复习资料 - 基于2026考研统考大纲