1、什么是地址空间
2、为什么要有地址空间
1、什么是地址空间
在了解什么是地址空间前,先简单认识一些基本概念,虚拟地址空间的大致分区是如下图:
内核中的地址空间,本质是一种数据结构,一定会和一个特定的进程相关联,虚拟地址空间的存在是为了通过页表的映射访问物理内存,大概流程如下图:
所以可以看出,地址空间是一种内核数据结构,它里面至少要有各个区域的划分。
所谓的区域划分就是在一定范围内定义start和end。
2、为什么要有地址空间
1、有了地址空间的存在,凡是非法的访问或者映射,OS都会识别并且终止掉这个进程,有效保护了物理内存,并且地址空间和页表是OS创建并且维护的,所以凡是用地址空间和页表进行映射,也一定要在OS的监管之下来进行访问,便保护了物理内存中的所有合法数据包括各个进程,以及内核的相关有效数据。
2、因为地址空间的存在,物理内存的分配和进程的管理可以做到没有关系,即内存管理模块 vs 进程管理模块就完成了解耦合。
注:在C、C++语言上的new,malloc申请的地址就是从虚拟地址空间中申请,只有当真正进行对物理地址空间访问的时候,才执行内存的相关管理算法,申请内存,构建页表映射关系,然后才能进行内存的访问。
3、地址空间+页表的存在可以将内存分布有序化。