【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中的上下文数据重新加载到寄存器中,直接覆盖原先的内容即可。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI副业教程】日赚5000+涨粉3000,自媒体新玩法!

​StartAI是一款专为设计师打造的基于Photoshop的AI工具,它提供了一系列强大的AI功能如:文生图、生成相似图、线稿上色、无损放大、局部重绘、扩图、艺术融合、提示词、智能擦除、风格选择等。https://www.istarry.com.cn/?sfromHGtsRq 你们能想象吗&a…

【Android安全】AOSP版本对应编号| AOSP版本适配Pixel或Nexus型号 | 驱动脚本下载地址

AOSP版本对应编号 https://source.android.com/docs/setup/about/build-numbers?hlzh-cn#source-code-tags-and-builds 例如android-8.1.0_r1 对应的编号是OPM1.171019.011 可以适配Pixel 2 XL AOSP驱动脚本下载 编译AOSP时,需要Google的驱动,后面才…

【分享】3种方法取消PPT的“限制保护”

PPT如果设置了有密码的“只读方式”,每次打开PPT,都会出现对话框,提示需要输入密码才能修改文件,否则只能以“只读方式”打开。 以“只读方式”打开的PPT就会被限制,无法进行编辑修改等操作。那如果后续不需要“限制保…

SpringBoot+layuimini实现角色权限菜单增删改查(layui扩展组件 dtree)

角色菜单 相关组件方法效果图代码实现资源菜单树组件实现权限树方法js这里我先主要实现权限树的整体实现方法,如果是直接查看使用的话可以只看这里! 后端代码Controlle层代码Service代码及实现类代码Service代码ServiceImpl代码 resourceMapper 代码role…

从零开始傅里叶变换

从零开始傅里叶变换 1 Overview2 傅里叶级数2.1 基向量2.2 三角函数系表示 f ( t ) f(t) f(t)2.2.1 三角函数系的正交性2.2.2 三角函数系的系数 2.3 复指数函数系表示 f ( t ) f(t) f(t)2.3.1 复指数函数系的系数2.3.2 复指数函数系的正交性 2.4 傅里叶级数总结 3 傅里叶变换…

如何将手机中的音乐转移到 SD 卡上?轻松传输音乐

概括 如何将音乐从手机转移到 SD 卡?我们的智能手机可以充当个人点唱机,因此有效管理我们的音乐库变得至关重要。无论您是存储空间不足还是只是想整理您的音乐收藏,将音乐从手机传输到 SD 卡都是一个实用的解决方案。 在本指南中&#xff0…

二叉树的递归实现及例题

目录 遍历方式 示例 原理 前序遍历示例 二叉树的节点个数 原理 层序遍历 原理 这样做的目的是 判断完全二叉树 例题 ​编辑 思路 代码 遍历方式 二叉树的遍历方式可分为: 前序遍历:先访问根,访问左子树,在访问右子…

浏览器的下载行为基本原理

浏览器解析 在使用浏览器访问某些资源时,有些资源是直接下载有些资源是直接打开。例如前端的html,xml,css,图片等资源都是直接打开,而txt,excel等文件是直接下载。那么如何控制访问一个资源时是下载文件还…

App Inventor 2 如何接入ChatGPT:国内访问OpenAI的最佳方式

如何接入OpenAI 由于国内无法访问OpenAI,KX上网可选大陆及香港(被屏蔽)以外才行。因此对于大多数人来说,想体验或使用ChatGPT就不太便利,不过App Inventor 2 为我们提供了相对便利的一种方式,即“试验性质…

C# run Node.js

C# run nodejs Inter-Process Communication,IPC Process类 启动Node.js进程,通过标准输入输出与其进行通信。 // n.js// 监听来自标准输入的消息 process.stdin.on(data, function (data) {// 收到消息后,在控制台输出并回复消息console.l…

连锁服装门店补货一般怎样的流程

连锁服装门店的补货流程通常包括以下四个关键步骤: 分析销售数据和库存情况 首先,连锁服装门店需要定期分析销售数据和库存情况。通过销售数据可以了解各款商品的销售情况、热销款式和滞销款式等信息。同时,需要检查每个门店的库存情况&…

06Django项目--用户管理系统--新增

对应视频链接点击直达 06Django项目--用户管理系统--新增 对应视频链接点击直达模块构思a,用户信息的构成(表结构设计)b,models里面的设计 用户新增页面设计a,先在模版里面选一个新增的样式b,然后删除该页面…

win32-鼠标消息、键盘消息、计时器消息、菜单资源

承接前文: win32窗口编程windows 开发基础win32-注册窗口类、创建窗口win32-显示窗口、消息循环、消息队列 本文目录 键盘消息键盘消息的分类WM_CHAR 字符消息 鼠标消息鼠标消息附带信息 定时器消息 WM_TIMER创建销毁定时器 菜单资源资源相关菜单资源使用命令消息的…

网络原理3

运营商路由器,也可以把它当做一个NAT设备它就会对中间经过的数据包,进行网络地址转换当内网设备经过运营商路由器访问外网的时候就会把IP数据包中的源ip,替换成它自己的ip. 我的电脑要发送一个数据给cctalk服务器此时,我的电脑上就…

论文精读--InstructGPT

模型效果取决于数据效果,但在精细度上控制不够,只是大力出奇迹,这样有很大的问题: (1)数据量太多或者没有这方面的数据,模型学不会怎么办 (2)安全性问题,模…

大模型的实践应用24-LLaMA-Factory微调通义千问qwen1.5-1.8B模型的实例

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用24-LLaMA-Factory微调通义千问qwen1.5-1.8B模型的实例, LLaMA-Factory是一个专门用于大语言模型微调的框架,它支持多种微调方法,如LoRA、QLoRA等,并提供了丰富的数据集和预训练模型,便于用户进行模型微调。通义千问…

【Java】全套云HIS(医院信息管理系统)可对接医保 采用云端SaaS模式部署

【Java】全套云HIS(医院信息管理系统)可对接医保 采用云端SaaS模式部署 SaaS 模式的云 HIS 更适用于基层医疗机构,而传统的 HIS 已经在大中型医疗机构大规模应用。过去,国内的大中型医疗机构投入了大量的资金来进行信息化系统建设…

基于python实现搜索的目标站点内容监测系统

基于python实现搜索的目标站点内容监测系统 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat、Maven 系统功能实现 登录页面 后台的登录一般是为了管理员的管理方便进行一个用户权限的验证。也是为管理员提供的唯…

mysqldump提示Using a password on the command line interface can be insecured的解决办法

mysql数据库备份一句话执行命令 mysqldump --all-databases -h127.0.0.1 -uroot -p123456 > allbackupfile.sql 提示如下提示 [rootyfvyy5b2on3knb8q opt]# mysqldump --all-databases -h127.0.0.1 > allbackupfile.sql mysqldump: Couldnt execute SELECT COLUMN_NA…

Stable Diffusion vs Midjunery的区别和选择

现在网上最多的关于AI绘画的工具莫过于stable diffusion(sd)和midjunery(mj)了,最近尝试了一番,稍作总结吧算是。我们对于工具的使用通常考虑的无非就是好不好用,效果如何,当然还有费…