Appearance
上下文切换机制
考情分析
上下文切换在 408 真题中通常不单独出题,但常与调度算法结合考查。属于 🔥 中低频考点。
调度算法决定了"接下来该谁上 CPU",但从一个进程切到另一个进程,具体要做哪些事?这个切换过程本身是有成本的,理解它才能明白为什么时间片不能设太短。
什么是上下文
进程的**上下文(Context)**是指进程运行时 CPU 中各寄存器的值——就像你同时做两道菜,在灶台之间切换时必须记住每道菜放了多少盐、炒到哪一步了。上下文就是这些"进度信息"。具体包括:
| 寄存器 | 说明 |
|---|---|
| PC(程序计数器) | 下一条要执行的指令地址 |
| PSW(程序状态字) | 状态标志(中断屏蔽位、模式位等) |
| 通用寄存器 | 运算中间结果 |
| 栈指针(SP) | 当前栈顶位置 |
| 基址/限长寄存器 | 内存保护相关 |
这些信息保存在 PCB 中。
上下文切换过程
当 CPU 从一个进程切换到另一个进程时:
整个过程在内核态下完成。
上下文切换的时机
| 触发原因 | 说明 |
|---|---|
| 时间片用完 | 当前进程的时间片耗尽 |
| 更高优先级进程到达 | 抢占式调度中被抢占 |
| 进程阻塞 | 当前进程发出 I/O 请求等 |
| 进程终止 | 当前进程执行完毕 |
上下文切换的开销
上下文切换是纯开销——切换过程中 CPU 不做任何有意义的计算。
开销来源:
- 保存和恢复寄存器值
- 刷新内存映射(TLB、页表基址寄存器)
- 缓存失效(切换后 Cache 中的数据大概率不是新进程的)
因此,频繁的上下文切换会严重影响系统性能。这也是时间片不能设置太短的原因。
易错 — 上下文切换 vs 模式切换
模式切换:用户态↔内核态,只改变 PSW 中的模式位,不一定切换进程。 上下文切换:从一个进程切换到另一个进程,一定包含模式切换,但开销更大。
常见错误:"系统调用会导致上下文切换"——不一定。系统调用只引起模式切换(用户态→内核态→用户态),如果没有引发进程调度,当前进程不变,不算上下文切换。
考研高频考点
- 🔥🔥 上下文切换与模式切换的区别
- 🔥 上下文切换的步骤(保存旧上下文→选择新进程→恢复新上下文)
- 🔥 上下文切换是纯开销
调度和切换解决了 CPU 分配问题。但当多个进程要访问同一份数据时,新的问题来了——如何保证数据一致性?下一篇进入同步与互斥的世界。