首页 > 编程知识 正文

cpu上下文切换开销,cpu上下文切换时间

时间:2023-05-06 08:38:45 阅读:276034 作者:990

什么是CPU上下文?

CPU上下文:CPU寄存器和程序技术器CPU寄存器:CPU内置的容量最小、但速度极快的内存。程序计数器:用来存储CPU正在执行的指令位置,或者即将执行的下一条指令的位置。

结构如下:

CPU上下文切换是什么意思?

CPU上下文切换:指将前一个任务的CPU上下文(CPU寄存器和程序计数器)保存起来(保存在系统内核中),然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的位置,运行新任务。

通俗理解:
cpu上下文切换就好比一个人有好多朋友要拜访,有的朋友房子大(进程),进进出出里三层外三层,有的朋友住帐篷(线程),就拉开帐篷聊聊天,有的朋友就隔着窗户说两句话打个照面路过(中断)

什么是进程上下文切换?
结论:比系统调用多了一步,在保存当前进程的内核状态和CPU寄存器之前,先把该进程的虚拟内存、栈等保存起来;而加载了下一进程的内核态之后,还需要刷新进程的虚拟内存和用户栈。


进程之间切换通俗例子:

进程切换我想到了很多年前在银行柜台办理业务的情形。
1:银行分配各个窗口给来办理业务的人
2:如果只有1个窗口开放(系统资源不足),大部分都得等
3:如果正在办理业务的突然说自己不办了(sleep),那他就去旁边再想想(等)
4:如果突然来了个VIP客户,可以强行插队
5:如果突然断电了(中断),都得等。。

什么是系统调用?
由用户态到内核态的转变, 保存CPU寄存器中用户态的指令位置,更新为内核态指令的新位置,然后跳到内核态去执行内核任务。
扩展:
Linux 按照特权等级,把进程的运行空间分为内核空间和用户空间,分别对应着下图中, CPU 特权等级的 Ring 0 和 Ring 3。
内核空间(Ring 0)具有最高权限,可以直接访问所有资源;
用户空间(Ring 3)只能访问受限资源,不能直接访问内存等硬件设备,必须通过系统调用陷入到内核中,才能访问这些特权资源。

换个角度看,也就是说,进程既可以在用户空间运行,又可以在内核空间中运行。进程在用户空间运行时,被称为进程的用户态,而陷入内核空间的时候,被称为进程的内核态。

进程上下文切换跟系统调用又有什么区别呢?

进程是由内核来管理和调度的,进程的切换只能发生在内核态。所以,进程的上下文不仅包括了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的状态。

什么是线程上下文切换?他的过程是是如何变化的?
前提知识:

线程是调度的基本单位,而进程是资源拥有的基本单位。所谓内核中的任务调度,实际上的调度对象是线程,而进程只是提供了虚拟内存、全局变量等资源。对于线程和进程,我们可以这么理解.当进程只有一个线程的时候,进程就等于线程。.当进程拥有多个线程时,这些线程会共享相同的虚拟内存和全局变量等资源,这些上下文切换的时候不需要修改。线程的私有数据,如栈和寄存器等,这些在切换的时候是需要保存的。

上下文切换:
1)前后两个线程属于不同进程,切换和进程之间的切换一样
2)前后两个线程属于同一个进程,虚拟内存保持不动, 只需要切换线程的私有数据、寄存器等不共享的资源。

什么是中断上下文切换?他的过程是是如何变化的?

定义:打断正常进程的正常调度和执行,将进程当前的状态保存下来(如CPU寄存器、内存堆栈、硬件中断参数等。)

出现上下文切换的性能问题,哪些情况会触发进程上下文切换的场景?

1)最常规:进程执行完了,使用的CPU会释放出来2)进程在系统资源不足(如内存不足)时,要等到资源满足后才可以运行,这时候进程会被挂起,并由系统调度其他进程运行。3)当进程通过睡眠函数sleep自己主动挂起时,自然也会重新调度。4)当有优先级更高的进程运行时,当前进程会被挂起,由高优先级进程来运行5)发生硬件中断时,CPU上的进程会被中断挂起,转而执行内核中的中断服务小结:```javaCPU 上下文切换,是保证 Linux 系统正常工作的核心功能之一,一般情况下不需要我们特别关注。但过多的上下文切换,会把 CPU 时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,从而缩短进程真正运行的时间,导致系统的整体性能大幅下降。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。