17。进程地址空间

子进程修改数据要进行写时拷贝,但是为什么打印的地址是一样的,

当存入一个变量,内存中开辟一个空间物理地址乘gval,地址空间也有四字节的全局变量,这个起始称为虚拟地址,操作系统内为每一个进程构建一张页表的东西,页表左侧填虚拟地址,右侧物理地址,进程想要访问虚拟地址时查表访问物理地址,访问指定变量,所有元素都是这样,代码,所有数据都通过映射,整形四个字节每个字节都要有地址为什么只拿到一个地址,拿的是最开始的地址,通过类型决定访问几个字节。 子进程的pcb 进程地址空间 页表都是拷贝父进程的,页表就是浅拷贝,父子代码数据就是共享的,后来子进程要修改,内存中再拷贝一份,得到新的物理地址,修改映射关系,修改页表,这种机制是写时拷贝

父子进程不管谁只要发生return就要发生写时拷贝,父子访问同一个变量虚拟地址但是映射到不同的物理地址,

管理虚拟地址空间先描述在组织,虚拟地址空间本质就是个结构体对象,tast struct也是个结构体变量,两个结构体之间可以用指针相互指向,这个结构体有很多信息,还有mm*组织起来,对饼的管理, 虚拟地址空间是在操作系统内部给进程创建的结构体对象,这就是虚拟地址空间,

虚拟地址空间的结构体内装的是地址的开始和结束,调整地址空间只需要对这些开始结束加减就行

当我们的程序变成进程的时候,代码数据要加载到物理内存,占多少字节,虚拟地址空间就从特定地址开始开辟多少字节,然后填充页表,就一一对应了,

为什么不直接去物理内存找还要进行一层转化,页表中还有权限,权限没有就不给转,或者杀掉,可以对物理内存进行保护,

如果查的地址在页表中根本没有这叫野指针,操作系统把进程干掉了,所以野指针之后可能崩溃

字符常量区是只读的,如果写页表转化失败,操作系统不让转,

不管C C++编译好都是二进制程序,就要有PCB还有地址空间,页表,

缺页中断

代码特别大,虚拟地址开代码总大小,页表中物理地址只有四分之一,这样就少用内存了,需要后面代码时再把进程运行暂停一下,在从磁盘换一些,重新构建关系,继续运行

如果没有虚拟地址空间,申请内存时pcb内指针必须跟着变,如果加载代码数据就和进程管理强相关了,现在加载内存改页表就行,所以解耦合。

所以可以先创建pcb 地址空间和页表,虚拟空间上东西先给初始化了,(把那些空间多大读上来)代码数据一行也不加载,

挂起:

先找到S状态的进程操作系统查页表,把页表物理内存清空,代码数据全部唤出到磁盘指定位置,保留左半部分,右边唤出,所以进程还存在,这解耦特别好,可以分批加进来也可以分批换出去

malloc好几次,是离散的好几个起始地址,但是堆区只有一个起始地址,怎么理解

虚拟地址空间中还存在vm area,是个链表会记录每个子区域的开始结束,这样就可以分段不连续全部划分哈,壹份堆区对应一份vm area struct,每份start end就直接得到

每个区域都有vm area struct堆区可以有好几个,mmstruct对应整个地址空间整体的描述,

代码数据父子共享,子进程一旦尝试修改,就写实拷贝

如果这个进程要执行另一款操作系统呢,那么就可以在Linux上跑其他的操作系统这就是内核级虚拟机的原理,进程是独立的,各个操作系统 直接是独立的

如果父进程没有创建子进程那么数据段是读写的,创建之后把页表中所有的项目改成只读,子进程写入时,操作系统就发现虚拟地址物理地址都有合法的,而且访问的是数据段,因为mm内有每个段的地址间距,所以能区分开,但是发现是制只读的就触发写时拷贝,,

为什么要写时拷贝

数据直接拷贝话创建子进程太慢,只改一部分全拷贝,内存重复,

那个子进程先写就把权限设成读写,所有子进程都设玩那么父进程变成读写

相关推荐
RisunJan5 分钟前
Linux命令-nohup(使进程忽略挂起(HUP)信号并在后台继续运行)
linux·运维·服务器
kebidaixu6 分钟前
板级设备树驱动修改实战:从PWM到CAN,释放GPIO的完整指南
linux
爱喝水的鱼丶7 分钟前
SAP-ABAP:SAP 简单报表输出开发系列(共6篇)第三篇:SAP ALV 报表样式定制:字段布局与交互功能配置
服务器·开发语言·学习·交互·sap·abap
一码当前14 分钟前
【全志】 OKT153(sun8iw22) 启动链全流程详解
linux
STDD22 分钟前
VictoriaLogs:轻量级日志存储方案,Loki 的高效替代
运维·jenkins
键盘上的猫头鹰25 分钟前
【Linux 基础教程(一)】概述、安装与网络配置:VMware + CentOS + NAT + XShell 远程连接
linux·网络·centos
枳实-叶30 分钟前
【Linux驱动开发】第18天:I2C驱动深度解析
linux·运维·驱动开发
shandianchengzi34 分钟前
【记录】Ubuntu|Ubuntu 26.04 笔记本耗电过快,排查 省电过程
linux·运维·ubuntu
一叶星殇38 分钟前
日志成海,何以检索:Serilog 解锁 .NET 日志可查询新范式
运维·服务器
企服AI产品测评局39 分钟前
AI Agent实测:Agent Store现成应用如何重塑企业自动化?
运维·人工智能·ai·chatgpt·自动化