03 | 基础篇:经常说的 CPU 上下文切换是什么意思?(上)

cpu上下文:cpu寄存器和程序计数器

进程也可以在用户空间运行也可以在,内核空间运行,在用户空间运行的话,称之为进程的用户态,在内核空间运行的话,称之为进程的内核态。

cpu的上下文切换对应三种情况:

 进程上下文切换,线程上下文切换,中断上下文切换

用户态到内核态只能通过系统调用。系统调用将用户态的进程,陷入到内核态。

系统调用:是特殊的上下文切换,特权模式的切换。他是在进程内的上下文切换。首先它先将cpu寄存器中的用户态指令保存,然后为了执行内核态的代码,将cpu寄存器指向内核态指令的位置,然后跳转到内核态执行内核任务。系统调用结束后,恢复之前保存的用户态,恢复到用户态,然后在用户空间继续执行任务。一次系统调用,要经历两次cpu的上下文切换。

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

进程是由系统进行管理和分配的。

进程切换的时候:在恢复上下文的时候,是使用cpu的,这个一部分时间,也是会导致负载均很上升的。因为会将时间浪费在cpu寄存器,内核栈和虚拟内存的恢复和保存中,实际的cpu运算时间变少。

进程什么时候被调用到cpu上的五种情况:

1:由于系统资源不足的时候,会导致当前进程挂起,用系统管理进程的调用。

2:当前进程自行sleep,自动挂起,其他进程就可以进入cpu上。

3:当中断程序启动,会将cpu上的进程挂起,会转为执行内核中的中断进程

4:当进程的时间片执行完了,本进程会被系统挂起,每一个时间片轮询,那么等待中的进程,都有机会可以进入到cpu上。

5:当优先级高的进程来的时候,为了保证优先执行,当前进程会被挂起,转而执行优先级高的进程

线程上下文切换:包括两种情况,线程在不同进程之间的切换,线程在同一个进程之间的切换。

线程是调度的最小单位,进程是资源分配的最小单位。所以实际上来说,所谓的内核调用,其实都是线程之间的切换。进程是为其提供虚拟内存和全局变量等资源。

线程在同一个进程之间的切换:同一个进程在切换的时候,因为全局变量和虚拟内存是共享的不用去切换,可以省下很多资源。当然了线程独有的资源如栈和寄存器是要进行切换的,相对线程在不同进程之间的切换,这也是多线程比较火的原因。

中断上下文切换:为了响应设备硬件的中断,将会中断进程的正常调度和执行。中断进程不涉及用户态,所以当正在执行的进程是在用户空间的话,不用保存用户态进程和恢复不用管其虚拟内存和全局变量等资源。中断进程优先级高于其他的进程。所以当有其他进程在内核执行的话,会被挂起,优先执行中断线程,中断一般是短小精悍的以便于快熟处理。如果中断过多的话,也会影响系统的性能,所以这个中断的话,也是性能检测的一部分。

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值