Linux 进程 VII 进程地址空间

小夏 科技 更新 2024-02-01

在学习C语言时,我们经常会用到“&”符号,而下表,那么检索到的地址是否与真实的物理地址相对应呢?让我们写一个分步验证。

从上图不难看出,从正文**,到命令行参数环境变量,地址是从低到高,我们来写一段**来验证一下。

从这里不难发现,地址确实是按从高到低的顺序出现的。

那么命令行参数和环境变量呢,我们再写几组**。

从上面的结果不难发现,堆栈和堆的地址是相对的,命令行参数的地址确实在地址空间的顶部。

父进程和子进程同时创建,然后由子进程修改全局变量的结果。

我们发现 g val 的值在 5 秒之前没有变化,并且 g val 地址在父进程和子进程中都是相同的,这没什么好混淆的。

五秒钟后,我们更改了 g val 的值,但这次 g val 的值不同,但地址相同。 那么我们错了,还是计算机错了?显然,计算机肯定不会出错。 此地址是实际存在的物理地址吗?绝对不是,这是计算机给我们的线性地址的虚拟地址。

进程地址空间:那么我们平时说的程序的地址空间是不对的,应该叫进程地址空间,那么怎么理解呢?什么是地址空间:每个进程都有一个大小为 [0,4GB] 的进程地址空间。 那么为什么会这样呢?

父进程在创建子进程时的行为类似于浅拷贝,因此子进程继承了大量父属性,包括页表,页表是映射虚拟地址和物理地址的关系表。 每个进程都有自己的页表。

当子进程想要修改数据时,它会触发写入时复制。 操作系统会介入,为子进程准备一个特殊的空间来存储修改后的数据,保护进程的独立性。 但是,子流程页表对应的虚拟地址未被修改,但子流程页表上的虚拟地址对应的物理地址已被修改。

不仅有虚拟地址和物理地址的映射,还有权限位。 当子进程尝试修改数据时(**默认不修改),会触发写入时复制,造成丢页中断,操作系统会介入判断写入是否合法,当行为合法时,操作系统会为子进程打开物理空间。 然后,子进程写入并修改自己的数据。

无论 C C++ 语言如何,“&&”打印进程的虚拟地址,因此我们上面观察到的地址没有改变。 每个进程都有一个进程地址空间,操作系统将组织这些进程地址空间的管理,如上所述。 简单来说,进程地址空间就是一个特定的数据结构对象。

那么进程地址空间中的属性是什么呢?

根据 Linux 发布的源 **,在任务结构中存在 mm struct 这样的结构,它也在进程控制块中,我们可以看到上面有一些字符,比如 “strart” 和 “end”,不难猜测这是进程地址空间的区域划分, 并且其自身区域内的内存资源可以被进程使用,避免越界的问题。

我们的地址空间没有能力保存我们的**和数据,无论是**还是数据存储在物理内存中。 该过程为我提供了一个表格,其中显示了虚拟地址和物理地址之间的关系。 然后,这会将进程地址空间(虚拟线性)地址转换为物理内存!

2023 让我们翻开这一页:为什么我们需要进程地址空间和页表?

a.将物理内存从表上的无序状态映射到有序状态。

b.使用页表时,进程管理和内存管理是分开的,操作系统决定何时释放内存,然后将物理地址写入页表。 这将进程管理和内存管理分离。

c.地址空间加上页表是保护内存安全的重要手段,进程不会被允许随便访问内存(非法访问可以被页表截获)。

注意:CPU 上有一个 CR3 寄存器,用于存储页表的物理地址。

注意:当我们请求内存时,我们会在进程的虚拟空间中这样做,并且操作系统不会在物理内存中为我们打开物理空间(如果用户尚未尝试写入)。 只有当用户实际尝试在空间上写入时,操作系统才会打开物理空间并在页表上建立映射。 这种将虚拟地址的创建与物理地址的创建分开的行为大大提高了操作系统的效率,因为用户不一定立即使用空间,避免了内存空闲和资源浪费。

相似文章

    Linux 如何关闭进程?

    操作系统通过进程逐一完成任务,进程是管理事务的基本单元。进程有自己独立的处理环境和系统资源。在Linux系统中,如果进程过多,会占用系统资源,从而造成不必要的麻烦,那么我们需要关闭进程,那么Linux是如何关闭进程的呢?这是如何做到的。.检查流程 在关闭进程之前,我们必须首先查看正在运行的进程。我们...

    进程和线程之间的区别

    过程。进程是正在运行的程序 进程驻留在内存中 它是系统执行资源分配和调度的独立单元。每个进程都有自己的存储空间和系统资源。注意 进程 A 和进程 B 的内存是独立的,不共享。线。线程是进程中的单个顺序控制流,也可以理解为执行路径。单线程 进程包含顺序控制流 一个执行路径 多线程 一个进程包含多个顺序...

    八卦过程的生命周期

    都写着重学j a有点大,后期细分题目也不容易,就要细分一下,看看效果。如上所述 该过程是动态的,自然存在一个开始 结束的生命周期。这里以唐子英版 计算机操作系统 MOOC版 为主线的系列记录,方便日后相关讨论。一般来说,每个进程至少会处于就绪 运行 阻塞三种基本状态中的一种,为了满足进程控制块的数据...

    4日,太阳回归,开始变暖过程

    根据国家气候中心的最新消息,今年秋季 月至月 全国平均气温为,为年以来同期最高。月初,也正处于一波变暖中 昨天,北方白天率先迎来变暖,今天和明天,变暖范围逐渐扩大到全国大部分地区,成都也有变暖的迹象。今天白天,全市以多云为主,截至时,最高气温仅为 从今晚到明天白天,天空较厚,西部山区有分散阵雨,部分...

    乌克兰已正式启动加入欧盟的进程

    俄乌战争即将进行年,而最近,双方的战争一直非常僵持,乌克兰方面在成功抵挡住俄罗斯最初的三板斧后,于今年早些时候发动了这场战争。目前,乌军已多次进攻克里米亚和俄罗斯本土,南部的先头部队也已越过第聂伯河。对于俄罗斯来说,很明显,这场战争并没有按照他们预先计划的剧本进行,从为期三天的闪电战到半年的总动员,...