进程地址空间,零基础最最最详解

news2025/1/17 4:04:07

目录

建议全文阅读!!!

建议全文阅读!!!

建议全文阅读!!!

一、什么是地址空间

1、概念

2、主要组成部分

3、特点和作用

(1)虚拟化:

(2)隔离性:

(3)动态分配:

(4)管理和保护:

二、如何理解地址空间?(建议全文阅读)

1、为什么要有地址空间

(1)理由一

(2)理由二

(3)理由三

2、如何理解页表?

3、如何理解虚拟空间


一、什么是地址空间

1、概念

进程地址空间是指:操作系统为每个正在运行的进程分配的虚拟内存空间。每个进程都有自己的独立地址空间,使得每个进程在运行时都感觉自己拥有整个计算机的内存和资源。

2、主要组成部分

组成部分描述功能
代码区(Text Segment)存放执行代码的机器语言指令。执行程序的实际指令,通常是只读的。
数据区(Data Segment)存放已初始化的全局变量和静态变量。存储全局变量和静态变量的数据。
堆区(Heap Segment)用于动态分配内存,大小可动态调整。通过 malloccalloc 等函数分配的动态内存。
栈区(Stack Segment)存放函数的参数值、局部变量值、返回地址等。支持函数调用、参数传递及局部变量的存储。
内存映射区域(Memory-mapped Segment)映射文件或设备,如共享库、动态链接库等。将文件或设备映射到进程的地址空间,使得它们可以像内存一样访问。
内核空间(Kernel Space)保留给操作系统及其内核模块使用的地址空间。只能通过系统调用访问,用于操作系统内部功能和服务。

3、特点和作用

(1)虚拟化:

每个进程认为自己拥有整个计算机的内存空间,实际上操作系统通过虚拟内存管理机制将其映射到物理内存或者磁盘上。(这是因为一般情况下,一个进程是很难占用掉整个物理内存)

(2)隔离性:

不同进程的地址空间是独立的,这意味着一个进程无法直接访问另一个进程的地址空间,从而增强了系统的安全性和稳定性。(确保进程的独立性)

(3)动态分配:

进程可以动态地在堆区分配和释放内存,使得程序可以根据需要动态调整内存使用,提高了内存的利用率。(具体的表现为写时拷贝)

(4)管理和保护:

操作系统负责管理和保护进程的地址空间,确保各个进程之间不会相互干扰或者篡改对方的数据。(具体的表现如写时拷贝)

二、如何理解地址空间?(建议全文阅读)

程序地址不是物理地址,而是虚拟地址

每一个进程都有自己的虚拟地址空间,
同时,操作系统会创建一个页表,
每一个进程都有自己独立的页表
页表的作用是:虚拟地址映射物理地址
进程上层使用的地址,都是虚拟地址,而不是真正的物理地址

那么多的进程,即有很多对应的地址空间
地址空间的本质就是内核中的一个结构体对象


