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

linux内存空间划分

  • 内存
  • 2024-08-26 12:24:20
  • 3203

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

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


内核地址空间分布

直接映射区域:从3G开始区间到896M为止的区间为直接内存映射区域,该区域的线性地址与物理地址之间存在线性转换关系:线性地址=3G+物理。地址。

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

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

固定映射区域:该区域顶部有4k专用区域,仅限4G;每个地址都有特定的用途,例如ACPI_BASE。


二、Linux内存管理|四、物理地址空间设计模型本文重点分析Linux的物理内存管理,从物理内存的定义、访问模型到组织模型进行深入讨论。
物理存储器,即随机存取存储器RAM,主要由DRAM组成,是计算机系统的主要组成部分。CPU访问物理内存有两种方式,即UMA和NUMA。UMA的特点是所有CPU以相同的速度访问内存,内存条均匀分布在总线两侧。在NUMA架构下,每个处理器都有自己的本地内存,对本地内存的访问加剧;但跨处理器访问速度很慢。
内存管理的核心在于内存页,它是物理内存的最小单位。内核将内存划分为4KB的连续块,并通过StructurePage结构管理这些页面的状态。FLATMEM模型假设内存是连续且平坦的,以便于管理,并且页面通过全局数组mem_map进行组织。但是当物理内存出现堵塞时,DISCONTIGMEM模型就出现了,它将内存划分为节点,每个节点管理连续的内存,避免了mem_map的浪费。
随着技术的发展,SPARSEMEM模型的出现适应了物理内存热插拔的需求,通过管理连续的小内存块(段)来实现精细管理。该模型下,Page_to_PFN和PFN_to_Page的计算逻辑更加复杂。
综上所述,了解物理内存空间的布局和管理对于优化系统性能非常重要。后面的文章将对这些内存管理模型的实现细节进行深入分析。