【Linux:地址空间】

A,B进程是一对父子进程,子进程能够拷贝父进程的数据。操作系统通过页表的映射找到该变量在物理内存中的地址。而当两个进程中有一个进程需要对数据进行修改时,操作系统会给其在物理内存中重新分配一个空间地址,然后再重新修改页表虚拟地址所映射的物理空间地址。如下图:

当B进程需要修改g_val时,虽然虚拟空间还是一样,但是其页表重新映射的物理空间却发生了改变(写时拷贝)。

问题:为什么父子进程在数据不一样的情况下,虚拟地址却是一样的?

  • 子进程创建时会拷贝父进程的PCB
  • 当子进程对全局变量g_val修改时,操作系统会重新分配一块物理空间
  • 把新的物理空间重新映射到子进程的页表中

地址空间的概念:

地址空间就是一个结构体,通过结构体将我们所虚拟化出的栈、堆、数据段、代码段等组织起来的一个结构体

  • 在linux中,每一个进程都有自己的虚拟地址空间,该地址空间是进程能看到并且可操作的内存的抽象模型
  • 虚拟地址空间使得每一个进程都认为自己拥有独立的内存,从而提供了进程之间的隔离
  • 虚拟地址空间通常分配了几个区域,分别是:代码段,数据段,堆,栈和映射区域。

程序本身就是一个地址,这就是为什么一开始页表中就有数据的原因

地址空间的意义:

  1. 节省空间:有的空间开辟出来并不着急使用,于是利用虚拟地址(相当于一个记账本)等需要用时,再在物理内存中开辟通过页表映射找到物理空间地址使用
  2. 物理内存并不是按照区域存放的,他的存放是乱序的,不像虚拟地址那样,分区域的挨着存放,因此,通过虚拟地址和页表的配合就能很好的管理物理内存,让"无序"变为"有序"
  3. 拦截非法的请求:例子:你有一百块钱,去商店买东西,很有可能因为年纪小,于是花出去很多不该花的钱,这时候你妈就说帮你保管钱,以后买东西先找他要钱,再去买东西,你妈妈同时也能帮你拦截你乱花钱的非法请求,这里的虚拟地址就是如此,当请求不合理,就不会把你的地址映射到页表中,那么你也分配不了物理空间

地址空间的分配与回收:

  • 进程创建时,操作系统会为它分配虚拟地址空间
  • 进程结束时,操作系统会回收其地址空间
  • 进程运行过程中,根据需要,操作系统可能会动态地分布或回收物理内存页面

页表:

  • 每一个进程都有自己的页表
  • 页表映射的物理空间也是有权限的(rwx)
相关推荐
测试员周周3 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
小辰记事本5 小时前
从零读懂RoCEv2数据包构造:从WQE到线缆上的完整旅程
服务器·网络·网络协议·rdma
小鹏linux6 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
在角落发呆7 小时前
Linux转发配置:解锁网络互联的核心密码
linux·运维·网络
齐潇宇7 小时前
Zabbix 7 概述与配置
linux·zabbix·监控告警
裴东青8 小时前
10-实战:RuoYi-Cloud的自动化发布
运维·ci/cd·自动化
江公望8 小时前
Ubuntu htop命令,10分钟讲清楚
linux·服务器
哎呦,帅小伙哦8 小时前
Linux 时间:从原子钟到 clock_gettime 的每一面
linux·运维·服务器
sxgzzn9 小时前
新能源场站数智化转型:基于数字孪生与AI的智慧运维管理平台解析
大数据·运维·人工智能
张小姐的猫9 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++