一、本章重点
1、进程地址空间
2、一个问题
3、解释pid_t id有两个不同的值
4、为什么要有虚拟地址空间?
01进程地址空间
1、验证进程地址空间的各区域的地址分布情况
2、验证堆区和栈区的增长方向(简单来说就是操作系统使用栈区和堆区的习惯)
栈区:先使用高地址,再使用低地址
堆区:先使用低地址,再使用高地址
02 如何解释下面这种现象?
为什么son和parent访问同一个地址却得到两个不同的值?
解释:打印的地址不是真实的物理地址,而是虚拟进程地址。
一般我们是很难看到物理内存的,能够看的基本都是虚拟地址(保护物理内存)
03 解释pid_t id有两个不同的值
现象:
解释如下:
04 为什么要有虚拟地址空间?
1、保护物理内存
有了虚拟地址空间和页表映射这层软件层可以保护物理内存不被非法访问,加一层保护。
2、实现进程管理和内存管理解耦
当进程申请空间的时候,不会立马给它分配物理空间,而是在虚拟地址空间开辟,在真正需要用的时候在开辟物理内存,这样延时开辟内存的方式能够提高操作系统运行效率,也实现了进程管理和内存管理的解耦。
3、让进程或者程序以统一的视角看待内存,方便程序的编译和加载到内存中
比如:每个可执行程序都可以按照确定好的虚拟地址空间,提前划分区域,然后只要让页表映射到物理内存即可。这样的设计可以简化进程加载到内存中。