进程地址空间(初)

news2024/9/27 23:26:43

1.遗留问题 

前面在fork创建子进程的内容中遗留了一个问题,一个 变量既等于0又大于0.

2.地址空间的概念 

(仅有栈区从高地址处向低地址处) 

(堆区和栈区之间有一大块的镂空,这里暂时不作介绍)

使用代码验证上图的大致结构

  

在我们使用static修饰局部变量 时,它处于字符常量区

 在我们使用fork创建子进程的时候我们观察到这样一个现象

变量g_val 的同一个地址指向了两个不同的值

 由此我们可以推出,变量的地址并不是物理地址,而是虚拟地址

3.页表

从而,我们通过程序地址空间,引出页表的概念。 

 页表可以通过虚拟地址(即语言层面上的地址)找到内存中的物理地址,即一种映射关系,在我们创建子进程的过程中,子进程的代码继承自父进程,从而它的虚拟地址同父进程一样,但是这个虚拟地址指向的物理地址却可以不一样。

子进程进行写时拷贝是由操作系统自动完成的,本质是重新开辟空间,但是虚拟地址是0感知,物理地址的改变并不会影响它。

4.知识补充 

(内存和cpu都有短暂的数据存储能力) 

在32位计算机中,有32位的地址和数据总线 -----每一根总线根据电脉冲的强弱,在软件层面以二进制的1和0表示,通过这种表示,硬件可以访问内存中相应的位置。

5.地址空间究竟是什么? 

什么叫做地址空间    ---- 地址总线排列组合形成的地址范围[0,2^32]

所谓的地址空间本质描述的是一个进程可视范围的大小,即一个进程可以看到多大的内存

6.如何理解地址空间上的区域划分?

地址空间内一定要存在各种区域划分,对线性地址规定开始和结束的地址start和end即可。在这之间的一个个地址都是该区域可用的地址,如栈区地址,堆区地址等等。

同时,程序的地址空间也是内核的一个数据结构对象,类似pcb,地址空间也是要被操作系统管理的,先描述,再组织

再taks_struct中存有struct mm_struct的物理地址可以直接找到struct mm——struct

struct mm struct里面有对于区域的划分 

也就是因为这样,系统可以很容易的判断我们的访问是否越界 

7.我们为什么要有地址空间?

1.使进程可以使用统一的视角看待内存,每一个进程启动时都会有一个进程地址空间,因为一个进程不可能占满所有,所有每一个进程看到的内存都是4GB,当它去申请的时候,系统就给它分配空间。

2.增加进程虚拟地址空间可以让我们访问内存的时候,增加一个转换的过程,在这个转化的过程中,可以对我们的寻址请求进行审查,所以一旦异常访问,它会被直接拦截,该请求不会到达物理内存,可以起到保护物理内存的作用

3.因为地址空间和页表的存在,进程管理模块和内存管理模块可以进行解耦合

我们继续扩大页表的概念并加入cpu。

task_struct中存有页表的起始地址,cpu中有一个cr3寄存器可以储存该进程的页表信息,(页表信息也属于上下文),因此当需要访问内存的时候,cpu可以通过cr3寄存器找到该进程的页表,再通过虚拟地址去找到物理地址。

在页表条目中还有一个标志位,会规定该地址所对应的代码或数据是可读还是可写。

众所周知,linux中还有一个挂起状态,那我们如何知道代码和数据是否以及被加载到内存呢?我们继续扩大页表的概念 

这个标志位可以使用位图,或者说以0 1来表示对应的代码是否已经被加载到内存 

进程的虚拟地址可以都存放在页表中,但是物理地址可以不存放,这时候我们将其一个标志位改为0。

当我们要访问内存时,我们先找到虚拟地址,再看其标志位,当标志位为1,那么我们直接访问对应的物理内存。

当标志位为0,系统会先申请一块空间,将可执行程序剩下的代码和数据存放到内存中,并将它的物理地址填充。再继续进行访问内存,这个过程是自动的。

上面这一中断的情况被称之为缺页中断

缺页中断还包括我们之前学习的写时拷贝,在子进程想修改从父进程处拷贝来的数据时,该地址对应的数据为只读,系统也会再申请一块空间,在内存中放置子进程修改的数据,再填充物理地址

