什么是上下文切换

  上下文切换指的是内核操作系统的核心在CPU上对进程或者线程进行切换。

  搞清楚上下文切换需要先搞清楚什么是上下文

  CPU在开始执行任务时需要先知道从哪里去加载任务,从哪里开始执行,上下文的作用就是告诉CPU这些。(通常是由程序计数器和CPU寄存器来完成)

  那为什么需要上下文切换呢?

  一般线程的个数都大于 CPU 核心的个数,而一个 CPU 核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU 采取的策略是为每个线程分配时间片并轮转的形式,就是一个线程的时间片用完会退回到就绪态,其他线程继续运行,这个过程就是进行了一次上下文切换

  上下文切换的步骤:

  • 挂起一个进程,将这个进程在CPU中的状态(上下文信息)存储于内存的PCB(Process Control Block)中
  • 在PCB中检索下一个进程的上下文并将其在CPU的寄存器中恢复
  • 最后跳转到程序计数器所指的新位置,运行新任务

  引起线程上下文切换的原因:

  (1)当前正在执行的任务完成,系统的CPU正常调度下一个任务。

  (2)当前正在执行的任务遇到I/O等阻塞操作,调度器挂起此任务,继续调度下一个任务。

  (3)多个任务并发抢占锁资源,当前任务没有抢到锁资源,被调度器挂起,继续调度下一个任务。

  (4)用户的代码挂起当前任务,比如线程执行yield()方法,让出CPU。

  (5)硬件中断。

 

  上下文切换可以分为进程上下文切换、线程上下文切换、中断上下文切换三种

  进程上下文切换:进程上下文切换需要保存的东西比较多,花费的时间也比较多,进程的上下文主要包括虚拟内存、栈、全局变量、堆栈、寄存器等

  线程上下文切换:线程上下文切换时,虚拟内存和全局变量等资源都是共享的,线程的上下文包括栈和寄存器等,比寄存器少很多。

  中断上下文切换:为了快速响应硬件的事件,中断处理会打断进程的正常调度和执行,然后调用中断处理程序,响应设备事件。中断上下文,只包括内核态中断服务程序执行所必需的状态,也就是 CPU 寄存器、内核堆栈、硬件中断参数等

 

 

  转载: https://blog.csdn.net/zydybaby/article/details/127080584

posted @ 2023-02-20 19:22  小家电维修  阅读(128)  评论(0编辑  收藏  举报