linux----进程地址空间


前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、空间分布

二、栈和堆的特点

(1)栈堆相对而生,堆是向上增长的,栈是向下增长的。

验证:堆是向上增长的

这里我们看到申请的堆,依次进行申请,堆的地址是向上增长的。

栈:向下增长(32位机器和64位机器)

验证:

这里为什么说要32位机器。对64位机器来说,栈是向下增长的,这个说法也许是不正确的。

至于为什么,这个为什么?64位对内存的分布进行了改进。下面打印的结果和32位地址结果相反


三.物理内存和虚拟内存

上面我们提到内存的空间分布是真实的物理内存吗?

我们创建子进程,父子进程代码共享,当一方发生写入时,就会发生写实拷贝,父子进程数据独立。

 这里我们发现,父子进程打印的值是不同的,这里我们可以理解,但是地址为什么是一样的,一个内存地址一样,值不一样,说明这个不是真正的物理内存,这个是虚拟地址。

1.地址空间和区域划分

我们知道地址空间的大小是4GB,操作系统将这个4GB根据每个进程的需要进行分配,每个进程都对所分配的空间独立使用权,比如栈,堆中的一部分。地址空间就是大蛋糕,区域划分就是分蛋糕,分配的对象就是进程。

操作系统要对进程地址空间进行管理,在linux中地址空间就是一个内核数据结构:struc mm_struct{}。进程的task_struct里有个指针,指向这个struct mm_struct{}.

这个里面描述了,可以使用的地址空间的范围。起始地址和结束地址之间的都是可以被使用的区域。

虚拟地址如何转换为物理内存?通过页表进行映射,这个过程是操作系统帮我们做的。

2.为什么要有虚拟地址空间

1.可以让申请的物理内存分布,通过虚拟地址让无序变为有序。

2.可以有效的进行安全检查,页表中其实还有权限字段,规定了数据是否可读可写。字符常量区权限就是只读,如果发生修改的转化,编译器识别到就会显示错误。

 3.将进程管理和内存管理进行解耦。

内存管理是操作系统帮我们做的,申请内存(分配),填充数据或者加载程序(是否有内容)。一个进程如果要对物理内存进行访问,首先要通过虚拟地址,在cpu中寄存器CR3中存储者页表的物理地址,硬件MMU进行虚拟到物理转化的过程中,先要通过页表字段查看内存是否分配和内存是否有内容,没内容或者被分配,这个进程就会被停止访问内存,将操作权限转交给操作系统,这时操作系统就会进行内存的分配和填充数据或者程序,将虚拟内存映射到分配的物理内存,这个过程也叫缺页中断,分配填充完,进程就可以继续访问。进程不参与内存管理,操作系统管理内存分配。

总结:一个进程有自己的页表,自己的空间地址,有自己的task_struct.进程的独立性通过页表的虚拟地址映射物理地址来体现。进程的切换也是不影响其他进程,因为进程的上下文数据在切换时就会被进程带走包括寄存器的内容,等到进程重新被调度,恢复上下文数据包括寄存器中的进程原来的内容。

3.如何理解父子进程变量地址相同而值不同

fok()创建子进程,子进程要以父进程为模板拷贝页表,地址空间。如果一方发生写入的时候,操作系统就会修改页表重新将物理内存映射到虚拟地址上,这也为什么上面的同一个变量打印的虚拟地址是相同的,值是不一样的。真实的物理地址我们是看不到,c++/或者c,我们可以看到的都是虚拟地址。

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

springMvc的初始配置

基础文件结构(toWeb插件) 1.导入对应依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"ht…

【软考】循环冗余校验码

