Linux第十四节 — 环境变量和进程地址空间

一、并发和并行

首先,我们引入两个概念:

  • 并发:多个进程在多个CPU下分别运行,称为并发;
  • 并行:多个进程在1个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称为并行;

接下来我们介绍一种并行情况下,CPU基于进程切换和时间片轮转的调度算法:

        每个进程执行固定的时间片的时间(通常为10ms~100ms),此时若该进程未被执行完,则会被强制挂起,然后到等待队列当作排队!

        此时我们会有一个疑问:如果该进程的优先级为60,那么执行完时间片后此时再次排队还是轮到它,会被一直调用吗?

        答案:不会!因为对于进程调用结束后,此时会去另一个等待队列当中排队,当运行队列中所有的进程都被执行结束后,才会再次调用该进程!

CPU当作存在不少的寄存器!

接下来我们拓展两个方面的问题:

  • 为什么函数的返回值,会被外界拿到呢?

实际上我们是将返回值保存到寄存器中,然后再从寄存器中取数据!

在32位环境下,返回值通常存放在eax寄存器,64位则是eax和edx。

  • 系统如何得知我们的进程当前执行到哪行代码了?

这里因为CPU内有程序计数器pc,也叫eip:作用是记录当前进程执行指令的下一行指令的地址!

程序计数器本质是一个存储指令地址的寄存器,它始终指向下一条待执行的机器指令地址。

接下来我们介绍一些常见的寄存器:

这些寄存器的作用是什么?

        答案:提高效率,将进程相关的高频数据存放到寄存器中!(距离CPU越近,存储的效率越高!)

也就是说寄存器存放的是和进程相关的数据!(这些数据可能随时被CPU进行修改或者访问的!)

因此,可以得出相关结论:CPU中存放的是进程的临时数据,也就是进程的上下文!

什么是上下文?(deepseek)

进程的上下文数据主要包括CPU寄存器中的临时值,具体分为:

  • 通用寄存器(如eax、erx):存储运算产生的中间数据 。
  • 指令相关寄存器
    • eip(扩展指令指针):指向下一条待执行指令的地址(即程序计数器PC) 。
    • ir(指令寄存器):暂存当前正在执行的指令 。
  • 状态寄存器(如PS程序状态字):记录处理机的硬件状态(如中断标志、运算结果状态等)。
  • 堆栈指针(如ESP):指向当前栈顶位置 。

此外,上下文还包含与进程相关的内存映射信息(如页表)、打开的文件描述符等系统级数据。

        需要注意:进程在从CPU离开的时候,要将自己的上下文数据保存好,甚至带走!(否早下一个进程来执行的时候会将代码和数据进行覆盖!)

保存的目的都是为了将来再次调用的时候恢复数据!

因此进程切换的时候包含两个重要步骤:

  • 保存上下文;
  • 回复上下文;

那么上下文是保存到哪里的?

实际上进程的上下文是保存在对应的PCB里面!(暂时可以这样认为)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一道秘制的小菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值