You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下多进程mmap同一文件时,物理内存何时共享?

Linux下多进程mmap共享物理内存的场景分析

首先明确核心前提:多进程通过mmap共享物理内存的必要条件是指定MAP_SHARED标志,和是否使用同一文件描述符无关——内核是基于文件的inode来关联映射的,不是文件描述符本身。下面针对你提到的三个场景逐一说明:

  • 场景1:每个进程各自打开该文件
    只要所有进程在mmap时都指定了MAP_SHARED,且映射的是文件的同一区域,背后的物理内存就会被共享。哪怕每个进程用自己独立打开的文件描述符,只要这些描述符指向同一个文件(inode相同),内核就会把它们的映射关联到同一份物理页缓存上。

  • 场景2:一个进程以只读方式打开,另一个以可写方式打开
    同样,只要双方都用MAP_SHARED映射同一文件区域,物理内存会共享。但要注意权限匹配:只读打开文件的进程,mmap时不能设置PROT_WRITE权限(会触发EACCES错误);可写打开的进程则可以根据需求设置PROT_READ或PROT_WRITE。一旦映射成功,可写进程对内存的修改会同步到物理页,并最终回写到文件,只读进程也能看到这些修改。

  • 场景3:一个进程以PROT_READ权限mmap,另一个以PROT_WRITE权限mmap
    只要两个进程都使用MAP_SHARED,且映射的是同一文件区域,物理内存就会共享。这里需要保证:设置PROT_WRITE权限的进程,其文件打开权限必须包含可写(否则mmap会失败)。共享后,PROT_WRITE进程的写入操作会直接修改共享物理页,PROT_READ进程能实时读取到更新后的内容,修改最终也会同步到文件中。

内容的提问来源于stack exchange,提问作者Samuel Hapak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:50:33