首页 > 系统相关 >#yyds干货盘点#Linux CPU 的上下文切换一

#yyds干货盘点#Linux CPU 的上下文切换一

时间:2023-04-13 20:34:50浏览次数:36  
标签:yyds 寄存器 计数器 任务 切换 Linux 上下文 CPU

我们都知道 Linux 是一个多任务操作系统,它支持的任务同时运行的数量远远大于 CPU 的数量。当然,这些任务实际上并不是同时运行的(Single CPU),而是因为系统在短时间内将 CPU 轮流分配给任务,造成了多个任务同时运行的假象。

CPU 上下文(CPU Context)

在每个任务运行之前,CPU 需要知道在哪里加载和启动任务。这意味着系统需要提前帮助设置 CPU 寄存器程序计数器

CPU 寄存器是内置于 CPU 中的小型但速度极快的内存。程序计数器用于存储 CPU 正在执行的或下一条要执行指令的位置。

它们都是 CPU 在运行任何任务之前必须依赖的依赖环境,因此也被称为 “CPU 上下文”。如下图所示:

#yyds干货盘点#Linux CPU 的上下文切换一_寄存器

知道了 CPU 上下文是什么,我想你理解 CPU 上下文切换就很容易了。“CPU上下文切换”指的是先保存上一个任务的 CPU 上下文(CPU寄存器和程序计数器),然后将新任务的上下文加载到这些寄存器和程序计数器中,最后跳转到程序计数器。

这些保存的上下文存储在系统内核中,并在重新安排任务执行时再次加载。这确保了任务的原始状态不受影响,并且任务似乎在持续运行。

CPU 上下文切换的类型

你可能会说 CPU 上下文切换无非就是更新 CPU 寄存器和程序计数器值,而这些寄存器是为了快速运行任务而设计的,那为什么会影响 CPU 性能呢?

在回答这个问题之前,请问,你有没有想过这些“任务”是什么?你可能会说一个任务就是一个进程或者一个线程。是的,进程和线程正是最常见的任务,但除此之外,还有其他类型的任务。

别忘了硬件中断也是一个常见的任务,硬件触发信号,会引起中断处理程序的调用。

因此,CPU 上下文切换至少有三种不同的类型:

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

让我们一一来看看。

标签:yyds,寄存器,计数器,任务,切换,Linux,上下文,CPU
From: https://blog.51cto.com/u_15452495/6188345

相关文章

  • Linux操作系统内存管理RAID磁盘阵列与配置
    1、RAID磁盘阵列简称:独立冗余磁盘阵列把多块独立的物理硬盘按不同的方式组合起来形成一个硬盘组(逻辑硬盘)。从而提供比单个硬盘更高的存储性能和提供数据备份技术。1.1RAID级别组成磁盘阵列的不同方式称为RAID级别(RAIDLevels)常用的RAID级别:RAID0、RAID1、RAID5、RAID6、RAID1......
  • Linux操作系统ARM体系结构处理器机制原理与实现
    ARM的概念ARM(AdvancedRISCMachine),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。ARM公司并不生产芯片也不销售芯片,它只出售芯片技术授权。其合作公司针对不同需求搭配各类硬件部件,比如UART、SDI、I2C等,从而设计出不同的SoC......
  • Linux操作系统汇编语言基础知识(图文代码)
    1、什么是汇编语言,它在计算机语言中的地位?汇编语言是程序设计语言的基础语言,是唯一可以直接与计算机硬件打交道的语言2、汇编语言与源程序、汇编程序、汇编的关系?3、汇编语言的特点\1)汇编语言与机器指令一一对应,可充分理解计算机的操作过程汇编语言指令是机器指令的符号表......
  • Linux操作系统ARM指令集与汇编语言程序设计
    一、实验目的1.了解并掌握ARM汇编指令集2.应用ARM指令集编写一个程序操控开发板上的LED灯二、实验要求应用ARM汇编指令集编写程序,实现正常状态下开发板上的LED灯不亮,按下一个按键之后开发板上的LED灯进入流水灯模式。三、实验原理四个LED灯的电路如下图所示:四个按键电路图......
  • Linux操作系统汇编指令入门级整理知识点
    前言我们大都是被高级语言惯坏了的一代,源源不断的新特性正在逐步添加到各类高级语言之中,汇编作为最接近机器指令的低级语言,已经很少被直接拿来写程序了,不过我还真的遇到了一个,那是之前的一个同事,因为在写代码时遇到了成员函数权限及可见性的问题,导致他无法正确调用想执行的函数,结......
  • CPU缓存学习
    cpu缓存分为L1cache,L2cache,L3cacheL1为每个cpu独有缓存,L3为几个cpu的共有缓存,所以内存大小L3也是最大相应的L1,L2,L3速度也是由快到慢cpucache从内存读取数据的单位是缓存块(CacheLine),大小取决于coherency_line_size访问cpucache,需要从cpuline中读取,地址索引由组标记,cpulin......
  • linux上一些额外好玩的东西安装
    1.linux_hotspothttps://blog.csdn.net/weixin_41114301/article/details/127165479git的依赖:sudoapt-getinstallhostapdiptablesdnsmasq安装git:sudoapt-getinstallgitgitclonehttps://github.com/oblique/create_apcdcreate_apsudomakeinstallsudo......
  • linux入门4
    file查看文件的类型[root@nfs-serverlianxi]#filesc.txtsc.txt:UTF-8Unicodetext mv    mv-move(rename)files     mv[OPTION]...[-T]SOURCEDESTSOURCE源DEST目的地destination   1.移动(剪切)move 文件可以移动到文件夹里 后面接的文件夹......
  • #yyds干货盘点# LeetCode程序员面试金典:两两交换链表中的节点
    题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]输出:[1]代码实现:classSolution{publicListN......
  • #yyds干货盘点# LeetCode面试题:颜色分类
    1.简述:给定一个包含红色、白色和蓝色、共 n个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数0、 1和2分别表示红色、白色和蓝色。必须在不使用库内置的sort函数的情况下解决这个问题。 示例1:输入:nums=[2,0......