美文网首页
CPU性能分析--上下文切换

CPU性能分析--上下文切换

作者: 橡树人 | 来源:发表于2021-02-19 15:27 被阅读0次

内容提要

  • CPU上下文切换都做了哪些事?
  • CPU上下文切换都有哪些场景?
  • 系统调用上下文切换都做了哪些事?
  • 进程上下文切换都做了哪些事?
  • 线程上下文切换都做了哪些事?
  • 中断上下文切换都做了哪些事?

CPU上下文切换

  • 什么是CPU上下文?
    CPU的寄存器和程序计数器

  • CPU上下文切换要做哪些事?

    1. 保存前一个任务的CPU上下文;
    2. 加载新任务的CPU上下文到这些寄存器和程序计数器;
    3. 跳转到程序计数器所指的新位置,运行新任务;
      注意:
      这里提到的任务包括哪些?
      • 进程
      • 线程
      • 中断
  • 根据任务的不同,CPU切换分为哪些场景?

    1. 进程上下文切换
    2. 线程上下文切换
    3. 中断上下文切换

系统调用上下文切换

  • 系统调用过程中有发生CPU上下文切换吗?
    有。

  • 系统调用发生的CPU上下文切换过程是怎样的?
    第一次CPU上下文切换

    1. 保存进程用户态的指令位置;
    2. 更新CPU的寄存器为内核态指令的新位置;
    3. 跳转到内核态运行内核任务;

    第二次CPU上下文切换

    1. 恢复CPU寄存器为之前保存的进程用户态的指令位置;
    2. 跳转到之前保存的进程用户态指令位置处,继续执行;

注意:

  • 1次系统调用过程中有2次CPU上线文切换;
  • 系统调用过程不涉及虚拟内存等进程用户态资源的保存;
  • 系统调用过程没有发生进程的切换;

进程上下文切换

进程上下文切换要做哪些事?

  • 先保存前一进程的虚拟内存、栈等用户空间的资源,然后保存该进程的内核状态和寄存器;
  • 加载新进程的内核态,刷新该进程的虚拟内存和栈等用户态资源;
  • 跳转到程序计数器所指的新位置,开始运行新进程;

什么时候会发生进程上下文切换?

  • 进程因执行完终止了,系统从就绪队列中取出一个新的进程来运行
  • 进程因时间片耗尽被挂起,系统切换其他正在等待CPU的进程来运行
  • 进程因系统资源不足被挂起,系统调度其他进程来运行
  • 进程通过sleep等方法主动挂起,系统调度其他进程来运行
  • 进程因有更高优先级的进程要执行被挂起,系统执行高优先级进程
  • 进程因发生硬件中断被挂起,系统转而执行内核中的中断服务程序

线程上下文切换

线程上下文切换要做哪些事?
如果切换前后的线程属于不同的进程,则参考进程上下文切换步骤;否则,由于切换前后同属一个进程,所以不用保存虚拟内存等共享资源。

  • 保存前一线程的私有数据、寄存器等不共享的数据;
  • 加载新线程的上下文到寄存器和程序计数器中;
  • 跳转到程序计数器所指的新位置,开始运行新线程;

中断上下文切换

中断上下文切换都需要做哪些事?

  • 不涉及前一进程的用户态,不需要保存前一进程的虚拟内存、全局变量等用户态资源,仅需要保存进程的内核态;
  • 加载中断服务程序的内核态上下文,包括CPU寄存器、内核堆栈、硬件中断参数;
  • 跳转到程序计数器所指的内核位置处,运行中断服务器程序。

相关文章

网友评论

      本文标题:CPU性能分析--上下文切换

      本文链接:https://www.haomeiwen.com/subject/rbeaxltx.html