【问题标题】:mmap file between unrelated processes无关进程之间的 mmap 文件
【发布时间】:2014-09-30 00:04:22
【问题描述】:

mmap() 如何在不相关的进程之间工作?

如果我在一个进程中对磁盘上的文件进行 mmap,那么稍后会出现一个进程并从 mmap 中打开文件吗?

我看到有一些方法可以在父进程和子进程之间共享,我指的是相互通信但不是父/子的进程。

谢谢

【问题讨论】:

    标签: linux ipc shared-memory mmap


    【解决方案1】:

    两个独立的进程可以使用 mmap(2) 共享对保存文件数据的内核磁盘块缓存的访问:

    1) 进程 A 打开一个文件,使文件达到所需的大小并在文件中创建一个 mmap(2) 窗口。

    2) 进程 B 打开同一个文件并在同一个文件中创建一个 mmap(2) 窗口。

    3) 现在,相同的内核块缓存数据同时存在于两个进程中。任何一个进程都可以修改数据,并且该数据在另一个进程中即时可用。

    这是 MAP_SHARED 标志旨在提供的问题。

    【讨论】:

    • 好的,谢谢。我无法通过文档判断第二个进程是否必须从第一个分叉出来。
    • 如果进程 A 映射文件,但进程 B 只是读取文件,发生了什么。即使没有调用sync,两个进程是否共享所有更改?
    【解决方案2】:

    mmap 在您的虚拟地址空间中创建一个新映射。

    你说的是什么好处,多解释一下。

    process -1 mmap - a.txt
    process -2 did not do mmap then it cannot access a.txt unless he opens a.txt using open/FILE and gets a file pointer.
    

    【讨论】:

    • 如果操作系统已将 a.txt 映射到进程 1 可以访问的内存中的某些页面,有没有办法让进程 2 访问这些页面而无需重新映射 a.txt?
    • 我想不出办法,除非您将一个虚拟地址转换为另一个虚拟地址。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2011-06-26
    • 2015-05-03
    • 1970-01-01
    • 2014-12-03
    相关资源
    最近更新 更多