047-操作系统上下文切换
在操作系统中,上下文切换(Context Switch)指的是将 CPU 从一个进程或线程切换到另一个进程或线程的过程。这一机制使得多任务操作系统可以在多个任务之间来回切换,实现“并发”运行。
1. 上下文切换的目的
上下文切换是多任务操作系统的核心特性,使得多个进程或线程可以共享 CPU 时间,从而提升系统资源的利用率和用户的使用体验。通过快速切换,操作系统在表面上呈现出多个程序同时运行的效果(即并发)。
2. 上下文切换的过程
上下文切换主要涉及三个步骤:
保存当前任务的上下文:将当前正在执行的任务的状态(称为上下文)保存到它的控制块(PCB 或 TCB)中。上下文信息包括 CPU 寄存器、程序计数器、堆栈指针等,它们表示当前任务的执行状态。
加载新任务的上下文:从新的任务的控制块中读取其保存的上下文信息,恢复到 CPU 寄存器,以便新任务从中断点或挂起位置继续执行。
执行调度策略:操作系统调度器决定下一个要运行的任务。它根据调度算法(例如时间片轮转、优先级调度等)选择下一个任务,并执行上下文恢复。
3. 上下文切换的开销
上下文切换涉及到大量寄存器信息的保存与恢复,同时还会导致 CPU 缓存失效(缓存污染),所以频繁的上下文切换会对系统性能产生负面影响。因此,设计良好的调度算法和合适的时间片分配是平衡系统响应速度和性能的重要策略。
4. 上下文切换的分类
- 进程上下文切换:涉及到切换整个进程的上下文。由于进程之间的地址空间是隔离的,因此进程切换时需要刷新页表等资源。
- 线程上下文切换:线程属于同一进程,可以共享同一地址空间,因此切换时不需要切换地址空间信息(如页表),开销相对较小。
5. 上下文切换的触发条件
上下文切换通常由以下事件触发:
- 时间片耗尽:线程执行的时间片结束,调度器强制切换。
- I/O 或系统调用:任务在等待 I/O 操作完成或进行系统调用时可能被挂起,CPU 调度给其他任务。
- 优先级调度:一个更高优先级的任务需要执行,系统会进行上下文切换来执行高优先级任务。
总结
上下文切换是多任务操作系统实现并发的重要机制,尽管开销不可避免,但有效的调度可以最小化对系统性能的影响。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Hymns!