什么是上下文切换?代价在哪里?
一、上下文切换的定义
上下文切换(Context Switching)是指操作系统在多个进程或线程之间切换执行时,保存当前任务状态并恢复下一个任务状态的过程。这种机制使得单个CPU能够通过时间片轮转的方式"同时"运行多个任务。
核心本质:上下文切换是并发编程的基础支撑机制,但也是多任务系统最主要的性能开销来源之一。
二、上下文切换的触发场景
2.1 主动切换
- 系统调用:当进程执行read/write等阻塞式系统调用时
- 主动让出:调用
sched_yield()
等主动放弃CPU的函数 - 锁等待:线程尝试获取已被占用的互斥锁(mutex)
2.2 被动切换
- 时间片耗尽:CPU时间片用完被强制调度
- 中断处理:硬件中断触发更高优先级任务
- 抢占式调度:更高优先级任务就绪
三、上下文切换的技术实现
3.1 进程上下文切换
涉及完整的进程控制块(PCB)保存/恢复:
- 用户级上下文(程序计数器、栈指针等)
- 寄存器上下文(通用寄存器、浮点寄存器)
- 系统级上下文(页表、文件描述符表等)
<