虚拟内存

#内核 #内存 #虚拟内存

虚拟内存#

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

为什么需要虚拟内存?#

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

虚拟内存是现代操作系统的基石,理解它对于学习 Linux 内核至关重要。


地址空间布局#

高地址
┌─────────────────┐
│     内核空间      │
├─────────────────┤
│      栈 ↓        │
│        ...       │
│      空闲区域     │
│        ...       │
│      堆 ↑        │
├─────────────────┤
│     BSS 段       │
├─────────────────┤
│     数据段       │
├─────────────────┤
│     代码段       │
└─────────────────┘
低地址
💡 提示

栈向下增长,堆向上增长,中间的空闲区域用于动态分配。


关键概念#

页表(Page Table)

页表是虚拟地址到物理地址的映射表。每个进程都有自己的页表,由内核管理。

TLB(Translation Lookaside Buffer)

TLB 是页表的高速缓存,用于加速地址转换。当 TLB 未命中时,需要查询页表。

缺页中断(Page Fault)

当访问的虚拟地址对应的物理页不在内存中时,会触发缺页中断,内核需要从磁盘加载该页。


学习进度#

虚拟内存 30%
分页机制 20%
内存映射 10%

相关笔记#