目录 1. 说明2. CRC 的代码格式3. 例题3.1 例题1 1. 说明 1.循环冗余校验码(Cyclic Redundancy Check&#xff0c;CRC)广泛应用于数据通信领域和磁介质存储系统中。2.它利用生成多项式为k个数据位产生&#xff0c;r个校验位来进行编码&#xff0c;其编码长度为 kr。3.循环几余…

如何成为信息安全等级测评师?具体有哪些要求?

给大家的福利&#xff0c;点击下方蓝色字 即可免费领取↓↓↓ &#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 文章目录 前言 信息安全等级测评师 定义与作用&#xff1a;证书颁发&#xff1a;能力要求&#x…

【React】(推荐项目)一个用 React 构建的 CRUD 应用程序

推荐项目&#xff1a;CRUD 应用示例 在本篇文章中&#xff0c;我想向大家推荐一个非常实用的项目&#xff1a;CRUD 应用示例。这个项目展示了如何使用现代技术栈创建一个基础的增删改查&#xff08;CRUD&#xff09;应用&#xff0c;非常适合用于学习和实践后端开发技能。 适…

【2024华为杯数学建模研赛赛题已出(A-F题)】

华为杯2024年中国研究生数学建模竞赛A-F题已公布 A题 B题 C题 D题 E题 F题

骨传导耳机怎么选?深扒2024五款热门骨传导耳机!

耳机在我们的日常生活中渐渐变得不可或缺&#xff0c;早晨出门、通勤、工作&#xff0c;甚至睡觉时&#xff0c;它们总是陪伴在侧。尽管我们都知道长期使用耳机会对听力造成一定影响&#xff0c;但骨传导耳机的出现为我们提供了更为安全和卫生的选择。这种耳机的设计使耳朵保持…

其他比较条件

使用BETWEEN条件 可以用BETWEEN范围条件显示基于一个值范围的行。指定的范围包含一个下限和一个上限。 示例&#xff1a;查询employees表&#xff0c;薪水在3000-8000之间的雇员ID、名字与薪水。 select employee_id,last_name,salary from employees where salary between 3…

泛微E9开发 创建自定义浏览框,关联物品管理表【1】

创建自定义浏览框&#xff0c;关联物品管理表【1】 1、自定义浏览框1.1 概念1.2 前端样式 2、创建物品管理表2.1 新建建模表单操作方法2.2 物品管理表 3、创建浏览按钮 1、自定义浏览框 1.1 概念 自定义浏览框可以理解为是建模引擎中的表与表关联的一个桥梁。比如利用建模引擎…

菜鸟也能轻松上手的Java环境配置方法

初学者学习Java这么编程语言&#xff0c;第一个难题往往是Java环境的配置&#xff0c;今天与大家详细地聊一聊&#xff0c;以便大家能独立完成配置方法和过程。 首先&#xff0c;找到“JDK”&#xff0c;点击“archive”&#xff1a; 向下滑&#xff0c;在“previous java rel…

小白src挖掘 | 记某证书站的虚拟仿真实验平台

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【edusrc漏洞挖掘】 【VulnHub靶场复现】【面试分析】 &#x1f389;欢迎关注…

017_FEA_CSG_in_Matlab新的统一有限元分析工作流之2D几何

Matlab新的统一有限元分析工作流 从2023a开始&#xff0c;Matlab提供了一个统一有限元分析工作流&#xff08;UFEAW&#xff0c;unified finite element analysis workflow&#xff09;。 这个新的工作留提供一个统一的接口来求解三类问题&#xff0c;并且可以用同一套数据随…

并查集(上)

并查集简要介绍&#xff1a; 我们先讲并查集的一般使用场景&#xff0c;之后再讲并查集的具体细节以及原理。 并查集的使用一般是如下的场景&#xff1a; 一开始每个元素都拥有自己的集合&#xff0c;在自己的集合里只有这个元素自己。 f i n d ( i ) find(i) find(i)&#…

数据结构之算法复杂度

目录 前言 一、复杂度的概念 二、时间复杂度 三、大O的渐进表示法 四、空间复杂度 五、常见复杂度对比 总结 前言 本文主要讲述数据结构中的算法复杂度 一、复杂度的概念 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏…

python源代码编译exe 防止反编译的问题

1&#xff09;使用pyinstaller 打包为exe, 记住是版本是5.*&#xff0c;我用的是5.13.2 &#xff0c;不能是6.* 这是第一步。 pyinstaller -F -i d:\whs.ico packer.py -w 2&#xff09;使用pyarmor 再次加密,我使用的版本是8.3.11&#xff0c;不是7.*&#xff0c;这是第二步…

摩托车骑行行为检测系统源码分享

摩托车骑行行为检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…

Cursor Rules 让 Cursor AI 代码生成更智能、更高效,效率再次飞升!

最近,AI 代码生成工具越来越火,比如 Cursor AI 编辑器。很多开发者已经开始使用它来自动生成代码,以提高工作效率。不过你有没有发现,有时候 AI 自动生成的代码并不总是符合最佳实践?比如变量命名不够规范、代码风格不统一,或者生成的代码逻辑不够清晰。这些问题有时让人…

c# 线程等待变量的值符合条件

在C#中&#xff0c;如果你想让一个线程等待直到某个变量的值满足特定条件&#xff0c;你可以使用ManualResetEvent或者AutoResetEvent来实现线程间的同步。以下是使用AutoResetEvent实现的一个简单例子&#xff1a; 在这个例子中&#xff0c;同时实现了如何让static函数访问非…

闲鱼ip地址在哪就是人在哪吗

在数字化时代&#xff0c;IP地址作为网络设备的唯一标识&#xff0c;常被用于追踪用户的地理位置。然而&#xff0c;对于闲鱼这样的二手交易平台&#xff0c;用户的IP地址是否真实反映了其所在地&#xff0c;却是一个值得深入探讨的问题。本文将围绕这一话题展开&#xff0c;带…

单卡3090 选用lora微调ChatGLM3-6B

环境配置 Python 3.10.12 transformers 4.36.2 torch 2.0.1 下载demo代码 在官方网址https://github.com/THUDM/ChatGLM3/blob/main/finetune_demo 下载demo代码cd 进入文件夹 pip install -r requirements.txt 安装一些包 基本知识 SFT 全量微调: 4张显卡平均分配&#…

昂科烧录器支持ST意法半导体的电可擦除可编程存储器M95128-DFDW

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中ST意法半导体的电可擦除可编程存储器M95128-DFDW已经被昂科的通用烧录平台AP8000所支持。 M95128-DFDW是电可擦除可编程存储器&#xff08;EEPROM&#xff09;通过SPI总线进行…