一文剖析 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分区作为虚拟内存,允许运行更大内存的程序。
-
用户空间只能映射用户内存,内核空间只能被内核使用,用户进程无法直接访问内核空间。
➡️