虚拟内存
#内核
#内存
#虚拟内存
虚拟内存#
Linux 使用虚拟内存机制,每个进程都有自己独立的虚拟地址空间。
为什么需要虚拟内存?#
- 隔离性:每个进程有独立的地址空间,互不干扰
- 安全性:防止进程访问其他进程的内存
- 灵活性:可以使用比物理内存更大的地址空间
✨ 技巧
虚拟内存是现代操作系统的基石,理解它对于学习 Linux 内核至关重要。
地址空间布局#
高地址
┌─────────────────┐
│ 内核空间 │
├─────────────────┤
│ 栈 ↓ │
│ ... │
│ 空闲区域 │
│ ... │
│ 堆 ↑ │
├─────────────────┤
│ BSS 段 │
├─────────────────┤
│ 数据段 │
├─────────────────┤
│ 代码段 │
└─────────────────┘
低地址
💡 提示
栈向下增长,堆向上增长,中间的空闲区域用于动态分配。
关键概念#
页表(Page Table)
页表是虚拟地址到物理地址的映射表。每个进程都有自己的页表,由内核管理。
TLB(Translation Lookaside Buffer)
TLB 是页表的高速缓存,用于加速地址转换。当 TLB 未命中时,需要查询页表。
缺页中断(Page Fault)
当访问的虚拟地址对应的物理页不在内存中时,会触发缺页中断,内核需要从磁盘加载该页。
学习进度#
虚拟内存 30%
分页机制 20%
内存映射 10%