tnblog
首页
视频
资源
登录

CPU上下文切换

4960人阅读 2020/7/22 14:30 总访问:3662870 评论:0 收藏:0 手机
分类: linux

ubuntu

CPU上下文切换

(0) CPU寄存器,是内置的容量小、但速度极快的内存。而程序计数器,再则是用来存储CPU正在执行的指令位置、或者即将执行的下一条指令。它们都是CPU在运行任何任务前,必须的依赖环境,因此也被叫做CPU上下文。
(1)多任务竞争CPU,cpu变换让我的时候进行CPU上下文切换(context switch)。CPU执行任务有3种方式:进程、线程或者硬件通过触发信号导致中断的调用。
(2)当切换任务的时候,需要记录任务当前的状态和获取下一任务的信息和地址(指针),这就是上下文的内容。因此,上下文是指某一时间点CPU寄存器(CPU register)和程序计数器(PC)的内容,广义上还包括内存中进程的虚拟地址映射信息。
(3)上下文切换的过程:
1.记录当前任务的上下文(即寄存器与计算器等所有的状态)
2.找到新任务的上下文并加载
3.切换到新任务的程序计算器位置,恢复其任务。
(4)根据任务的执行形式,相应的上下文切换,有进程上下文切换、线程上下文切换、以及中断上下文切换三类。
(5)进程和线程的区别:
进程是资源分配和执行的基本单位;线程是任务调度和运行的基本单位。线程没有资源,进程给指针提供虚拟内存、栈、变量等共享资源,而线程可以共享进程的资源。

进程的上下文切换:是指从一个进程切换到另一个进程。

1.进程运行态为内核运行态和进程运行态。内核空间态资源包括内核的堆栈、寄存器等;用户空间态资源包括虚拟内存、栈、变量、正文等共享资源,而线程可以共享进程的资源。


2.系统调用(软中断)在内核态完成的,进程的切换只能发生在内核态。所以,进程的上下文不仅包括了用户空间的资源,也包括内核空间资源。
3.进程是由内核来管理和调度的,进程的切换只能发生在内核态。所以,进程的上下文不仅包括了用户空间的资源,也包括了内核空间资源。

4.进程的上下文切换过程:

  • a.接收到切换信号,挂起进程,记录当前进程的虚拟内存、栈等资源存储;
  • b.将这个进程在CPU中的状态存储起来;
  • c.然后在内存中检索下一个进程的上下文
  • d.并将其加载到CPU的寄存器中恢复;
  • e.还需要刷新用户的虚拟内存与用户栈
  • f.最后跳转到程序计数器所指向的位置(即跳转到进程被中断时的代码行)

5.具体如何触发进程上下文切换的场景,可以通过下面几个点进行触发:

  • 根据调度策略,将CPU时间划片为对应的时间片,当时间片耗尽,当前进程必须挂起。
  • 资源不足,在获取到足够资源之前进程挂起。
  • 进程sleep挂起进程。
  • 高优先级进程导致当前进度挂起
  • 硬件中断,导致当前进程挂起

线程上下文切换

  • 不通过进程之间的线程上下文切换,其过程和进程上下文切换大致相同。
  • 进程内部的线程上下文切换。不需要切换进程的用户资源,只需要切换线程私有的数据和寄存器等。这会比进程上下文进程切换消耗的资源少,所以多线程比多进程的更有优势。

中断上下文切换

快速响应硬件的事件,中断处理会打断进程正常的调度与执行,同一CPU内硬件中断优先级高于进程,切换过程类似于系统调用的时候,不涉及到用户运行态资源。但大量的中断上下文切换同样可能引发性能问题。

其他

(1)系统调用属于同进程内的CPU上下文切换;
(2)分别是CPU用来存储指令和下一条要执行指令的寄存器


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价
这一世以无限游戏为使命!
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术