【Hello Linux】程序地址空间

news2024/11/16 3:39:35

作者:@小萌新
专栏:@Linux
作者简介:大二学生 希望能和大家一起进步!
本篇博客简介:简单介绍下进程地址空间

程序地址空间

  • 程序地址空间
    • 语言中的程序地址空间
    • 矛盾
    • 系统中的程序地址空间
    • 为什么要有进程地址空间
    • 思维导图总结

程序地址空间

语言中的程序地址空间

我们在c语言中的学习中 我们是这样子描述内存空间的

内存包括栈区 堆区 静态区

栈区是向低地址增长的

堆区是向高地址增长的

其中静态区又分为三部分 分别是初始化数据 未初始化数据 数据段和代码段
在这里插入图片描述

我们可以通过下面的代码来验证上面的这张图

在这里插入图片描述

我们发现运行的结果和我们的结论是吻合的
在这里插入图片描述

矛盾

我们首先写出下面的一段代码

在这里插入图片描述
这段代码的意思是让子进程执行五次 分别打印子进程的pid myval和地址

让父进程一直执行 分别打印父进程的pid myval和地址

在这里插入图片描述
效果是这样子的 我们可以发现父子进程打印出来的val一样 地址也一样

但是如果我们在中途修改子进程的val数据呢? 会发生什么情况

如果按照我们之前语言中的内存理解 我们可以推断出父进程的val值也会被改变 因为它们指向的都是同一块地址 那么事实到底是不是这样子呢?

我们可以试验一下

对于原先的代码做出如下修改

在这里插入图片描述
运行结果如下

在这里插入图片描述
我们惊奇的发现 一个地址里面的值竟然有两种形态

这很显然不符合我们的常识

一个物理地址中对应的值只能有一个 所以说这里的地址肯定不是真正的物理地址 那么它是什么呢?

系统中的程序地址空间

实际上我们在语言层面上打出来的地址都不是真实的物理地址 而是由操作系统分配的虚拟地址

所以说尽管我们看上去父子进程的虚拟地址是一样的 但是它们实际的物理地址却是不一样的 这也就造成的上面那种一个地址中会出现两个值的情况

实际转化效果如图
在这里插入图片描述

我们前面的博客说过 贯穿操作系统的一句话叫做 先描述 再组织

我们语言阶段所说的内存实际上是虚拟内存地址而到了系统的学习中

我们给与了它一个新的名字 叫做进程地址空间

它是操作系统对于开辟空间的描述 实际上它就是一个结构体 叫做mm_struct

进程地址空间就类似于一把尺子 尺子的刻度由0x00000000到0xffffffff 尺子按照刻度被划分为各个区域 例如代码区、堆区、栈区等

而在结构体mm_struct当中 便记录了各个边界刻度 例如代码区的开始刻度与结束刻度 如下图所示

在这里插入图片描述
再这个结构体中 每一个刻度都代表着一个虚拟地址 这些虚拟地址通过页表 和物理地址建立联系

而由于这些地址是线性增长的 所以说我们也可以将虚拟地址叫做线性地址

在这里插入图片描述

从上面的图我们可以知道

操作系统在创建进程的时候会创建PCB和程序地址空间

在进程运行的时候程序地址空间会经过页表映射到真实的物理内存中开辟新的空间

我们前面的博客说过 父子进程是共享代码和大部分数据的

这也就是为什么一开始的时候我们查看代码时父子进程的val数据地址一样的原因

但是当我们要修改子进程的数据的时候 就会发生 缺页中断 由于要保持进程的独立性 所以这里会用到一种叫做写时拷贝的技术

将父进程的数据拷贝一份到真实的物理内存中 修改之

但是这在虚拟内存层面是看不到的 这也就是为什么我们修改数据之后依然看到父子进程myval的地址是一致的

在这里插入图片描述

