线程上下文切换

在加载下一任务的状态后,继续服务下一任务,任务的状态保存及再加载, 这段过程就叫做上下文切换

1.进程

(有时候也称做任务)是指一个程序运行的实例。

在Linux系统中,线程就是能并行运行并且与他们的父进程(创建他们的进程)共享同一地址空间(一段内存区域)和其他资源的轻量级的进程。

2.上下文

是指某一时间点 CPU 寄存器和程序计数器的内容

3.寄存器

CPU内部数量稀少但是速度很快的内存,通过对常用数值的访问提高运行速度

4.程序计数器

一个专用的寄存器,表明指令序列CPU正在执行哪个位置,存的值为正在执行的指令 的位置或者下一个将要被执行的指令的位置,具体依赖于特定的系统

5.PCB切换帧

上下文切换可以认为是内核(操作系统的核心)在 CPU 上对于进程(包括线程)进行切换

上下文切换过程中的信息是保存在进程控制块(PCB, process control block)中的。

PCB还经常被称 作“切换桢”(switchframe)

信息会一直保存到CPU的内存中,直到他们被再次使用。

6.上下文切换的活动

  1. 挂起一个进程,将这个进程在 CPU 中的状态(上下文)存储于内存中的某处。
  2. 在内存中检索下一个进程的上下文将其在 CPU 的寄存器中恢复
  3. 跳转到程序计数器所指向的位置(即跳转到进程被中断时的代码行),以恢复该进程在程序 中。

7.引起上下文切换的原因

  1. 当前执行任务的时间片用完之后,系统CPU正常调度下一个任务;
  2. 当前执行任务碰到IO阻塞,调度器将此任务挂起,继续下一任务;
  3. 多个任务抢占锁资源,当前任务没有抢到锁资源,被调度器挂起,继续下一任务;
  4. 用户代码挂起当前任务,让出CPU时间
  5. 硬件中断

醉后不知天在水,满船清梦压星河