线程的上下文切换

て烟熏妆下的殇ゞ 提交于 2020-03-09 15:34:30

CPU利用时间片轮询来为每个任务都服务一定的时间,然后把当前任务的状态保存下来,继续服务下一个任务。任务的状态保存及再加载就叫做线程的上下文切换。

在一个进程内部可以有多个线程在同时运行,并与创建它的进程共享同一地址空间和其它资源。

上下文:批线程切换时CPU寄存器和程序计数器所保存的当前线程的信息。

寄存器:指CPU内部容量较小但速度很快的内存区域(与之相对应的是CPU外相对较慢的RAM主内存)。寄存器通过对常用值(常为运算的中间值)的快速访问来加快计算机程序的速度。

程序计数器:是一个专用的寄存器,用于表明指令序列中CPU正在执行的位置,存储的值为正在执行的指令的位置或下一个将被执行的指令的位置,这依赖于特定的系统。


上下文切换

上下文切换指的是内核(OS的核心)在CPU上对进程或线程进行切换。上下文切换过程中的信息被保存在进程控制块(PCB ,Process Control Block)中。PCB又被称作切换帧(SwitchFrame)。上下文切换的信息会一直被保存在CPU的内存中。直到被再次使用。上下文切换流程如下:

(1)挂起一个进程,将这个进程在CPU中的状态(上下文信息)存储于内存的PCB中。

(2)在PCB中检索下一个进程的上下文并将其在CPU的寄存器中恢复。

(3)跳转到程序计数器所指向的位置(即跳转到进程被中断时的代码),并恢复该进程。

时间片轮转方式使多个任务在同一CPU上的执行有了可能。


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

  • 当前正在执行的任务完成,系统CPU正常调度下一个任务。
  • 当前正在执行的任务遭遇I/O等阻塞操作,调度器挂起此任务,继续调度下一个任务
  • 多个任务并发抢占锁资源,当前任务没有抢到锁资源,被调度器挂起,继续调度下一个任务。
  • 用户的代码挂起当前任务,比如线程执行sleep方法,而让出CPU。
  • 硬件中断。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!