Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

进程上下文切换

  • 上下文

    • 进程的执行,本质就是CPU执行其指令并不断改变寄存器状态的过程
    • 其中记录任务执行状态的寄存器信息,就是常说的上下文
  • 切换

    • 是指一个进程A进入挂起状态后,CPU就需要切换到另一个进程B执行
    • 这时候需要保护进程A的任务状态,对CPU寄存器里的值进行压栈,便于之后还原现场继续执行
    • 进入挂起状态的几种情况
      • 进程的时间片用尽
      • 系统资源不足
      • 主动挂起,比如sleep函数
      • 当有优先级更高的进程运行
      • 发生硬件中断
  • 切换的直接开销

    • 切换页表全局目录
    • 切换内核堆栈
    • 切换寄存器的数据
      • PC程序计数器、SP堆栈指针、其他CPU寄存器
  • 切换的间接开销

    • L1~L3 cache miss
      • 是指每个CPU核心独有的L1、L2级缓存,它可以加快热点数据的读写速度
        • 注意L3是多核心共享的,但其他进程读写也会挤占部分数据
      • 当进程被调度到另外的CPU核心时会出现cache miss
    • TLB cache miss
      • 全称转换旁路缓冲,是指页式管理中缓存高频访问的地址映射关系的部件
  • 量化分析

    • 步骤
      • 开启两个线程和一个管道,一个write线程往管道写数据,一个read线程从管道读数据
      • 二者通过互斥量进行同步,不断进行上下文切换
    • 测量结果
      • 在绑定CPU核心时,消耗1.2微秒,即1200纳秒,大概可以执行六万多条指令
      • 不绑定CPU核心时,消耗2.4微秒,即2400纳秒
    • 对比
      • 启动一个线程的耗时,5微秒
      • 启动一个进程的耗时,22微秒