地址空间
在子进程中修改变量值,不会和父进程同步,但是地址空间相同(此地址不是物理内存的地址)(而是虚拟地址–线性地址)
几乎所有的语言,如果有地址的概念,这个地址一定是虚拟地址,不是物理地址
验证地址空间
hello:hello.c
gcc -o $@ $^ #$@代指hello $^代指hello.c1 hello.c2 ....
进程1出现野指针访问到进程3
虚拟地址作用
使用虚拟地址映射物理地址
在物理内存中间加一层保护机制,虚拟内存存在保护机制
虚拟地址空间到底是什么
每个进程都有地址空间,地址空间是一种内核数据结构,里面至少有:各个区域的划分
范围变化: 即对start或者end标记值 ± 特定的范围即可
用页表来映射
==所以父进程和子进程地址一样但是数值不一样==页表不同,映射物理地址不同
映射关系的维护
cpu拿到的还是虚拟地址,因为程序中要相互跳转,而程序本身没有改变,所以cpu拿到虚拟地址再映射物理地址然后执行
为什么要有地址空间
2.
延迟分配可使内存的使用率提高
3.
新建状态
进程在加载时并非将所有的代码和数据加载进来,只加载一部分甚至只创建内核,等待需要时再从磁盘中加载数据。理论上可以实现对程序的分批次加载(换入){当然也可以分批换出}。
页表不仅可以指向物理内存,也可以映射磁盘