进程地址空间

概念

进程地址空间本质上是:操作系统上的内核数据结构对象(类似pcb)。

他的作用就是来分割进程之间的空间,实现区域划分,让他们实现一定的隔离。

而区域划分本质是:start和恩end等对自己的地址进行记录。

而地址本是:一个数字可以用usigned long 记录

这就是个区域划分的简单理解图,本质也是个结构体

除此之外进程地址空间还有一个页表和物理地址空间。物理空间才是文件真正存储的地方,而上面提到的地址其实是虚拟地址空间。

而页表其实就是连接虚拟与物理的中介。

其实我们就可以解释一个现象
我们看这个代码:

虽然打印的地址是相同的但是值却是不同的。这就是虚表的做的,父进程的虚表会被子进程的虚表拷贝一份,当val没有被修改时他们的虚拟与物理空间都是相同的,但是当一方被修改时,修改的那方会在物理空间其他的地方新开辟一段保存val导致他们虽然虚拟空间是相同的但是物理空间却是不同的。注意他们的虚表是各自有一份。

内核数据结构私有+代码和数据私有就使得进程的独立,其中页表是个关键的东西。

 

rwx

在页表后面其实还有两个参数rwx与isexists
rwx:其实就是对物理空间访问的权限,其实在物理空间层面上根本没有什么权限这一说法,能否对改地址的数据进行修改其实页表做的事情,这也是我们为什么会加const的原因,因为物理空间上没有什么权限,只是我们需要通过页表间接去访问,在页表就规范了我们的行为。

isexists

这个其实就是标记是否存在。他存在的原因其实也非常好想,比如当我们去new一块空间时,但是我们却没有对这块空间进行任何操作,所以在这时后我们在物理内存上就不会去开辟一块新的空间只是在页表上有了虚拟地址,isexists标记为false,这样当你不操作这块空间就不会去物理空间上去开辟。
 

所以为什么要有页表呢?

其实根本上就是保护内存,就类似于防止野指针,当我们出现野指针时,你光指向一块空间并不会报错,但是你去访问时就可能报错,就是因为虚拟地址并没有映射的物理地址。或者你访问的空间根本就没有权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值