当前位置: 首页 > news >正文

进程地址空间

进程地址空间

目录

  1. 什么是进程地址空间
  2. 地址的理解
  3. 进程地址空间的分区
  4. 深度理解进程地址空间

1.什么是进程地址空间

引言

我们在学习C语言/C++时,当时为了方便我们理解和认识数据在内存中的存储,引入了C/C++内存分布图,即下图:

在这里插入图片描述

我们将内存分区,分成了:栈区,堆区,数据段,代码段。不同的区域存储不同的数据,如栈区存储变量,malloc函数将空间开在堆区,全局变量和静态变量放在数据段,常量放在代码段等等。

这些在我们当时学的时候,觉得没有问题,但是,学习冯诺依曼结构,我们知道了程序在运行时,代码和数据都需要加载到内存中,那现在有一个问题,如果一个程序就把内存给全占了,操作系统还怎么运行?要知道操作系统在运行时也是需要被加载到内存中的。


正文

为了解决上面的问题,操作系统给每个进程都分配独立的虚拟内存区域,而这个虚拟内存区域就是进程地址空间

说简单点,因为进程地址空间的存在,每个进程都认为自己是独享整个内存的,但是实际上,操作系统会通过页表来将虚拟内存的地址映射到物理内存上。

进程地址空间图示

在这里插入图片描述

没错,以往我们学的C/C++内存分布其实是进程地址空间,它不属于语言范畴的学习,算作操作系统的。

2.地址的理解

研究背景:32位平台

为什么内存会有地址?

  • 内存拥有地址是为了定位和管理数据。地址为内存中的每个存储单元提供了一个唯一标识,使得处理器能够精确地读取或写入数据。

为什么地址的范围是0~2^32?

  • 首先,地址的范围与平台的位数有关,32位平台地址最大是232,64位平台地址最大是264。
  • 在32位平台上,内存地址的长度是32位,即每个内存地址由32个二进制位组成。
  • 由于地址空间大小是 2^32 个不同的地址单元,因此最大可以支持 4GB 的内存(2^32=4,294,967,296 字节)。

3.进程地址空间的分区

进程地址空间分区的功能,小羊已经写过相关的博客点我

这里,我们着重探讨的是进程地址空间在底层是如何实现分区的

研究背景:kernel 2.6.32

首先,在进程部分,我们知道,进程=PCB+程序代码,对于进程地址空间的记录,就被放在了PCB中。

而Linux在底层实现PCB时,用的是task_struct结构体,来保存数据,而进程地址空间的数据保存,则是用了mm_struct结构体

在这里插入图片描述

没错,进程地址空间的分布就是直接用相关分区的开头和结尾定义下的,例如:

  • start_code是代码区的开始,end_code是代码区的结束。
  • start_data是数据区的开始,end_data是代码区的结束。

4.深度理解进程地址空间

  1. 为什么会存在进程地址空间?

    1. 如果让进程直接访问物理内存,如果进程非法越界了会非常不安全。
    2. 进程地址空间的存在,可以更方便进行进程和数据代码的耦合,保证了进程的独立性
    3. 让进程和编译器都以统一的视角,看待进程对应的代码和数据各个区域,方便使用。
  2. 只有OS会遵守虚拟地址空间的规则吗?

    • 不是,编译器也要遵守。编译器在编译时,就是按照虚拟地址空间的方式对代码进行编址。
  3. 可执行程序在写完后放在磁盘上,此时没有被加载到内存里,可执行程序的内部是否存在地址?

    • 存在,程序在编译时,函数和变量就被编写了虚拟地址。
  4. 当程序被加载到内存上后,就天然具有了物理地址,此时的程序就有了两套地址。

    • 存在,程序在编译时,函数和变量就被编写了虚拟地址。
  5. 当程序被加载到内存上后,就天然具有了物理地址,此时的程序就有了两套地址。


http://www.mrgr.cn/news/50025.html

相关文章:

  • 自动化检查网页的TDK,python+selenium自动化测试web的网页源代码中的title,Description,Keywords
  • 电子行业技术网站
  • 【2022统考真题】计算时间复杂度
  • Spring集成Redisson及存取几种基本类型数据
  • 已解决:“发生生成错误,是否继续并运行上次的成功的生成?”无法启动程序,系统找不到指定的文件
  • 代码随想录算法训练营Day07 | 454.四数相加II、383. 赎金信 、15. 三数之和 、18. 四数之和
  • ppt在线生成工具有哪些?6个好用的做ppt软件盘点!
  • crossover怎么运行exe文件,crossover如何安装Windows软件?crossover安装的软件无法打开怎么办
  • 从0到1打造我们专属的推荐系统
  • 推挽电路(图腾柱)
  • LeetCode Hot100 | Day4 | 层序遍历有序数组转搜索树验证搜索树搜索树中第K小的元素
  • ZFX山海证券的多元化产品策略
  • uniapp+veu3在vite.config.ts配置代理解决跨域问题
  • Python自动化脚本裁剪图片为1:1比例
  • javaweb-xml映射文件编写sql语句
  • 行星减速机:市场集中度较高
  • 海天瑞声携手中国移动共创AI+时代,以高质量AI训练数据驱动数智化发展
  • C++ 算法学习——1.8 状态剪枝
  • vue中watch和watchEffect区别
  • 画质修复软件哪个好?照片清晰用这些