美文网首页
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