Skip to content

上下文切换机制

考情分析

上下文切换在 408 真题中通常不单独出题,但常与调度算法结合考查。属于 🔥 中低频考点。

调度算法决定了"接下来该谁上 CPU",但从一个进程切到另一个进程,具体要做哪些事?这个切换过程本身是有成本的,理解它才能明白为什么时间片不能设太短。

什么是上下文

进程的**上下文(Context)**是指进程运行时 CPU 中各寄存器的值——就像你同时做两道菜,在灶台之间切换时必须记住每道菜放了多少盐、炒到哪一步了。上下文就是这些"进度信息"。具体包括:

寄存器说明
PC(程序计数器)下一条要执行的指令地址
PSW(程序状态字)状态标志(中断屏蔽位、模式位等)
通用寄存器运算中间结果
栈指针(SP)当前栈顶位置
基址/限长寄存器内存保护相关

这些信息保存在 PCB 中。

上下文切换过程

当 CPU 从一个进程切换到另一个进程时:

整个过程在内核态下完成。

上下文切换的时机

触发原因说明
时间片用完当前进程的时间片耗尽
更高优先级进程到达抢占式调度中被抢占
进程阻塞当前进程发出 I/O 请求等
进程终止当前进程执行完毕

上下文切换的开销

上下文切换是纯开销——切换过程中 CPU 不做任何有意义的计算。

开销来源:

  • 保存和恢复寄存器值
  • 刷新内存映射(TLB、页表基址寄存器)
  • 缓存失效(切换后 Cache 中的数据大概率不是新进程的)

因此,频繁的上下文切换会严重影响系统性能。这也是时间片不能设置太短的原因。

易错 — 上下文切换 vs 模式切换

模式切换:用户态↔内核态,只改变 PSW 中的模式位,不一定切换进程。 上下文切换:从一个进程切换到另一个进程,一定包含模式切换,但开销更大。

常见错误:"系统调用会导致上下文切换"——不一定。系统调用只引起模式切换(用户态→内核态→用户态),如果没有引发进程调度,当前进程不变,不算上下文切换。

考研高频考点

  • 🔥🔥 上下文切换与模式切换的区别
  • 🔥 上下文切换的步骤(保存旧上下文→选择新进程→恢复新上下文)
  • 🔥 上下文切换是纯开销

调度和切换解决了 CPU 分配问题。但当多个进程要访问同一份数据时,新的问题来了——如何保证数据一致性?下一篇进入同步与互斥的世界。

真题练习

相关真题(4题)

2025Q24选择题2分

上下文切换:中断向量表是系统全局的,切换时不需要更新

2022Q25选择题2分

进程切换:需要更新PC、栈基址、页表基址等所有进程上下文

2018Q45综合题8分

综合题:虚拟地址计算、PDBR特性、改进CLOCK页表项字段

2012Q23选择题2分

进程切换:必须在内核态执行,不可能在用户态发生