8.知识补充

现代操作系统几乎不做浪费时间和空间的操作

操作系统对于大文件可以进行分批加载 

同时因为cpu性能 时间片等的影响,cpu短期之内可能跑不完已经加载到内存里的代码和数据,因此操作系统采用的是惰性加载的方式,几乎是用多少给你多少,例如我们有500M的数据我们可以把页表的虚拟地址全部填好,但是不用将所有的物理地址也填好。

9.进程具有独立性

1.因为进程具有它们各自独立的内核数据结构

2.由于页表的存在,每一个进程的代码和数据就解耦合了,他们或许有相同的虚拟地址,但是这些虚拟地址可以映射不同的物理地址。同时因为这种映射性,虚拟地址可以以连续的形式呈现给进程,但是物理地址可以乱序。

10.进程的组成

现在我们对于进程的理解有扩大了一些,现在我们意识到

进程 =  内核数据结构(task struct && mm struct && 页表)+ 数据与代码

11.进程的切换

我们切换进程需要切换进程的pcb,mm struct ,页表

但是只要我们切换了pcb,它可以找到对应的mm struct, 又因为页表的地址属于进程的上下文,当切换时我们将进程的上下文在cpu中恢复时,我们可以找到对应的页表。

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

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

相关文章

项目实施案例:金蝶云星空对接泛微OA

摘要 在企业信息化中,某电子行业集团公司面临着跨语言、跨系统的业务流程管理和数据同步的挑战。本项目通过一系列的技术实施解决方案,成功地解决了这些问题,提高了企业的运营效率和数据管理的准确性,本此分享满满的干货&#xff…

RTK_ROS_导航(2):卫星图查看

目录 1. 基于MapViz的卫星图查看 1. 基于MapViz的卫星图查看 安装 # 源码安装 mkdir -p RTK_VISION/src cd RTK_VISION/src git clone https://github.com/swri-robotics/mapviz.git --branchmelodic-eol sudo apt-get install ros-$ROS_DISTRO-mapviz ros-$ROS_DISTRO-mapviz-…

django基于个人BMI的健康饮食食谱推荐系统-计算机毕业设计源码26624

目 录 1 绪论 1.1 研究背景和意义 1.2国内外研究现状 1.3论文结构与章节安排 2 系统分析 2.1 可行性分析 2.1.1技术可行性分析 2.1.2 操作可行性分析 2.1.3经济可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4系统流程分…

科技日报社激发数据要素价值,树立媒体行业数字化转型标杆

更多案例研究与行业报告,请前往爱分析官网 媒体行业企事业单位在数据要素领域得天独厚,日积月累的新闻报道、媒资素材、读者反馈和市场研究,沉淀出属于它们的“数据金矿”。 但是,多数相关单位尚未重视和发挥数据要素价值&#…

微客云外卖霸王餐系统怎么样?怎么运营外卖霸王餐

微客云霸王餐系统是一个旨在促进本地生活服务的创新平台,特别针对餐饮业,它确实支持商家入驻。该系统设计用于帮助商家通过组织霸王餐活动来提高店铺的知名度、吸引新顾客并增加订单量。商家不仅能够发布免费或优惠的餐饮体验活动,还能利用系…

什么是ThingsKit物联网平台?

在信息化时代的浪潮中,物联网(IoT)作为新一代信息技术的核心,已经逐渐渗透到我们生活的方方面面。而在这个大背景下,Thingskit物联网平台以其独特的技术优势和应用场景,成为了物联网领域的一颗璀璨明星。本…

勿传!自己消化!摆脱内耗最好的方式:读书、运动、走出去——早读(逆天打工人爬取热门微信文章解读)

你知道为什么一个选股策略用的人多了就失效了吗 引言Python 代码第一篇 洞见 摆脱内耗最好的方式:读书、运动、走出去第二篇 我要琢磨出点什么了结尾 引言 我发现一个规律 就是周一大家的学习情绪比较高 因为我看周一文章的点赞和收藏总数远远大于其他几天的 这有点…

请事假不批直接缺勤公司将员工开除!公司竟然败诉!

员工有请假的权利,同时,公司也有不批的权力,一般来说,病假的话,公司都会批,但如果说事假,公司会看员工请假理由情况去批或者不批。这里就有一个案例,员工请事假公司不批,…

