虚拟内存
Linux 虚拟内存机制和地址空间布局
#内核
#内存
#虚拟内存
Linux 使用虚拟内存机制,每个进程都有自己独立的虚拟地址空间。
为什么需要虚拟内存?
- 隔离性:每个进程有独立的地址空间,互不干扰
- 安全性:防止进程访问其他进程的内存
- 灵活性:可以使用比物理内存更大的地址空间
✨ 技巧
虚拟内存是现代操作系统的基石,理解它对于学习 Linux 内核至关重要。
地址空间布局
进程虚拟地址空间示意(高地址在上) 图表加载后显示;也可展开查看下方源码。
查看 Mermaid 源码
flowchart TB accTitle: 进程虚拟地址空间示意(高地址在上) K["高地址 · 内核空间"] --- S["栈 · 向低地址增长 ↓"] S --- F["空闲区域"] --- H["堆 · 向高地址增长 ↑"] H --- B["BSS 段"] --- D["数据段"] --- T["低地址 · 代码段"]
这是简化的布局示意,连线表示地址空间的相邻顺序,不表示执行流程或精确内存大小。
💡 提示
栈向下增长,堆向上增长,中间的空闲区域用于动态分配。
关键概念
页表(Page Table)
页表是虚拟地址到物理地址的映射表。每个进程都有自己的页表,由内核管理。
TLB(Translation Lookaside Buffer)
TLB 是页表的高速缓存,用于加速地址转换。当 TLB 未命中时,需要查询页表。
缺页中断(Page Fault)
当访问的虚拟地址对应的物理页不在内存中时,会触发缺页中断,内核需要从磁盘加载该页。
学习进度
虚拟内存 30%
分页机制 20%
内存映射 10%