【Linux】:进程切换

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux进程切换的知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!

C 语 言 专 栏:C语言:从入门到精通

数据结构专栏:数据结构

个  人  主  页 :stackY、

C + + 专 栏   :C++

Linux 专 栏  :Linux

目录

前言:

1. 进程切换

1.1 局部变量的返回

1.2 eip寄存器(程序计数器)

1.3 进程上下文数据的切换

1.4 切出之后是否清空?


前言:

承接上文结尾提到的的进程并发:在一个时间间隔之内,多个进程的代码同时被推进的状态叫做并发。既然要并发访问,所以必定要考虑进程的切换问题,所以本期就来了解一下进程切换的问题:

1. 进程切换

1.1 局部变量的返回

在C语言阶段,我们都知道在一个函数体中创建的变量叫做局部变量,局部变量具有临时性,出了函数体它就自动销毁了。 

当我们设置并且调用一个存在返回值的函数时,为什么我们在函数内定义的栈临时变量会返回给外部呢?它不是出了函数体就自动销毁了吗?

int Add(int x, int y)
{
    int sum = x + y; // 临时变量
    return sum;    // ??
}

int main()
{
    int a = 10, b = 20;
    printf("%d + %d = %d\n", a, b, Add(a, b));
    return 0;
}

这就需要归功于我们计算机内部的寄存器了!

在我们计算机CPU里面存在许多的寄存器,例如:eax、ebx、ecx、edx、ss、ds、cs、gs、fs、bs、ebp、eap、esp、eip等;

在进程创建和进程fork原理这篇中我们提到了return的本质就是写入,所以在栈临时变量返回的时候,是先将临时变量的数据保存在了寄存器eax中,此时出了函数体,就算临时变量自动销毁但是数据保存了下来,此时的寄存器充当的是代码的一个临时空间,所以我们在函数体内部定义的局部变量才可以把数据返回。

1.2 eip寄存器(程序计数器)

我们的程序怎么知道当前的代码运行到哪里了呢?如何进行函数间的跳转呢? 

在CPU里面存在一个寄存器:eip(程序计数器)/pc指针;它可以记录并保存当前代码的下一行代码的地址,从而依次向后执行。 

我们的进程在运行的时候会使用CPU内部的寄存器,同样的我们的进程在运行时会产生各种各样的数据,那么这些数据就会使用寄存器保存下来,此时的寄存器也充当的是一个临时空间,如果我们有多个进程呢?

进程运行的时候在CPU寄存器中形成的临时数据叫做进程的硬件上下文,我们都知道进程具有独立性,每个进程运行的时候在CPU寄存器中形成的临时数据都是不一样的,但是我们CPU寄存器硬件只有一套, 能存的过来吗?

此时需要引入一个概念:寄存器 ≠ 寄存器内容;

再加上CPU的运行速度是非常快的,所以可以保存下!

1.3 进程上下文数据的切换

所有保存的目的都是为了恢复,既然寄存器可以保存进程的上下文数据,所以在我们的进程切出时, 就可以将进程上下文数据保存在我们进程的PCB中,当切入时,又将上一次保存的上下文数据再次加载到寄存器中,这样就完成了进程的上下文数据的切换

保存上下文数据保存的是寄存器中的数据(寄存器的内容),将上下文数据保存在PCB中(简单理解),本质就是将寄存器的内存保存在内存中! 

1.4 切出之后是否清空?

在进程上下文数据切出的时候需要将寄存器的内容清空吗?

答案是不需要的,因为数据可以做到覆盖,假设当前被调度的为①号进程,此时它的时间片到了,需要被剥离,此时它就将寄存器里的内容保存在它的PCB中,然后新的②号进程要被调度,那么这个②号进程就存在两种情况:

1. ②号进程从来没有被调度过,那么此时只需要将eip寄存器指向②号进程,从头开始执行,产生数据时直接覆盖掉原来寄存器里面的内容即可。

2. ②号进程之前被调度过,但是被剥离了,那么此时需要再次调度时,只需要将之前保存在PCB中的上下文数据重新加载到寄存器中,直接覆盖原先的内容即可。

朋友们、伙计们,美好的时光总是短暂的,我们本期的的分享就到此结束,欲知后事如何,请听下回分解~,最后看完别忘了留下你们弥足珍贵的三连喔,感谢大家的支持!      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/634289.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

车间人员作业行为智能检测 AI视觉在生产车间制造中的应用

车间人员作业行为智能检测系统基于神经网络人工智能视觉算法,车间人员作业行为智能检测通过对车间监控摄像头获取的视频图像进行分析和识别,实现了对人员操作行为的智能检测。系统对工人的操作环节进行分解,根据时间、动作标准等方面制定了规…

FSC认证是什么?森林认证的好处是什么?

FSC认证(Forest Stewardship Council,森林管理委员会认证)是一种运用市场机制来促进森林可持续经营,实现生态、社会和经济目标的工具。以下是关于FSC认证的详细介绍: 一、FSC认证包括两个方面: 森林经营认…

Day 38 防火墙技术IPtables

一:防火墙简介 1.简介 ​ iptables其实并不是真正的防火墙,我们可以把他理解为一个客户端的代理,用户是通过iptables这个代理,将用户的安全设定执行到对应的“安全框架”中,这个“安全框架”才是真正的防火墙。这个框…

极光将于2024年6月6日公布2024年第一季度财报

