进程地址空间与页表方面知识点(缺页中断及写时拷贝部分原理)

谢谢阅读,如有错误请大佬留言!!

目录

谢谢阅读,如有错误请大佬留言!!

抛出总结

开始介绍

发现问题

进程地址空间(虚拟地址)

页表

物理内存与进程地址空间映射

缺页中断基本概念

写时拷贝的原理(基于缺页中断)


抛出总结

进程:何为进程进程 = 内核数据结构(PCB+mm_struct+页表(MMU))+ 代码和数据

开始介绍

发现问题

看一份代码

 我们知道,当子进程出现写实拷贝的时候,将共享的数据拷贝一份,为子进程独立存储。

让我们运行该代码。

分析结果:1、写实拷贝前:在写实拷贝前子进程与父进程的flag数据相同,数据地址相同,无可厚非为写时拷贝前,父子进程共享一块数据空间

                 2、写实拷贝:子进程准备修改flag数据,先发生写实拷贝-父进程的flag数据拷贝一份,然后拷贝的空间给子进程形成独立,然后子进程的数据flag改变为222。

                 3、写实拷贝后,我们观察结果:子进程与父进程的flag值确实发生了不一样了,但是!!我们惊奇的发现他们的地址居然一模一样!同一个地址怎么能保存不一样的值呢??

                得出结论,我们看见的地址,其实并不是直接物理内存上面的地址,这里我们看见的地址其实是进程进程地址空间(虚拟地址)。

进程地址空间(虚拟地址)

我们常见这个表其实是不是内存上面的数据区分布,其实是进程空间分布图。它其实一种结构体类型。

让我们讲个小故事更加了解虚拟内存:

        有一个有钱的富翁他对他的朋友非常的好,但是他的朋友们都不知道富翁有其他朋友,以为富翁只有他一个朋友,富翁有一千万元,他对所有朋友说哎呀我的钱都可以借给你,但是你不能一下子借太多,要经过我的同意才行。富翁所有的朋友都认为自己可以向富翁借款一千万,所有他们就先规划了这一千万怎么用。富翁也可以同时放贷给许多朋友。故事先暂停一下。

        这里的富翁换成物理内存,而朋友们换成进程,所有的进程都是独立的其实,但是进程都认为一个人独占了整个物理内存资源,所以就事先规划了内存使用的分布。划分了并不代表拥有,只是划分了而已

        这里我们介绍一下inux的进程地址空间:s

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云的小站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值