Skip to content

内存映射文件

考情分析

内存映射文件在 408 中偶有考查,通常作为选择题的一个选项出现。🔥 低频但需了解。

传统文件 I/O 每次都要经过"用户态 → 内核态 → 拷贝数据"的流程,开销不小。有没有办法让程序直接用指针读写文件内容,就像操作普通内存变量一样?

基本概念

内存映射文件(Memory-Mapped File):将磁盘上的文件内容映射到进程的虚拟地址空间,之后对该区域的读写就等价于对文件的读写。就像在桌面上放了一面"魔法镜"——你在镜面上写字,文件里也跟着变。

工作原理

  1. 进程调用 mmap() 系统调用,指定文件和映射范围
  2. OS 在进程的虚拟地址空间中划出一段区域,建立与文件的映射关系
  3. 此时并不立即读入文件内容
  4. 进程访问映射区域时触发缺页中断 → OS 将对应文件块调入内存
  5. 进程直接用指针读写内存,OS 负责将修改写回文件

与常规文件 I/O 的对比

比较项常规 read/write内存映射 mmap
访问方式系统调用直接内存访问(指针)
数据拷贝内核缓冲区 → 用户缓冲区直接映射,减少拷贝
适用场景顺序/小量读写大文件、随机访问
共享需要额外 IPC 机制多进程可映射同一文件实现共享

内存映射文件用于进程通信

多个进程可以将同一个文件映射到各自的虚拟地址空间:

  • 共享映射:对映射区的修改对其他进程可见,最终写回文件
  • 私有映射:写时复制(Copy-on-Write),修改不影响其他进程

这种机制提供了一种共享内存的实现方式,比消息传递更高效。

与虚拟内存的关系

内存映射文件本质上利用了请求分页机制:

  • 映射区域的页面按需调入(缺页时从文件读取)
  • 内存不足时可以换出(脏页写回文件)
  • 与虚拟内存的页面调度共用同一套机制

考研高频考点

  • 🔥 内存映射文件的基本概念(文件映射到虚拟地址空间)
  • 🔥 与常规 I/O 的区别(减少数据拷贝)
  • 🔥 可用于进程间共享内存

内存映射文件是虚拟内存机制的一个具体应用。最后一个问题:虚拟内存系统整体性能如何分析、抖动怎么预防?下篇收尾。

真题练习

相关真题(3题)

2026Q30选择题2分

共享文件:不同进程中虚拟地址不同但映射到相同物理地址

2025Q31选择题2分

内存映射文件:映射到虚拟地址空间,可用于进程间通信

2023Q30选择题2分

共享内存:不同进程虚拟页号不一定相同,但映射到同一物理页框