linux----进程地址空间

news2024/11/15 13:41:07


前言


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

一、空间分布

二、栈和堆的特点

(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.coloradmin.cn/o/2152772.html

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

相关文章

16_Python的迭代器

在Python中,迭代是一个非常重要的概念。迭代通常指的是按照某种顺序逐个访问容器中的元素的行为。如使用for循环遍历取值的过程。 可迭代对象(Iterable) 可迭代对象是任何可以返回一个迭代器的对象。简单来说,它是可以逐一返回其…

华为云服务综合实验

一、实验需求 本次实验内容基于华为云平台模拟企业web集群的构建,其中涉及的知识点包括Linux系统知识、nginx服务的安装及配置应用、云数据库 RDS(Relational Database Service,简称RDS)、虚拟私有云vpc、安全组、SFS弹性文件服务器以及负载均衡等。要求学生通过本…

UDS诊断-面试题2

bilibili视频推荐: 车载测试面试题UDS诊断协议,你知道什么是UDS诊断?ECU是什么?刷写ECU_哔哩哔哩_bilibili 总结: 1.汽车诊断UDS含义: 一套统一的诊断服务命令。 2.具体操作流程: 使用电脑…

高通欲收购英特尔:半导体行业的地震?

据《华尔街日报》报道,高通(Qualcomm)已经与陷入困境的英特尔(Intel)接洽,讨论潜在的收购事宜。尽管双方已经就此事进行了交流,但交易的成功与否仍存在诸多不确定性,且若真达成协议&…

java -- 枚举和注解

枚举 枚举介绍 (1)枚举:(enumeration,简写 enum) (2)枚举是一组常量的集合 (3)枚举属于一种特殊的类,里面只包含一组有限的特定的对象 枚举的两…

Nginx静态资源优化、压缩、缓存处理

一、静态资源优化配置语法 Nginx对静态资源如何进行优化配置。这里从三个属性配置进行优化: sendfile on; tcp_nopush on; tcp_nodeplay on; (1)sendfile,用来开启高效的文件传输模式。 语法sendfile on |off;默认值sendfile …

YOLOv9改进,YOLOv9主干网络替换为RepViT (CVPR 2024,清华提出,独家首发),助力涨点

摘要 轻量级视觉变换器(ViTs)在资源受限的移动设备上表现出优越的性能和较低的延迟,相比之下轻量级卷积神经网络(CNNs)稍显逊色。研究人员发现了许多轻量级 ViTs 和轻量级 CNNs 之间的结构联系。然而,它们在块结构、宏观和微观设计上的显著架构差异尚未得到充分研究。在…

Linux 磁盘清理重新格式化挂载脚本及问题解决

Linux 磁盘清理重新格式化挂载脚本:diskformat.sh #!/bin/bash for i in {1…8} do umount /data0$i done PIDARRAY() for i in a b c d e f g h do parted -s /dev/sd i m k l a b e l g p t p a r t e d − s / d e v / s d i mklabel gpt parted -s /dev/sd im…

序列化方式二——JSON之fastjson

fastjson&fastjson2(版本:1.2.83_noneautotype) 扩展点 Fastjson通过其丰富的扩展点显著增强了用户定制序列化和反序列化行为的灵活性,完美契合了实际开发中的多样化需求。在SpringBoot与SpringCloud的集成环境中,开发者能够利用Seriali…

Linux top命令详解与重点内容说明

文章目录 重点说明基本信息进程(任务)信息cpu占用信息%Cpu(s)内存信息交换内存信息每列含义说明交互命令多窗口模式颜色配置命令参数 重点说明 top命令非常强大,也非常复杂,很难面面俱到,也没有必要,这篇文章的目的是介绍重点&am…

Apache Doris 实践

Apache Doris 实践 官方使用指南:https://doris.incubator.apache.org/zh-CN/docs/install/source-install/compilation-with-docker/ 手动安装 下载二进制安装包https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.1.5-bin-x64.tar.gz …

企业搭建VR虚拟展厅,如何选择搭建平台?

选择虚拟展厅搭建平台时,需要综合考虑多个因素以确保平台能够满足您的具体需求并提供高质量的展示效果。以下是一些关键的选择标准: 1. 技术实力与创新能力 技术平台选择:确保平台支持虚拟现实(VR)、增强现实&#xf…

http免费升级https教程

将HTTP免费升级至HTTPS的详细教程涉及获取SSL证书、配置服务器和测试HTTPS连接等关键步骤。 以下是具体介绍: 获取SSL证书:选择提供免费SSL证书的服务,如JoySSL。在证书提供商的网站上申请免费SSL证书注册时填写注册码230920,获取…

如何优化前端页面的 AJAX 请求性能并避免冲突

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

MBR60100PT-ASEMI适配变频器专用MBR60100PT

编辑:ll MBR60100PT-ASEMI适配变频器专用MBR60100PT 型号:MBR60100PT 品牌:ASEMI 封装:TO-247 安装方式:插件 批号:最新 最大平均正向电流(IF):60A 最大循环峰值…

Redis基础数据结构之 Sorted Set 有序集合 源码解读

目录标题 Sorted Set 是什么?Sorted Set 数据结构跳表(skiplist)跳表节点的结构定义跳表的定义跳表节点查询层数设置 Sorted Set 基本操作 Sorted Set 是什么? 有序集合(Sorted Set)是 Redis 中一种重要的数据类型,…

Wpf使用NLog将日志输出到LogViewer

1 LogViewer LogViewer是通过UDP传输的高性能实时log查看器。 具有一下特性: 通过UDP读取日志通过文件导入日志导出日志到一个文件中排序、过滤(日志树,日志等级)和查找突出显示搜索文本从UPD接收日志时忽略IP地址列表多接收器支…

灾备技术演进之路 | 虚拟化无代理备份只能挂载验证和容灾吗?只能无代理恢复吗?且看科力锐升级方案

灾备技术演进之路系列 虚拟化备份技术演进 摆脱束缚,加速前行 无代理备份仅能挂载/恢复验证吗? ——科力锐极简验证演练无代理备份来了 无代理备份无法应对平台级故障吗? ——科力锐应急接管无代理备份来了 无代理备份仅能同平台挂载吗&a…

Java笔试面试题AI答之单元测试JUnit(7)

文章目录 37. 请列举一些JUnit扩展 ?1. 参数化测试2. 条件测试执行3. 临时目录4. 时间测试5. 重复测试6. 前置/后置条件7. Mockito8. Spring Test9. JUnit Vintage10. Testcontainers11. 自定义注解和扩展12. 测试监听器(TestListener 和 RunListener&am…

python中ocr图片文字识别样例(二)

一、说明 本次解决图片相关出现中文乱码问题,属于上篇文章的优化,前提条件依赖上篇文章的包,当然ocr的具体应用场景很多,根据自身需求进行调整 二、具体实现 2.1 代码实现: # -*- coding: utf-8 -*- import easyoc…