进程上下文切换
-
上下文
- 进程的执行,本质就是CPU执行其指令并不断改变寄存器状态的过程
- 其中记录任务执行状态的寄存器信息,就是常说的上下文
-
切换
- 是指一个进程A进入挂起状态后,CPU就需要切换到另一个进程B执行
- 这时候需要保护进程A的任务状态,对CPU寄存器里的值进行压栈,便于之后还原现场继续执行
- 进入挂起状态的几种情况
- 进程的时间片用尽
- 系统资源不足
- 主动挂起,比如sleep函数
- 当有优先级更高的进程运行
- 发生硬件中断
-
切换的直接开销
- 切换页表全局目录
- 切换内核堆栈
- 切换寄存器的数据
- PC程序计数器、SP堆栈指针、其他CPU寄存器
-
切换的间接开销
- L1~L3 cache miss
- 是指每个CPU核心独有的L1、L2级缓存,它可以加快热点数据的读写速度
- 注意L3是多核心共享的,但其他进程读写也会挤占部分数据
- 当进程被调度到另外的CPU核心时会出现cache miss
- 是指每个CPU核心独有的L1、L2级缓存,它可以加快热点数据的读写速度
- TLB cache miss
- 全称转换旁路缓冲,是指页式管理中缓存高频访问的地址映射关系的部件
- L1~L3 cache miss
-
量化分析
- 步骤
- 开启两个线程和一个管道,一个write线程往管道写数据,一个read线程从管道读数据
- 二者通过互斥量进行同步,不断进行上下文切换
- 测量结果
- 在绑定CPU核心时,消耗1.2微秒,即1200纳秒,大概可以执行六万多条指令
- 不绑定CPU核心时,消耗2.4微秒,即2400纳秒
- 对比
- 启动一个线程的耗时,5微秒
- 启动一个进程的耗时,22微秒
- 步骤