写给新手的MMU工作原理
原文中文,约3100字,阅读约需8分钟。
📝
内容提要
本文介绍了Linux中虚拟地址到物理地址的转换过程和内存管理单元(MMU)的工作原理。进程通过页表将虚拟地址映射到物理地址,页表存储在物理内存中,通过页表基址寄存器和索引找到物理地址。多级页表可以减少内存占用。
🔎
延伸解读
TLB与多级页表:性能与空间的权衡
文章指出,页表存储在物理内存中,每次地址转换都需访问内存,速度较慢。TLB作为缓存可加速页表访问。同时,多级页表能减少内存占用,通常只需将一级页表常驻内存,二级页表按需分配,缺页时再创建。这种设计在空间和性能之间取得了平衡,是MMU高效工作的关键。
页表基址寄存器:MMU的导航起点
MMU需要知道页表在物理内存中的位置,这由CPU提供的页表基址寄存器指示。不同架构的寄存器不同:x86使用CR3,ARM-v8使用TTBR,RISC-V使用SATP。该寄存器存储第一级页表的基地址,MMU通过它开始逐级查找,最终完成虚拟地址到物理地址的转换。
多级页表查找:通用原理与架构差异
文章以二级页表为例,说明MMU如何通过页表基址寄存器找到PGD,再结合虚拟地址中的索引找到PTE,最终获得PFN。虽然页表级数、地址格式和PTE格式因系统架构而异,但MMU的核心工作原理一致:逐级查找,最终定位物理地址。理解这一点,就能举一反三。
❓
Q&A
MMU的主要功能是什么?
MMU的主要功能是将虚拟地址转换为物理地址。
Linux系统中如何管理内存?
Linux系统主要通过分页机制管理内存,解决内存碎片问题。
虚拟地址和物理地址的组成部分是什么?
虚拟地址由虚拟页面号和虚拟地址偏移组成,物理地址由物理页帧号和物理地址偏移组成。
页表在内存中的作用是什么?
页表存储虚拟页面号到物理页帧号的映射关系,MMU通过页表进行地址转换。
多级页表有什么优势?
多级页表可以减少内存占用,通常只需将一级页表存储在物理内存中。
TLB是什么,它的作用是什么?
TLB是用于加速页表访问的缓存,可以提高地址转换的速度。
🏷️