2024年5月23日,中国深圳——中国领先的客户互动和营销科技服务商极光(Aurora Mobile,纳斯达克股票代码:JG)(以下称“极光”或“公司”)宣布将于2024年6月6日周四美国股市开市前公布截至2024年3月…

Web前端开发技术-格式化文本 Web页面初步设计

目录 Web页面初步设计 标题字标记 基本语法: 语法说明: 添加空格与特殊符号 基本语法: 语法说明: 特殊字符对应的代码: 代码解释: 格式化文本标记 文本修饰标记 计算机输出标记 字体font标记 基本语法: 属…

精准键位提示,键盘盲打轻松入门

在说明精准键位提示之前,我们先来看一张图: 这是一张标准的基准键位图,也就是打字时我们双手的8个手指放在基准键位上,在打不同的字母时,我们的手指以基准键位为中心,或上、或下、或左、或右,在…

2024 中青杯高校数学建模竞赛(B题)数学建模完整思路+完整代码全解全析

你是否在寻找数学建模比赛的突破点?数学建模进阶思路! 作为经验丰富的数学建模团队,我们将为你带来2024 长三角高校数学建模竞赛(A题)的全面解析。这个解决方案包不仅包括完整的代码实现,还有详尽的建模过…

Cadence HDL如何拷贝模版项目?

【记录】防止遗忘~ 首先,由于每次绘制原理图都要重新设置各种背景颜色,库路径等等,超级不方便,所以发现可以通过绘制一次模版项目,往后只用拷贝模版项目就可以了。 Cadence HDL新建项目时拷贝模版项目,再…

Vue2全局封装modal弹框

Vue2全局封装modal弹框使用&#xff1a; 一.components下封装 1.index.js import ModalCheck from ./modal-check.vue export default ModalCheck2.modal-check.vue <template><div><Modalv-model"selSingleShow":title"editTitle(convertCa…

二叉树遍历操作详解

目录 一、思路详解 1.1 递归思路 1.2 递归分支图 1.3 递归栈帧图 二、C语言实现 2.1 前序遍历 2.2 中序遍历 2.3 后序遍历 三、查找值为x的结点 3.1 递归思路 3.2 C语言代码 一、思路详解 采用递归的思想解决问题&#xff0c;以高度为3的满二叉树为例。 1.1 递归思…

FBB-Frontiers in Bioengineering and Biotechnology

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 Frontiers in Bioengineering and Biotechnology是专注生物工程和生物技术领域的开放获取期刊。 研究范围涵盖生物材料、生物力学、生物工艺工程、生物安全和生物安保&#xff0c;生物传…

Power BI实现动态度量值

假设有一张销售数据表Sale: 报表上有一个切片器(Slicer)(下拉框样式)&#xff0c; 当选择"第一"时&#xff0c;计算列[FirstSale]与列[Target]的百分比&#xff0c; 选择"第二"时&#xff0c;计算列[SecondSale]与列[Target]的百分比 选择"第三&qu…

Gradle和Maven项目解决Spring Boot Configuration Annotation Processor not configured警告

问题描述 写了一个配置类,加了注解@ConfigurationProperties(prefix = “xxx”) 后一直报警告:Spring Boot Configuration Annotation Processor not configured 意思是 Spring boot 未配置注解处理器 解决过程 出现这个问题后,百度查了解决方式 1.maven项目 maven项目是…

微服务:Ribbon负载均衡与加载时机修改

Ribbon 负载均衡 执行流程 负载均衡策略 调整负载均衡方案&#xff1a; 配置类中&#xff08;全局&#xff09;&#xff1a; // 负载均衡策略Beanpublic IRule randomRule() {return new RandomRule();}yaml配置 userservice: # 给某个微服务配置负载均衡规则&#xff…

第2.6讲 GPIO之MIO控制LED实验程序设计 36:24

对gpio操作 vivado2019.2 vitis 下载【2_领航者ZYNQ之嵌入式SDK开发指南_V2.0】文档 正点原子视频添加链接描述 读取的xsa文件是vivado生成的wrapper&#xff0c;每次生成的都不一样 然后新建一个application ![ ](https://img-blog.csdnimg.cn/direct/4e8c29fc2aff42a6a8…

202472读书笔记|《首先你要快乐,其次都是其次》——快乐至上,允许一切发生

202472读书笔记|《首先你要快乐&#xff0c;其次都是其次》——快乐至上&#xff0c;允许一切发生 《首先你要快乐&#xff0c;其次都是其次》作者林小仙&#xff0c;挺轻松的小漫画&#xff0c;清新的文字。 生而为人&#xff0c;我很抱歉&#xff0c;大可不必。 生活已经很难…

深度学习之基于Pytorch框架的卷积神经网络图像去雨系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在图像处理领域&#xff0c;图像去雨技术一直是一个热门的研究方向。随着深度学习技术的快速发展&am…

使用echarts配置中国地图

使用echarts配置中国地图 首先要下载地图的geoJSON数据&#xff0c;有两个方式下载&#xff0c;一种是去echarts的github资源文件里面&#xff0c;一种是去阿里云的datav网站。 1.1 echarts文档下载中国地图json数据 1.2 阿里云datav 新建项目&#xff0c;新建index.html,下…

【免费】支持向量机回归预测(SVR)的MATLAB实现(含源代码)

支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种常用于分类和回归分析的机器学习算法。虽然SVM最为人熟知的是其分类应用&#xff0c;但它同样适用于回归任务&#xff0c;被称为支持向量回归&#xff08;Support Vector Regression, SVR&#xff09;。以…