【Linux】16.Linux进程概念(5)

文章目录


进程地址空间

三个问题:

  1. 什么是进程地址空间?

  2. 为什么要有地址空间?

  3. 地址空间是怎么做的?

进程地址空间:

页表:

在创建父进程的时候,通过查询页表,将进程在进程地址空间里面开辟的变量所对应的虚拟地址转换为物理内存上的物理地址。

在创建子进程的时候,一开始默认的是子进程指向的和父进程一样的页表,进程在进程地址空间里面开辟的变量所对应的虚拟地址也和父进程一样,所以父子进程代码可以共享。

当父进程的g_val=100,子进程的g_val=200时,他们的虚拟地址是一样的,然后子进程顺着页表找到虚拟地址对应的物理地址,结果发现这个进程的变量是和父进程共享的,所以操作系统会在写入之前,重新划分一段空间,然后把父进程的g_val=100的值拿到新的空间内(这个也叫写时拷贝,是操作系统自动完成的),然后把子进程的g_val=200再拿到这个物理空间里,把原来的100给覆盖掉。

这段空间的物理地址肯定也和之前父进程的物理地址空间不一样了。至此就将父子进程的同一个变量的不同值在物理层面上分开了。

输入权限指的是rwx这种的权限。

标志位:对应的代码和数据是否已经被加载到内存中。

如果变量根据虚拟地址找物理地址的时候发现标志位显示对应的代码和数据没有被加载到内存就会触发缺页中断。写时拷贝也是缺页中断。


谈一下细节:

  1. 地址空间到底是什么?

    在32位计算机中,有32位地址和数据总线 ---> 每一根总线

    每一根地址总线只有0,1两种情况,32根就是232种情况。

    232*1byte = 4GB

    地址总线排列组合形成的地址范围[0,232

    所谓的进程地址空间,本质上是一个描述进程可视范围的大小,进程空间内一定要存在各种区域划分,对线性地址进行startend即可。

    地址空间本质上是内核的一个数据结构对象,类似PCB一样,地址空间也是要被操作系统管理的:先描述,再组织。

  2. 所以,什么叫做进程?以及进程地址空间,为什么?

    我们先讲个故事:

    一个富翁有100w,但是他有好几个私生子,这些私生子互相不认识,但都知道富翁有100w。他们都认为自己以后能得到100w的遗产。

    我们可以把富翁当作操作系统,私生子当作进程,100w当作进程地址空间。

  3. 虚拟地址空间存在的意义?

    增加进程虚拟空间,可以让我们访问内存的时候,增加一个转换的过程,在这个转化的过程中,可以对我们的寻址请求进行审查,所以一旦异常访问,直接拦截,该请求就不会到达物理内存,保护物理内存。

  4. 进程是可以被挂起的,但是你又怎么知道你的进程的代码数据,在不在内存里面呢?

进程在被创建的过程种,先创建内核数据,然后加载对应的可执行程序。

相关推荐
游戏开发爱好者81 分钟前
iPhone重启日志深度解析与故障代码诊断
android·ios·小程序·https·uni-app·iphone·webview
zhendianluli2 分钟前
windows文件通过SSH复制到ubuntu目录下
运维·ubuntu·ssh
dyxal4 分钟前
linux系统上 WPS Office新增字体
linux·运维·wps
❥ღ Komo·9 分钟前
深入理解Ansible条件语句:从基础到高级应用
运维·服务器
码河漫步14 分钟前
vmware安装ubuntu22.04
linux·运维
A-刘晨阳1 小时前
【Windows压力测试工具】 - 使用微软官方工具进行压测 cpu、内存
运维·windows·测试工具·压力测试·cpustres·testlimit
三朝看客1 小时前
docker版nacos连接mysql8异常处理 No DataSource set!
运维·docker·容器
TDengine (老段)1 小时前
强杀服务、重启系统及断电对 TDengine 影响
运维·服务器·数据库·物联网·时序数据库·tdengine·涛思数据
杜子不疼.2 小时前
【Linux】进程状态全解析:从 R/S/D/T 到僵尸 / 孤儿进程
linux·人工智能·ai
序属秋秋秋2 小时前
《Linux系统编程之进程基础》【进程优先级】
linux·运维·c语言·c++·笔记·进程·优先级