虚拟内存

Linux 虚拟内存机制和地址空间布局

#内核 #内存 #虚拟内存

Linux 使用虚拟内存机制,每个进程都有自己独立的虚拟地址空间。

为什么需要虚拟内存?

  1. 隔离性:每个进程有独立的地址空间,互不干扰
  2. 安全性:防止进程访问其他进程的内存
  3. 灵活性:可以使用比物理内存更大的地址空间
✨ 技巧

虚拟内存是现代操作系统的基石,理解它对于学习 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%

相关笔记

流程图