一、关于上下文切换的几个为什么

1、 上下文切换是什么?

上下文切换是对任务当前运行状态的暂存和恢复

2、 CPU为什么要进行上下文切换?

当多个进程竞争CPU的时候,CPU为了保证每个进程能公平被调度运行,采取了处理任务时间分片的机制,
轮流处理多个进程,由于CPU处理速度非常快,在人类的感官上认为是并行处理,实际是"伪"并行,
同一时间只有一个任务在运行处理。

3、 上下文切换主要消耗什么资源,为什么说上下文切换次数过多不可取?

根据 Tsuna 的测试报告,每次上下文切换都需要几十纳秒到到微秒的CPU时间,这些时间对CPU来说,
就好比人类对1分钟或10分钟的感觉概念。在分秒必争的计算机处理环境下,浪费太多时间在切换上,
只能会降低真正处理任务的时间,表象上导致延时、排队、卡顿现象发生。

4、 上下文切换分几种?

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

5、 什么情况下会触发上下文切换?

系统调用、进程状态转换(运行、就绪、阻塞)、时间片耗尽、系统资源不足、sleep、优先级调度、硬件中断等

6、 线程上下文切换和进程上下文切换的最大区别?

线程是调度的基本单位,进程是资源拥有的基本单位,同属一个进程的线程,发生上下文切换,

只切换线程的私有数据,共享数据不变,因此速度非常快。

7、 有哪些减少上下文切换的技术用例?

数据库连接池(复用连接)、合理设置应用的最大进程,线程数、直接内存访问DMA、零拷贝技术

二、上下文切换过程详解

1、进程上下文切换过程

(1)进程运行态为内核运行态和进程运行态。内核空间态资源包括内核的堆栈、寄存器等;用户空间态资源包括虚拟内存、栈、变量、正文、数据等


(2)系统调用(软中断)在内核态完成的,需要进行2次CPU上下文切换(用户空间-->内核空间-->用户空间),不涉及用户态资源,也不会切换进程。

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

(4)进程的上下文切换过程:

(a)接收到切换信号,挂起进程,记录当前进程的虚拟内存、栈等资源存储;
(b)将这个进程在 CPU 中的上下文状态存储于起来;
(c)然后在内存中检索下一个进程的上下文;
(d)并将其加载到 CPU的寄存器中恢复;

  (e)还需要刷新进程的虚拟内存和用户栈;

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

(5)、下列将会触发进程上下文切换的场景:

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

2、线程上下文切换的 过程

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

3、 中断上下文切换,如何理解?

为了快速响应硬件的事件(如USB接入),中断处理会打断进程的正常调度和执行,转而调用中断处理程序,

响应设备事件。而打断其它进程执行时,需要进行上下文切换。中断事件过多,会无谓的消耗CPU资源,导致进程处理时间延长。

对于一个CPU来说,中断处理比进程拥有更高的优先级

三、课后思考题

1、题目

最后,我想邀请你一起来聊聊,你所理解的CPU上下文切换,你可以结合今天的内容,总结自己的思路和看法,写下你的学习心得

2、经典留言

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

转载于:https://www.cnblogs.com/luoahong/p/10802102.html

