内存管理模型:1、地址映射-虚拟地址到物理地址的映射;2、物理内存分配。
Linux可支持的地址空间由处理器硬件来决定的,假设为32位地址,那么共有4GB,其中0-3GB为用户空间,3G-4G为内核空间-内核空间被分成4个部分:a、内核代码,已初始化内核数据,未初始化内核数据等等。b、vmalloc区。c、永久内核映射。d、股东映射的线性地址
其中a为直接映射区,3G-3G+896M(最高到这个值);a、b、c、d到物理地址的映射方式不相同。
虚拟地址转化为物理地址:
上图是用户空间的映射方式。
下面是内核空间的映射方式
a直接映射区3G-3G+896MB在物理内存里896MB以下称为低端内存,高于896MB的内存称为高端内存。那么在这个区域的虚拟地址如何映射呢?如:3G+128MB映射到物理内存地址为128MB,所以很直接(减去3G)。
b、为vmalloc区,它既可以访问低端区域又可以访问高端区域,它的映射没有一个线性关系、
c、永久内核映射:固定用来访问高端内存的
d、固定映射先行区:这里的虚拟地址与特殊的寄存器建立了一种关系。
物理内存分配:
其中malloc、new等分配的地址是虚拟地址,当我们要去操作这些虚拟地址时,才会分配到实实在在的物理地址。。。
时间: 2024-10-24 06:26:16