【Linux系统编程】:进程地址空间1
创始人
2024-11-11 09:36:32
0

 1.引出进程地址空间

因为str指向的是字符串首字母的地址,首字母是字符常量“h”,地址存储在字符常量区,无法修改,故报错。

Linux进程地址空间与进程内存布局详解 - 知乎 (zhihu.com)

我们编写一段代码,来认识一下存储空间的地址划分, 

其中栈区又是向下(地址低位)增长,堆区向上增长。 

我们再次探讨fork返回值表示两个变量的问题,编写下面的代码

运行,

同一个变量,在两个进程中(父子关系)通过“写时拷贝”可以有不同的值,但是,变量的地址怎么会相同呢?“写时拷贝”是在同一块地址空间上写不同的值吗?

如果是物理地址,同一块空间是不可能做到的。所以上面程序中打印的地址是线性地址(虚拟地址)。 

2.什么是线性地址(虚拟地址)

进程的虚拟地址空间是指可供该进程使用的一组虚拟内存地址。 每个进程的地址空间均为私有;除非进行共享,否则其他进程无法访问该地址空间。

虚拟地址不表示内存中某一对象的实际物理位置;相反,系统会为每个进程维护一个页面表;它是一个内部数据结构,可用于将虚拟地址转换为相应的物理地址。 每当线程引用地址时,系统均会将虚拟地址转换为物理地址。

32 位 Windows 的虚拟地址空间大小为 4 GB,且分为两个分区:一个用于进程,另一个则预留以供系统使用。虚拟地址空间(内存管理) - Win32 apps | Microsoft Learn

虚拟地址_百度百科 (baidu.com)虚拟地址是Windows程序时运行在386保护模式下,这样程序访问存储器所使用的逻辑地址称为虚拟地址,与实地址模式下的分段地址类似,虚拟地址也可以写为“段:偏移量”的式,这里的段是指段选择器。虚拟地址_百度百科 (baidu.com)

虚拟地址和线性地址的区别:

在保护模式下,段基地址+段内偏移通过查GDT之后得到的地址称为线性地址。若没有开启地址分页功能,此线性地址就被作物理地址来用,可直接访问内存。
若开启了分页功能,此线性地址又多了个名字,就是虚拟地址。虚拟地址、线性地址在分页机制下就是一个东西。 虚拟地址还要经过页部件转换成具体的物理地址,这样CPU才能将其送上地址总线去访问内存。也就是说,在开启了分页功能之后,线性地址还需要经过一次转换,才能得到物理地址。

内存分段与内存分页:逻辑地址、物理地址、线性地址、虚拟地址-CSDN博客

x86保护模式——全局描述符表GDT详解_gdt全局描述符表 作用-CSDN博客

3.虚拟地址和物理地址的关系

每一个进程都有它自己的地址空间,当子进程被创建时,一般情况下,子进程会继承父进程的地址空间,包括页表。

分页表(page table)是一种数据结构,它用于计算机操作系统中的虚拟内存系统,其存储了虚拟地址到物理地址间的映射。虚拟地址在访问进程中是唯一的,而物理地址在硬件(比如内存)中是唯一的。分页表 - 维基百科,自由的百科全书 (wikipedia.org)

页表是一种特殊的数据结构,放在系统空间的页表区,存放逻辑页与物理页帧的对应关系。 每一个进程都拥有一个自己的页表,PCB表中有指针指向页表。页表_百度百科 (baidu.com)

 当子进程的数据发生改变时,会进行“写时拷贝”,

更详细的过程请参考: 

一步一图带你构建 Linux 页表体系 —— 详解虚拟内存如何与物理内存进行映射 - bin的技术小屋 - 博客园 (cnblogs.com)

4.再谈进程地址空间

进程之间的独立的,进程的地址空间也是独立的。那么操作系统是如何管理进程地址空间的呢?

Linux的task_struct中有一个数据结构mm_struct,操作系统会为每个进程创建一个mm_struct 对象,然后通过管理结构体对象来间接管理进程地址空间。【Linux】进程地址空间-CSDN博客

X86_64 CR3详解_cr3寄存器-CSDN博客

 

相关内容

热门资讯

秒懂教程“微信斗牛牛小程序叫什... 微信斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡来...
一分钟了解“牛牛在哪里购买房卡... 冷酷大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡...
终于找到“炸金花房卡专卖店联系... 悟空大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡来...
微信链接斗牛房卡多少钱/微信链... 斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡来享受...
一分钟推荐“微信斗牛房间怎么弄... 微信斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来...
牛牛金花房卡链接在哪买/微信炸... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
金花房卡购买平台推荐/炸金花房... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来享受...
王者安卓系统怎么加苹果系统qq... 你是不是也和我一样,对手机上的各种系统充满了好奇呢?今天就来聊聊一个特别有趣的话题——如何在王者安卓...
秒懂教程“怎么购买微信炸金花房... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡...
一分钟推荐“微信金花房卡哪里买... 随意玩是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来享...
正版授权“微信金花房卡怎样购买... 金牛座金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡...
终于找到“微信金花链接房卡怎么... 天酷大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡来...
微信斗牛房卡找谁买/微信链接金... 微信斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来...
微信怎么创建金花房间/微信金花... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡来享受...
一分钟推荐“微信群金花房卡哪里... 悠悠大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡...
正版授权“在哪里买炸金花房卡哪... 新漫游牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
微信牛牛群哪里购买房卡/微信炸... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
哪里购买斗牛牛链接房卡/斗牛房... 斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡来享...
一分钟了解“微信怎么创建金花房... 牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡来享受...
终于找到“微信群发的链接金花怎... 卡米大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来...