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