经常说的CPU上下文切换是什么意思?(上)

CPU上下文切换是Linux多任务运行中的关键操作,涉及进程、中断和线程的切换。上下文切换包括保存当前任务的CPU寄存器和程序计数器,加载新任务的上下文并跳转执行。进程上下文切换涉及到用户态和内核态的转换,消耗较大。中断上下文切换用于快速响应硬件事件,不涉及用户态资源。线程上下文切换在同一进程中更为轻量。频繁的上下文切换会降低系统性能。
摘要由CSDN通过智能技术生成

经常说的CPU上下文切换是什么意思?(上)

 

学习倪鹏飞老师linux性能优化实践的笔记,文中大量内容来源于老师的文档材料,如果喜欢请移步文末截图中的二维码支持老师的课程:

有时候看系统的资源利用率,我们会发现,cpu的use值不搞但sys值特别高,同时负载也会比较高,这时我们就会比较疑惑,我程序明明用的cpu很少啊,为什么负载特别高?嗯 原因就是上下文切换了。

我们都知道,Linux是一个多任务的操作系统,它支持远大于CPU数量的任务同时运行,当然,这些任务实际上并不是真正的在同时运行,而是应为系统在很短的时间内,将CPU轮流分配给他们,造成很多任务同时运行的错觉。

在每个任务运行前,CPU都需要知道任务从哪里加载,又是从哪里开始运行,也就是说,需要系统事先帮他设置好CPU寄存器和程序计数器(Program Counter,PC)

CPU寄存器,是CPU内置的容量小、但速度极快的内存。程序计数器,则是用来存储CPU正在执行的指令的位置,或者即将执行的下一条指令的位置。他们都是CPU在运行任何任务前,必须依赖的环境,因此也被叫做CPU上下文。

知道了什么事CPU上下文,我想你也很容易理解CPU上下文切换。CPU上下文切换,就是先把前一个任务的CPU上下文(也就是CPU寄存器和程序计数器)保存起来,然后加载新任务的上下文,到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。

而保存下来的上下文,会存储在系统内核中,并在任务重新调度执行的时候再加载进来。这样就能保证任务原来的状态不受影响,让任务看起来还是连续运行。

我猜肯定会有人说,CPU上下文切换无非就是更新了CPU寄存器的值嘛,但这些寄存器,本身就是为了快速运行任务而设计的,为什么会影响系统的CPU性能呢?

在回答这个问题前,不知道你有没有想过,操作系统管理的这些"任务"到底是什么呢?

也许你会说,任务就是进程,或者说任务就是线程,是的进程和线程是最常见的任务,但是除此之外ÿ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值