为什么要有进程地址空间

  1. 有了进程地址空间之后就不会出现系统级别的越界问题了 可以防止恶意程序修改真实的内存数据和破坏计算机

    这是因为加了一个中间件之后程序就失去了访问真实物理内存的权力 而是由操作系统进行管理

  2. 将内存申请和使用概念划分清楚 从而让进程续写和内存管理操作进行分离

    这是因为使用物理内存的权力在操作系统手上 它可以通过“欺骗”程序 让他误以为自己申请成功了真正的物理内存
    操作系统可以在程序使用内存的时候再分配给程序

  3. 每个进程都认为自己在独占内存 这样能更好的完成进程的独立性以及合理使用内存空间
    每个进程都认为自己能独占内存 所以说它们会按照操作系统给的内存分布区规划使用 更加方便管理并且进程之间解耦

我们现在对于进程创建的理解要更加加深一点

理解为 PCB + 程序 + mm_sturct + 页表

思维导图总结

在这里插入图片描述

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

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

相关文章

Java经典面试题——String、StringBuffer、StringBuilder有什么区别?

典型回答 String 是Java 语言非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑。它是典型的 Immutable 类,被声明成为 final class ,所有属性也都是 final 的。也由于它的不可变性,类似拼接、裁剪字符串等动作&#xff…

机器学习100天(三十五):035 贝叶斯公式

《机器学习100天》完整目录:目录 机器学习100天,今天讲的是:贝叶斯公式! 好了,上一节介绍完先验概率、后验概率、联合概率、全概率后,我们来看这样一个问题:如果我现在挑到了一个瓜蒂脱落的瓜,则该瓜是好瓜的概率多大? 显然,这是一个计算后验概率的问题,根据我们之…

基于DSP的三相开关霍尔永磁同步电机控制

0 前言 本文本应该是一篇 记录我使用DSP28377D控制一个基于三相开关霍尔传感器的高速永磁同步电机全过程的长文,但大部分零散的知识点我都已经写成单独的博客了,所以本文更像是一个知识框架的梳理。本文最终目的是实现高速PMSM的电流-速度双闭环&#x…

[LK光流法,disflow using Dense Inverse Search, VariationalRefinement变分优化 原理和代码]

文章目录1.Fast Optical Flow using Dense Inverse Search1.1 W的含义:1.2 LK光流模型1.3 LK光流模型求解(不含迭代)1.4 LK光流模型迭代求解1.5 dis_flow方法中的 LK光流模型1.6 disflow代码分析2.0 disflow中的VariationalRefinement方法2.0…

大佬们都说tcp有黏包的问题,tcp却说:我冤枉!

相关参考添加链接描述 相关参考 什么是tcp TCP,全称Transmission Control Protocol,是一种传输控制协议,TCP协议也是计算机网络中非常复杂的一个协议 tcp的特点 tcp是面向连接的协议tcp是端到端的链接tcp提供可靠的传输服务tcp协议提供双工通信tcp是…

【计算机考研408】快速排序的趟数问题 + PAT 甲级 7-2 The Second Run of Quicksort

前言 该题还未加入PAT甲级题库中,可以通过购买2022年秋季甲级考试进行答题,纯考研题改编 快速排序 常考的知识点 快速排序是基于分治法快速排序是所有内部排序算法中平均性能最优的排序算法快速排序是一种不稳定的排序算法快速排序算法中&#xff0c…

异步Buck和同步Buck的特点

1 介绍 随着时代的发展,工业,车载,通信,消费类等产品都提出了小型化,智能化的需求。相应的,对于这些系统中的电源模块提出了小型化的要求。目前,市场上依然存在很多异步Buck电源管理芯片使用的场…

atomic 原子操作

atomic 原子操作前言atomic_t定义内核中的实现armv7的实现armv8的实现Exclusive monitor实现所处的位置External exclusive monitorAtomic指令的支持QA前言 修改一个变量会经过读、修改、写的操作序列。但有时该操作序列在执行完毕前会被其他任务或事件打断。 比如在多CPU体系…

python基础学习3--切片(slice)

