Linux内存架构与页面缓存位置

  1. Linux内存空间划分

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    系统内存布局:
    ┌────────────────────┐
    │ 用户空间 │
    │ (User Space) │ <- 应用程序、JVM堆等
    │ │ 0 ~ 3G (32位系统)
    ├────────────────────┤
    │ 内核空间 │ <- 内核代码、内核数据结构
    │ (Kernel Space) │ 页面缓存位于此处
    │ │ 3G ~ 4G (32位系统)
    └────────────────────┘
  2. 页面缓存的位置

  • 位于内核空间
  • 由内核直接管理
  • 对用户空间透明
  • 通过系统调用访问
  1. 为什么在内核空间

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    原因:
    1. 安全性:
    - 防止用户程序直接修改缓存
    - 保护系统关键数据

    2. 性能:
    - 避免用户态和内核态切换
    - 直接与磁盘I/O子系统交互

    3. 统一管理:
    - 集中管理所有进程的文件访问
    - 优化整体系统性能
  2. 访问机制

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    应用程序访问文件数据流程:

    用户空间 内核空间
    ┌──────┐ 系统调用 ┌───────────┐
    │ App │ ==========> │页面缓存 │
    └──────┘ └───────────┘

    ┌───────────┐
    │ 磁盘 │
    └───────────┘
  3. 内存映射(mmap)机制

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    使用mmap后:

    用户空间 内核空间
    ┌──────┐ 映射 ┌───────────┐
    │ App │ <======> │页面缓存 │
    └──────┘ └───────────┘

    特点:
    - 在用户空间直接映射内核的页面缓存
    - 避免了数据复制
    - 仍然由内核管理