智能未来,程易科技引领AI新纪元——全新云智AI人工智能平台产品发布

在数字化浪潮的推动下,人工智能(AI)正以前所未有的速度改变着我们的世界。从自动驾驶汽车到个性化推荐系统,从智能客服到医疗诊断,AI的应用场景日益广泛,其背后的技术支撑也变得越来越重要。在这个背景下&a…

【前端】面试八股文——HTML代码的第一行的意义

深度剖析HTML代码的第一行:DOCTYPE声明的作用与意义 在现代Web开发中,HTML文档的第一行通常包含一个DOCTYPE声明(文档类型声明)。虽然这个声明看似简单,但它在网页的渲染和解析过程中起着至关重要的作用。本文将深入探…

点亿点计划Web3.0广告平台即将发射Clicks科力币

点亿点计划Web3.0广告平台即将发射Clicks科力币 我们很高兴地宣布,点亿点计划Web3.0广告平台即将发射Clicks科力币!科力币(Clicks)是Clicks X Web3.0多功能应用的治理代币,未来将为代币持有人带来巨大的广告收入。 …

解决vite 断点调试定位不准确问题

问题:vite构建时,控制台报错行数等信息定位不准确或debugger断点调试定位不准确 解决:F12后打开设置面板,把“JavaScript源代码映射”去掉可临时解决,如需永久解决需升级vite到最新版 还有一种: 参考&…

nvidia driver和cuda版本较低,ubuntu系统更新nvidia驱动的方法(对于小白最快最最保险的方法)

问题描述: 系统:ubuntu22.04LTS 这两天安装另一个低版本的pytorch环境,提示我的cuda版本很旧,然后运行程序时候甚至直接报错,如下所示: .local/lib/python3.10/site-packages/torch/cuda/__init__.py&quo…

【C++ STL】模拟实现 vector

标题:【C STL】模拟实现 vector 水墨不写bug (图片来源于网络) 正文开始: STL中的vector是一个动态数组,支持随机访问,可以根据需要来扩展数组空间。 本项目将实现vector的部分常用功能,以增强…

veriloga要怎么在candence中编译和加密?

从编译器的角度来说,我在ADS中可能就是直接用notepad编写,然后生成检查,它会有提示成功或报错的信息。但是对比下来,我发现candence的编译器更加方便编写va,所以把运行成功的步骤记录下来,防止遗忘。 首先&#xff0c…

抖音机构号授权矩阵系统源码功能和优势全解析

抖音机构号授权矩阵系统源码是一款功能强大的工具,可以帮助机构号实现更高效的内容创作和发布。以下是该系统的功能和优势: 智能创作:系统内置AI技术,可以自动生成创作文案,大大减少了创作者的文案撰写时间和精力成本。…

决策树算法简单介绍:原理和方案实施

决策树算法介绍:原理和方案实施 决策树(Decision Tree)是一种常用的机器学习算法,它既可以用于分类任务,也可以用于回归任务。由于其直观性和解释性,决策树在数据分析和模型构建中得到了广泛的应用。本文将…

kubernetes集群如何更改所有节点IP

kubernetes集群如何更改所有节点IP 情景描述更换IP前的准备工作更换IP后的工作--master更换IP后的工作--node节点重新部署之前那些服务 情景描述 我有三台服务器,想要将其组成了一个kubernetes集群,在部署之前,我就对其进行了固定IP的操作&a…

使用OpencvSharp实现人脸识别

在网上有很多关于这方面的博客,但是都没有说完整,按照他们的博客做下来代码都不能跑。所以我就自己写个博客补充一下 我这使用的.NET框架版本是 .NetFramework4.7.1 使用Nuget安装这两个程序包就够了,不需要其他的配置 一定要安装OpenCvSha…

不可不看,年轻人必须丢掉的10条幼稚职场心理

点击上方△腾阳 关注 转载请联系授权 你好,我是腾阳。 初入职场,每位年轻人都怀揣着梦想与憧憬,但往往也伴随着一些“成长的烦恼”。 那些不经意间流露出的幼稚心理,如果不及时察觉并调整,可能会成为你职业道路上的…