当前位置:首页 > 内存 > 正文

linux内核内存分配函数

  • 内存
  • 2024-05-09 10:50:47
  • 2305

一、Linux的内核空间和用户空间是如何划分的(以32位系统为例)?

通常,32位Linux内核地址空间分为0~3G作为用户空间和3~4G作为内核空间。地址分配如下图


内核地址空间分配

直接映射区:线性空间中从3G开始到896M的区间是直接内存映射区。该字段中线性地址与物理地址之间存在线性转换关系:线性地址=3G+物理地址。

动态内存映射区域:该区域由内核函数vmalloc分配:其特点是:线性空间是连续的,但对应的物理空间不一定是连续的。vmalloc分配的线性地址对应的物理页可能位于低端内存,也可能位于高端内存。

持久内存映射区域:该区域可以访问高端内存。访问方式是使用alloc_page(_GFP_HIGHMEM)分配高端内存页或者使用kmap函数映射分配到该区域的高端内存。

固定映射区域:该区域和4G之上只有4k隔离区域,每个地址项都有特定的用途,例如ACPI_BASE等。