一文剖析 Linux 内核的内存管理
💡
原文中文,约4300字,阅读约需11分钟。
📝
内容提要
Linux系统中的内存管理涉及物理内存的组织、虚拟地址的作用和如何组织虚拟地址。物理内存按照页面、区域和节点组织,内存分配分为大内存和小内存分配。虚拟地址对应虚拟空间,用户态和内核态分别分配虚拟空间。虚拟地址通过页表映射为物理地址,TLB用于缓存虚拟地址和物理地址的映射。虚拟内存将硬盘中的swap分区作为虚拟内存,可以运行更大内存的程序。用户空间只能映射用户内存,内核空间只能被内核使用。
🎯
关键要点
- 内存管理的核心任务是对物理内存进行有效组织,包括内存的分配和回收。
- 引入虚拟地址的概念,避免用户进程直接操作物理地址带来的不稳定和安全隐患。
- 每个进程被赋予独立的地址空间,通过逻辑地址与物理地址的映射进行内存分配。
- 物理内存在Linux系统中按照页面、区域和节点组织。
- 物理内存分为大内存和小内存分配,大内存利用伙伴系统,小内存利用slub分配。
- 虚拟地址对应虚拟空间,分为用户态和内核态,32位系统和64位系统的分配比例不同。
- 用户态虚拟空间存放进程的代码、数据、堆、栈等信息,内核态虚拟空间共用。
- 内核空间通过直接映射和动态映射来管理物理内存,动态映射允许内核空间映射高端内存。
- 虚拟地址通过页表映射到物理地址,每个进程对应一个页表,内核只有一个页表。
- TLB用于缓存虚拟地址和物理地址的映射,提高地址转换的效率。
- 虚拟内存利用硬盘的swap分区作为虚拟内存,允许运行更大内存的程序。
- 用户空间只能映射用户内存,内核空间只能被内核使用,用户进程不能直接访问内核空间。
➡️