一文剖析 Linux 内核的内存管理

💡 原文约4200字/词,阅读约需10分钟。
📝

内容提要

内存管理是操作系统中重要的任务之一,Linux系统中引入了虚拟地址的概念,物理内存分为Page、Zone和Node,大内存利用伙伴系统分配,小内存利用slub分配。虚拟空间分为用户态和内核态,通过页表将虚拟地址转化为物理地址。TLB是CPU中的缓存,用于缓存虚拟地址和物理地址的映射。虚拟内存是将硬盘中的swap分区作为虚拟的内存,可以运行更大内存的程序。用户空间只能映射用户内存,内核空间只能被内核使用。

🎯

关键要点

  • 内存管理是操作系统的重要任务,Linux引入虚拟地址概念。

  • 物理内存分为Page、Zone和Node,Page是基本单位。

  • Zone分为ZONE_DMA、ZONE_NORMAL和ZONE_HIGHMEM,分别用于不同的数据存储。

  • 大内存使用伙伴系统分配,小内存使用slub分配。

  • 虚拟空间分为用户态和内核态,32位系统按1:3比例分配,64位系统各分配128T。

  • 每个进程对应一个用户态虚拟空间,存放代码、数据、堆、栈等信息。

  • 内核态虚拟空间共用,分为直接映射区和动态映射。

  • 动态映射允许内核空间逻辑地址映射到高端内存中的任意物理地址。

  • 虚拟地址通过页表转化为物理地址,每个进程有一个页表,内核有一个页表。

  • TLB是CPU中的缓存,用于加速虚拟地址到物理地址的转换。

  • 虚拟内存使用硬盘的swap分区作为虚拟内存,允许运行更大内存的程序。

  • 用户空间只能映射用户内存,内核空间只能被内核使用,用户进程无法直接访问内核空间。

➡️

继续阅读