【Hello Linux】程序地址空间
创始人
2024-05-27 18:46:23
0

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

程序地址空间

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

程序地址空间

语言中的程序地址空间

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

内存包括栈区 堆区 静态区

栈区是向低地址增长的

堆区是向高地址增长的

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

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

在这里插入图片描述

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

矛盾

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

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

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

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

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

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

我们可以试验一下

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

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

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

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

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

系统中的程序地址空间

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

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

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

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

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

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

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

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

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

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

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

在这里插入图片描述

从上面的图我们可以知道

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

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

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

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

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

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

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

在这里插入图片描述

为什么要有进程地址空间

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

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

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

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

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

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

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

思维导图总结

在这里插入图片描述

相关内容

热门资讯

以春节为话题的作文600字 【精品】以春节为话题的作文600字4篇  在学习、工作乃至生活中,大家都经常看到作文的身影吧,作文要...
端午节看图写话作文 端午节看图写话作文  导语:每年农历五月初五为端午节,是中国民间的传统节日。下面是小编整理的端午节看...
又是一年清明节作文 2020年又是一年清明节作文(通用10篇)  无论在学习、工作或是生活中,大家都接触过作文吧,借助作...
教师节的作文700字 教师节的作文700字四篇  在平平淡淡的学习、工作、生活中,大家都经常接触到作文吧,根据写作命题的特...
欢乐圣诞节优秀作文 欢乐圣诞节优秀作文(精选12篇)  在日常学习、工作抑或是生活中,许多人都写过作文吧,作文是从内部言...
国庆游记作文 国庆游记作文9篇  在日常生活或是工作学习中,大家一定都接触过作文吧,借助作文可以宣泄心中的情感,调...
开心的一天作文300字 开心的一天作文300字  今天,早上第三节课是数学课.我很高兴,因为我已经有九朵红花啦,还差一朵红花...
断情笔歌词完整版 断情笔歌词完整版  歌词是诗歌的一种,入乐的叫歌,不入乐的叫诗(或词)。入乐的歌在感情抒发、形象塑造...
游东莞人民公园400字作文 游东莞人民公园400字作文  今天我们一家去人民公园游玩,到了人民公园时,那里的人密密麻麻、人山人海...
会飞的木屋作文 会飞的木屋作文(精选25篇)  在平时的学习、工作或生活中,大家对作文都再熟悉不过了吧,借助作文可以...
学游泳作文400字 学游泳作文400字  在暑假里发生过许多有意义的事,有学游泳,学做菜,学拖地......其中最有意义...
春节习俗的作文800字 春节习俗的作文800字六篇  无论在学习、工作或是生活中,大家都经常接触到作文吧,通过作文可以把我们...
母亲节作文 精选母亲节作文五篇  在学习、工作、生活中,大家都有写作文的经历,对作文很是熟悉吧,作文要求篇章结构...
快乐的节日作文 快乐的节日作文(精选41篇)  在平平淡淡的日常中,大家都有写作文的经历,对作文很是熟悉吧,借助作文...
作文 八卦之旅系列 作文 八卦之旅(系列)  八卦之旅(1)  ——哪里来的狗尾巴草  “快点!假日山庄到了!”经历了不...
深圳下了雪作文(优秀篇)   你还好吗,蜗牛?  打下这一连串的字符时,心中或许还充满了一种担忧和恐惧。但我想,这样子的问候,...
重阳节的作文 【精品】重阳节的作文700字3篇  每年的九月九日就是我们的重阳节,重阳节是怎么来的呢?下面是小编帮...
中秋节的作文700字 中秋节的作文700字十篇  在学习、工作或生活中,许多人都写过作文吧,写作文可以锻炼我们的独处习惯,...
逍遥游优秀作文850字 逍遥游优秀作文850字  夜的静谧总是很容易让人联翩浮想的。  白天是一个难熬的节日,却又不舍得就这...
国庆节作文400字 关于国庆节作文400字(通用24篇)  无论在学习、工作或是生活中,大家总免不了要接触或使用作文吧,...