【Linux】对进程地址空间的理解
创始人
2024-11-17 15:04:33
0

一、关于进程地址空间的简单理解 

        进程地址空间其实是分了很多个区域的,区域划分的本质就是区域内的各个地址都是可以使用的。如同下面这个图所示:

        无论是环境变量的地址还是环境变量表的地址,所存放的地址都在栈的上部。这里的已初始化数据和未初始化数据是指的全局变量,包括静态变量(静态变量默认被初始化为0)。进程地址空间不是真实的物理内存,叫做虚拟内存。每一个进程都有自己独立的PCB,也有自己独立的地址空间。在32位机器下,进程地址空间的大小为[0,4GB]。其中,PCB会记录一个进程的起始地址或基地址,这其实就是进程地址空间的首地址。进程地址空间和真实的物理内存之间有一个叫做页表的结构,页表存放的就是虚拟内存到物理内存之间的映射关系,所以通过虚拟内存经过一定步骤就可以访问到真实物理内存中的内容。

        上面图的地址空间和页表都是操作系统帮我们维护的。当父进程创建子进程的时候,操作系统会把上面的这些结构以及结构中的内容给子进程爷拷贝一份。所以在子进程刚创建出来时跟父进程是访问同一块物理内存的。当子进程要对数据做修改时会发生写实拷贝,给子进程要修改的数据重新开辟一块物理空间,再将重新开辟的这块物理空间的地址填充入子进程的页表中,但此时页表中对应的虚拟地址并没有发生变化,所以可以看到父子进程访问同一个虚拟地址却打印出不同的内容。

#include  #include  int main() {     int x = 10;     pid_t id = fork();     if(id == 0)     {         x=20;         while(1)         {             printf("子进程pid:%d, ppid:%d, x=%d, &x=%p\n", getpid(), getppid(),x,&x );             sleep(1);         }     }     else     {         while(1)         {             printf("父进程pid:%d, ppid:%d, x=%d, &x=%p\n", getpid(), getppid(),x,&x );             sleep(1);         }     }     return 0; } 

示意图: 

         操作系统中可能同时存在多个进程,也就意味着操作系统要对多个进程所对应的进程地址空间通过先描述,再组织的原理做管理。所以,进程地址空间就是数据结构,具体到进程中,就是特定数据结构的对象!

二、为什么要有进程地址空间和页表

1、将物理内存从无序变成有序,让进程以统一的视角看待内存。物理内存可以在任意一个空闲的合法的位置进行申请,一个进程申请的物理内存可以是无序的,但一旦映射到页表中就跟有序的虚拟地址产生了一一对应的关系,将物理内存从无序变成有序。

2、将内存管理和进程管理进行解耦合。内存管理和进程管理可以做到互不干扰。

3、进程地址空间和页表是保护内存安全的重要手段。如果我们的进程非法访问某一个地址(比如说数组越界),我们的进程可能直接就崩了。

三、利用进程地址空间解释一些现象

        操作系统一定要为效率和资源使用率负责。malloc/new申请的内存操作系统并不知道用户什么时候会用,既然不知道什么时候会被使用,那么如果直接申请物理内存系统就无法保证资源使用率。所以,malloc/new申请内存不是在物理内存上直接申请的,而是直接得到的虚拟地址。当操作系统发现用户要向他申请的内存中进行写入合法内容时并且该内存没有在页表中建立对应的映射关系,操作系统就会先拦截住你的这个写入动作,在物理内存中开辟一块空间,并在该进程的页表中建立映射关系,然后操作系统再放开进程让进程进行写入操作,这个就叫做缺页中断。这样就可以充分保证内存的使用率,保证内存不会空转。同时也提升了new/malloc的速度。

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:腾讯云自媒体分享计划 - 腾讯云开发者社区-腾讯云

相关内容

热门资讯

八分钟秘籍!牵手辅助器,随意玩... 八分钟秘籍!牵手辅助器,随意玩第三方辅助(辅助)一直存在有插件(哔哩哔哩)1、随意玩第三方辅助免费脚...
两分钟演示!闲来辅助软件靠谱吗... 两分钟演示!闲来辅助软件靠谱吗,新世界辅助器免费下载(辅助)总是真的有下载(哔哩哔哩)两分钟演示!闲...
六分钟阶段!闲来辅助软件怎么样... 六分钟阶段!闲来辅助软件怎么样,新超圣辅助器(辅助)真是真的有工具(哔哩哔哩)闲来辅助软件怎么样辅助...
第十分钟方式!途游辅助软件网站... 第十分钟方式!途游辅助软件网站,随意玩5元流量包(辅助)好像有挂安装(哔哩哔哩)1、下载好途游辅助软...
六分钟总结!蜀渝牌乐汇挂机软件... 六分钟总结!蜀渝牌乐汇挂机软件,海贝之城有辅助吗(辅助)好像是有软件(哔哩哔哩)蜀渝牌乐汇挂机软件能...
第3分钟攻略!崇阳斗棋bug,... 第3分钟攻略!崇阳斗棋bug,天酷游戏交易平台(辅助)一贯有挂辅助(哔哩哔哩)天酷游戏交易平台破解侠...
5分钟举措!海豹大厅超级三加一... 5分钟举措!海豹大厅超级三加一辅助,青龙辅助最新下载(辅助)其实是真的修改器(哔哩哔哩)1、下载好海...
9分钟法子!新悠悠辅助,小程序... 9分钟法子!新悠悠辅助,小程序财神十三水脚本时评(辅助)一直有挂下载(哔哩哔哩)1)小程序财神十三水...
第十分钟指南!新蜜瓜大厅免费控... 第十分钟指南!新蜜瓜大厅免费控制器,三加一辅助(辅助)都是存在有脚本(哔哩哔哩)该软件可以轻松地帮助...
第五分钟学习!创思维激k软件助... 第五分钟学习!创思维激k软件助手,西兵互娱辅助插件app(辅助)切实存在有安装(哔哩哔哩)1、玩家可...