先描述,在组织
子进程会把父进程的很多内核数据结构拷贝一份继承
也就是说页表也会被继承
那么,子进程和父进程的虚拟地址是同一个页表
所以,虚拟地址是一样,指向的物理地址也是一样的
所以,数据也是一样的
但是,当子进程要修改数据时
为了确保进程的独立性,这里表现为子进程的修改不影响父进程的运行
因此,为了避免子进程修改的数据之前
操作系统会自动新开辟一个物理内存空间,并且更新子进程的虚拟地址映射
在新开辟的映射空间中去修改子进程的数据值
此时,子进程的虚拟地址的映射就变成了新开辟的物理空间
所以,这样就会导致这样一个现象:
父进程和子进程数据的虚拟地址显示是一样的
但是他们的物理空间实际存储的数据却是不同的(这也就是为什么创建子进程时,同一个pid,返回值却不一样的原因
这个现象叫做,写时拷贝
也就是说,如果父进程和子进程都没有写入数据,那么数据就是共享的
那么,为什么要采取这样的策略呢?为什么不直接各自用一份数据呢?
例如子进程创建的时候,直接拷贝一份父进程的数据给子进程
各自用各自的,这样就不用这么麻烦了
原因是,父进程的数据很多,且一般来说,并不是父进程和子进程的所有数据都不一样
很大程度上,很多数据实际上是一样的,因此没有必要再开一份,直接共享即可
需要修改区别的,再去修改,节省空间,按需申请
本质是通过调整修改的时间顺序,达到节省空间的目的

地址空间是操作系统给进程分配的一个空间大小
地址空间本质是内核的一个叫做mm_struct结构体对象!内部很多的属性都是表示start,end,表示划分区域范围
一个一个的区域划分,都是结构体内部的划分
例如代码区的划分:usigned long start_data, end_data

1、为什么要有地址空间

(1)理由一

一个进程的各个数据部分,在物理内存中实际是乱序的
这就很混乱
但是,有了地址空间(mm_struct)之后:
代码就在代码段,数据就在数据段
该在堆区的在堆区,该在栈区的在栈区
同时,这些连续的虚拟地址再经过的页表映射到物理内存
这样,让进程数据无序变有序,让进程以统一的视角看待物理内存
以及各个运行区域

(2)理由二

进程管理模块和内存管理模块解耦
什么意思?
当进程申请一个内存空间时,有可能并不一定立即使用
如果不立即使用,但是我却给你开辟了这样一个空间
那个,在该进程使用这个内存空间之前,这一个内存空间相当于被占用浪费了
如果,在该进程申请一个内存空间,但是不是立即使用时,
我们只给虚拟地址和页表的的虚拟地址部分,而并不是真正的分配物理内存
这样,在进程的视角看,他已经申请了空间
而在实际的物理内存看,我并没有开辟这个空间,可以继续被利用
如此,这样的结构设计,就达到了按需即时分配内存空间的目的
大大的提高了内存的利用率

(3)理由三

拦截非法请求
进程和实际的物理内存中间,对内存的申请,多了一层地址空间
当进程的代码 / 数据访问越界时,操作系统在地址空间层就可以识别
这样,就可以对非法请求进行拦截,而不是直接到物理内存中申请 / 访问非法的地址
这样做的目的,是对物理内存进行保护

2、如何理解页表?

页表不仅仅有虚拟地址和物理地址的映射,还有对应的权限
当一个进程要对一个数据修改时,
本质是通过虚拟地址找到对应物理内存的数据再修改
当你要修改某一个数据
但是该数据在页表的所记录的权限只有wx,没有读权限,仅仅允许只读
那么就会修改动作就会被拦截,直接报错,程序崩溃
同时,修改这个动作也就不会在物理内存实现
这也就是为什么,一个程序崩溃时,并不会影响其他进程
因为进程的运行是在物理内存中进行的
崩溃的程序在虚拟内存页表层就已经被拦截,根本就不会被写到进程中
进而也就不会影响其他进程的运行
所以说,如果一个进程可以在内存中加载运行,就证明该进程是合法的

3、如何理解虚拟空间

虚拟空间(Virtual Memory)使得每个进程都拥有独立的、连续的内存空间,称为虚拟地址空间。这种独立的空间使得每个进程都认为自己在独占系统的所有内存,而实际上,物理内存是被多个进程共享的。

对虚拟空间的理解,需要认识和理解一些关键概念,建立起一个整体的初步认识和理解。

概念描述
虚拟地址空间每个进程看到的内存空间,是虚拟的、连续的地址范围。在32位系统中通常是0x00000000到0xFFFFFFFF(4GB空间)。
物理内存系统中实际存在的内存,由硬件管理。物理内存大小有限,虚拟地址空间可以比物理内存大得多。
地址映射虚拟地址空间中的地址通过地址映射机制映射到物理内存中的实际地址。这种映射关系由内存管理单元(MMU)负责管理和维护。
分页机制虚拟地址空间和物理内存之间的映射通常通过分页机制实现。操作系统将虚拟地址空间分成页面,大小通常为4KB或更大,并映射到物理内存的页面帧上。
虚拟内存操作系统对虚拟地址空间的抽象,允许进程访问未分配的物理内存部分,通过将不常用的内存页换出到磁盘上的交换空间释放物理内存。
内存保护和隔离虚拟空间使得每个进程相互隔离,一个进程无法直接访问另一个进程的虚拟地址空间,通过地址映射和访问权限机制实现。
更高的内存利用率多个进程可以共享物理内存,不需要各自拥有独立的物理内存空间。
简化编程模型程序员可以使用连续的内存地址编写程序,而不必关心物理内存的具体分布和限制。
更好的安全性虚拟空间提供内存隔离和保护,防止进程越界访问其他进程或操作系统内核的内存空间。

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

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

相关文章

Java并发—volatile关键字

在这篇文章Java并发—Java内存模型以及线程安全-CSDN博客多次提及volatile关键字,这是一个非常重要的概念,主要用于多线程编程中,它确保了变量的可见性和禁止指令重排序,但不保证原子性,下面详细解释volatile关键字的作…

未来3-5年,哪些工作会被AI取代

一篇由高盛经济学家约瑟夫布里格斯 (Joseph Briggs)和德维西科德纳尼 (Devesh Kodnani)撰写的报告指出,全球预计将有3亿个工作岗位被生成式AI取代。 报告称:“最近出现的生成式人工智能将降低劳动力成本和…

​宁德时代:续航还剩多少?

车企价格战打到供应商,连续增利不增收。 今天我们看宁德时代的增长电池续航还剩多少? 巨头长成,就要面临增长瓶颈。“宁王”24年中报公布,业绩喜忧参半。二季度营收869.96亿,同比下滑13.18%, 已经是宁德时…

冠军之选:奥运冠军青睐的游泳耳机款式大公开

在最新一届的夏季奥林匹克运动会中,泳池边的激烈竞争再次点燃了全球观众的热情。游泳运动员们,以惊人的速度和毅力,一次又一次地刷新纪录,向世人展示了人类极限的无限可能。而在这些运动员备战的过程中,有一个细节或许…

吴恩达老师机器学习-ex5

有借鉴网上部分博客 首先,我先使用该数据集,通过线性回归的方法,做了一个预测问题 import numpy as np import scipy.io as sio import matplotlib.pyplot as plt from scipy.optimize import minimize#读取数据 path "./ex5data1.ma…

Spine 核心功能入门

核心功能入门 本文主旨是整理我在入手学习 spine 时的流程,以及对于基本功能的理解和常规 2D 动画实现的思路。 意在整理出一个简要的入门 spine 的流程,以及对于一些高阶功能的应用的思考。 本文基于 https://zh.esotericsoftware.com/ 官网教程进行思…

2024.8.1 作业

使用两个线程完成两个文件的拷贝&#xff0c;分支线程1拷贝前一半&#xff0c;分支线程2拷贝后一半&#xff0c;主线程回收两个分支线程的资源 #include <myhead.h>struct Buf {const char *file1;const char *file2;int start;int size; };int get_len(const char *arr…

从线段中搜寻提取闭合轮廓(二)

接上篇文章从线段中搜寻闭合轮廓_多线段搜索区域集合 快速-CSDN博客 1. 前言 调试了上篇文章中参考代码修了一些问题&#xff0c;优化了显示&#xff0c;但是由于算法逻辑存在一些问题&#xff0c;有很多不必要的性能损耗&#xff0c;且逻辑不是最优的&#xff0c;于是博主找…

FPGA开发——蜂鸣器实现音乐播放器的设计

一、概述 我们在进行蜂鸣器的学习的时候&#xff0c;总会在想既然蜂鸣器能够发出声音&#xff0c;那么它能够播放音乐吗&#xff0c;今天这篇我们文章我们就一起来学习怎样使用使用蜂鸣器来播放音乐&#xff0c;也就是怎样成为一个音乐播放器。 1、蜂鸣器的类型 在设计的时候…

玩机进阶教程-----手机恢复出厂 误删除照片视频 误刷机后 几种数据恢复操作步骤解析【一】

手机中存储有众多的照片 视频 文件或者电话本这类的数据,虽然目前很多机型都有云存储。可以随时同步手机的存储数据。但万一云存储没有开启同步或者密码忘记。或者恢复出厂等等原因造成以上的数据丢失。或者手机系统问题导致的不开机但需要其中的数据等等。那么如何简单快速的…

【项目日记(五)】梦幻笔耕-测试报告

❣博主主页: 33的博客❣ ▶️文章专栏分类:项目日记◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多项目内容 目录 1.项目背景2.测试环境3.测试计划3.1功能测试3.2自动化测试 1.项目背景 个人博客系统…

剪画小程序:自媒体创业者的准备-文案!

作为一个刚刚踏入自媒体领域的新人&#xff0c;我满怀着激情和憧憬&#xff0c;渴望通过视频分享自己的见解和生活点滴。然而&#xff0c;视频文案的创作却成了我面前难以逾越的高山。 在构思旅行视频时&#xff0c;面对美丽的风景和丰富的经历&#xff0c;我却无法用恰当的文字…

嵌入式学习Day19---Linux软件编程

目录 一、标准I/O 1.1.fseek 1.偏移量 2.实例 ​编辑 1.2.ftell 2.实例 ​编辑 二、文件I/O 2.1.打开文件 1.open 2.2.实例 2.2.读写文件 1.write 实例 ​编辑 2.read 实例 2.3.关闭文件 1.close 2.3.lseek 实例 三、标准I/O与文件I/O的区别 3.1.区别 四、其…

2024年有哪些开放式耳机值得入手?精选五大高分品牌

近几年兴起的开放式蓝牙耳机&#xff0c;具有佩戴舒适稳固、不影响使用者判断外界环境等优点&#xff0c;十分适合在户外环境下使用&#xff0c;因此受到了众多健身人士的喜爱。那么该如何挑选到一款适合自己的开放式耳机呢&#xff1f;2024年有哪些开放式耳机值得入手&#xf…

【架构】应用保护

这篇文章总结一下应用保护的手段。如今说到应用保护&#xff0c;更多的会想到阿里的sentinel&#xff0c;手段丰富&#xff0c;应用简单。sentinel的限流、降级、熔断&#xff0c;可以自己去试一下&#xff0c;sentinel主要通过配置实现功能&#xff0c;不难。sentinel的简介放…

Qt如何在工程中使用dll库

DEMO&#xff1a;Test &#xff1b;工程与dll皆为qmake编译&#xff1b; 所需文件&#xff1a;A.dll、A.lib、A.h、A_global.h&#xff1b;B.dll。其中A.dll 依赖 B.dll 1. 环境配置 &#xff08;1&#xff09;确认制作dll的Qt版本和当前工程版本是否一致(Qt6中的一些函数Qt…

SLAM中的概率基础(知识回顾)

今天有些知识点忘记了&#xff0c;特地过来回顾一下&#xff0c;于是就做了这些笔记。 为了方便能够在手机上更直观的看笔记&#xff0c;写下这篇文章&#xff0c;有错误请各位大佬指出。 一、 概率基础概念 1.1. 概率密度函数&#xff08;PDF&#xff09; 概率密度函数用于…

第十九次(安装nginx代理tomcat)

回顾 1.安装nodejs---jdk一样你的软件运行环境 yum -y list install|grep epel $? yum -y install nodejs #版本号 node -v 2.下载对应的nodejs软件npm yum -y install npm npm -v npm set config ...淘宝镜像 3.安装vue/cli command line interface 命令行接口 npm ins…

推荐4个国内可用的AI软件,用上以后都能早点下班

随着技术的发展&#xff0c;越来越多的AI软件出现在人们的视野&#xff0c;应用的领域更多&#xff0c;能力提升也更快&#xff0c;用在工作上能帮不少忙。下面就给大家分享4个国内可以直接使用的AI软件&#xff0c;希望大家啊用上以后都能早点下班~ 1.Kimi 一键直达>>h…

韶音开放式耳机怎么样?韶音、西圣、QCY热门款实测横评

开放式耳机是目前最火爆的的耳机市场细分赛道&#xff0c;开放式耳机的优点包括健康卫生&#xff0c;佩戴舒适性高&#xff0c;方便我们接收外部环境音等等&#xff0c;以上这些优势使得开放式耳机特别适配户外运动场景&#xff0c;在工作、日常生活等场景下使用也是绰绰有余。…