在python中,切片(slice)是对序列型对象(如list,string,tuple)的一种高级索引方法。普通索引只取出序列一个下标对应的元素,而切片取出序列中一个范围对应的元素,这里的范围不是狭义上的连续片段。通俗一点就…

CLion Debug 调试 Makefile 构建的 C 语言程序断点不起作用

最近在研究 jattach,打算在本地调试项目,发现 CLion 可以正常编译运行代码,却无法断点 Debug。由于笔者对 C/C 项目不熟悉,在此记录研究过程中遇到的一些基本问题与解决方法。 文章目录解决方式尝试过的手段【未解决】找 Native D…

RIG Exploit Kit 仍然通过 IE 感染企业用户

RIG Exploit Kit 正处于最成功的时期,每天尝试大约 2000 次入侵并在大约 30% 的案例中成功,这是该服务长期运行历史中的最高比率。 通过利用相对较旧的 Internet Explorer 漏洞,RIG EK 已被发现分发各种恶意软件系列,包括 Dridex…

内科大机器学习期末重点

1. 什么是机器学习 (由于图床原因导致部分图片错位,可以借鉴着看) 语音识别算法推荐人脸识别垃圾邮件过滤贷款资格审核 2. 学习的概念 与经验有关 学习可以改善系统性能 学习是一个有反馈的信息处理与控制过程 3. 学习分类&#xff1a…

996的压力下,程序员还有时间做副业吗?

996怎么搞副业? 这个问题其实蛮奇怪的:996的压力下,怎么会还想着搞副业呢? 996还想搞副业的原因有哪些? 大家对于996应该都不陌生,总结就是一个字:忙。 996的工作性质就是加班,就…

基于龙芯+国产FPGA 的VPX以太网交换板设计(二)

3.1 板卡技术要求 3.1.1 主要性能指标 本着向下兼容的原则,以太网交换板的设计尽量保留传统信息处理平台的基本功 能和接口,重点考虑提升设备的性能和扩展性。本课题以太网交换板的主要性能指标 如下: (1) 具有大容量无…

一文搞懂华为防火墙的原理和配置

“防火墙”一词起源于建筑领域,用来隔离火灾,阻止火势从一个区域蔓延到另一个区域。引入到通信领域,防火墙这一具体设备通常用于两个网络之间有针对性的、逻辑意义上的隔离。这种隔离是选择性的,隔离“火”的蔓延,而又…

mac安装docker hub及使用

1. docker hub安装 官网:Docker https://hub.docker.com/ 去官网 下载 Docker.dmg 并安装 2. docker hub的使用 step1: 首先克隆一个仓库 Getting Started 项目是一个简单的Github仓库,他包含了你创建镜像的所有东西,并且可以把他当容…

文心一言的蝴蝶振翅,云计算的飓风狂飙

ChatGPT带来的多米诺效应正在不断涌现。社会各界都在关注一系列问题,比如中国版ChatGPT什么时候能来到?其效果如何?类ChatGPT应用的投资与创业前景会怎样?相关产品能带来哪些应用价值?随着百度文心一言等产品相继官宣&…

面试问题【数据库】

数据库数据库的三范式是什么drop、delete、truncate 分别在什么场景之下使用char 和 varchar 的区别是什么数据库的乐观锁和悲观锁是什么SQL 约束有哪几种mysql 的内连接、左连接、右连接有什么区别MyIASM和Innodb两种引擎所使用的索引的数据结构是什么mysql 有关权限的表都有哪…

SpringSecurity常见面试题汇总(超详细回答)

1.什么是Spring Security?核心功能?Spring Security是一个基于Spring框架的安全框架,提供了完整的安全解决方案,包括认证、授权、攻击防护等功能。其核心功能包括:认证:提供了多种认证方式,如表…

线性表 链表表示

初识链表 用一组物理位置任意的存储单元来存放线性表的数据元素。这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。链表中元素的逻辑次序和物理次序不一定相同。 在存储自己内容的同时也存储下一个元素的地址。存…