Linux性能优化实战:CPU的上下文切换是什么意思(03)相关推荐

  1. idl linux运行效率,Linux性能优化实战 CPU篇 阅读笔记

    第十一讲 如何快速分析出CPU的性能瓶颈(2020.6.3) 这一讲干活真是太多了,将之将使用的各种工具串联起来.其实系统出问题之后第一感觉就是感觉就是系统相应变慢了.我们可以使用<> 里 ...

  2. linux性能优化实战学习笔记-(1)CPU性能分析工具与套路

    版权归Linux性能优化实战 作者倪鹏飞,本文主要是为学习.整理相关知识点,请勿用作商用,侵删. linux性能分析工具 下图来自:Brendan D. Gregg http://www.brenda ...

  3. Linux 性能优化实战(倪朋飞)---CPU 使用率

    查看 CPU 使用率 对于 CPU 使用率,top 默认 3 秒时间间隔:ps 使用的是进程的整个生命周期. top 显示系统总体的 CPU 和内存使用情况,及各个进程的资源使用情况:ps 只显示每隔 ...

  4. linux性能优化实战 倪朋飞,Linux性能优化实战:系统的swap变高(09)

    一.实验环境 1.操作系统 root@openstack:~# lsb_release -a No LSB modules are available. Distributor ID:Ubuntu D ...

  5. Linux 性能优化实战(倪朋飞)---平均负载

    查看平均负载: $ uptime20:32:31 up 33 min, 1 user, load average: 0.72, 0.63, 0.70 结果解释: 20:32:31 // 当前时间 up ...

  6. 推荐学习-Linux性能优化实战

    学习交流加(可免费帮忙下载CSDN资源): 个人微信: liu1126137994 学习交流资源分享qq群1(已满): 962535112 学习交流资源分享qq群2: 780902027 推荐一个学习 ...

  7. Linux性能优化实战学习笔记:第四十六讲=====实战分析

    Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...

  8. Linux性能优化实战学习笔记:第十讲==中断

    Linux性能优化实战学习笔记:第十讲 一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 ? 1 2 3 4 5 6 7 wget http://www.tcp ...

  9. Linux 性能优化实战(倪朋飞)---系统中出现大量不可中断进程和僵尸进程怎么办?

    进程状态 可通过 top 或 ps 查看进程状态. $ topPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4480 yjp 20 0 6 ...

  10. 学习Linux性能优化实战-1

    文章目录 前言 平均负载 命令 进程调度 命令 相关文件 CPU使用率 perf 软中断 测试工具 前言 最近在极客时间上面发现了倪鹏飞老师的Linux性能优化实战,自己感觉讲得很好,有兴趣的朋友可以 ...

最新文章

  1. 兄弟机cnc系统面板图解_FANUC软操作面板的应用介绍,真的太详细了
  2. 基于spring-redis发布订阅模式的实现
  3. python画图显示中文乱码_解决Python pandas plot输出图形中显示中文乱码问题
  4. 数据只会告诉你该怎么走
  5. HTTP Basic Authentication验证WCF Data Service
  6. erlang 动态编译和加载遇到的问题。
  7. MySQL 8.0 的 5 个新特性,太实用了!
  8. 疫情严峻,被迫在家办公
  9. nvidia卸载程序无法继续运行_win10系统下nvidia安装程序无法继续不兼容的解决办法_nvidia显卡驱动与系统不兼容...
  10. java实现聊天室(websocket)
  11. 2018-2019-2 20175216张雪原 实验四《Android程序设计》实验报告
  12. 2018年5月备航记录(MOXA串口分配器)
  13. ubuntu上安装微信教程
  14. lcd显示器测试软件,tLCDtest(液晶屏幕测试软件)
  15. 【计算机毕业设计】基于微信小程序的社区疫情防控系统
  16. 比较实用的一个知识点——Android:interpolator用法
  17. 关于SG/SP, GG/GP的一点个人理解
  18. 快醒醒吧!你连基础的JVM运行时内存布局都忘了?Java面试题及解析
  19. (笔记)andro studio ——ProgressDialog
  20. 电脑蓝屏、经常用一会后蓝屏问题检查修复

热门文章

  1. Android:是时候掌握WebView与Js的交互技术了
  2. C++中#和##的特殊使用
  3. 向右键添加新建脚本菜单
  4. Qt5学习笔记之零碎问题记录
  5. 微信授权获取code(微信支付)
  6. jQuery EasyUI 简介
  7. sha2 替换sha1 时间表
  8. RC952-FXE1-BL用户使用手册(存档)
  9. Software - ASCII码表
  10. 最新的Functions 类