Linux内存架构与页面缓存位置
Linux内存空间划分
1
2
3
4
5
6
7
8
9
10系统内存布局:
┌────────────────────┐
│ 用户空间 │
│ (User Space) │ <- 应用程序、JVM堆等
│ │ 0 ~ 3G (32位系统)
├────────────────────┤
│ 内核空间 │ <- 内核代码、内核数据结构
│ (Kernel Space) │ 页面缓存位于此处
│ │ 3G ~ 4G (32位系统)
└────────────────────┘页面缓存的位置
- 位于内核空间
- 由内核直接管理
- 对用户空间透明
- 通过系统调用访问
为什么在内核空间
1
2
3
4
5
6
7
8
9
10
11
12原因:
1. 安全性:
- 防止用户程序直接修改缓存
- 保护系统关键数据
2. 性能:
- 避免用户态和内核态切换
- 直接与磁盘I/O子系统交互
3. 统一管理:
- 集中管理所有进程的文件访问
- 优化整体系统性能访问机制
1
2
3
4
5
6
7
8
9
10应用程序访问文件数据流程:
用户空间 内核空间
┌──────┐ 系统调用 ┌───────────┐
│ App │ ==========> │页面缓存 │
└──────┘ └───────────┘
↕
┌───────────┐
│ 磁盘 │
└───────────┘内存映射(mmap)机制
1
2
3
4
5
6
7
8
9
10
11使用mmap后:
用户空间 内核空间
┌──────┐ 映射 ┌───────────┐
│ App │ <======> │页面缓存 │
└──────┘ └───────────┘
特点:
- 在用户空间直接映射内核的页面缓存
- 避免了数据复制
- 仍然由内核管理