Unix上的0-copy进程间通信,不使用文件系统

Unix上的0-copy进程间通信,不使用文件系统,unix,filesystems,ipc,mmap,unix-socket,Unix,Filesystems,Ipc,Mmap,Unix Socket,如果我必须在两个进程之间移动适量内存,我可以执行以下操作: 创建要写入的文件 F按所需尺寸运行 mmap并取消链接 按需使用 当另一个进程需要该数据时,它: 通过unix套接字连接到第一个进程 第一个进程通过unix套接字消息发送文件的fd mmap fd 按需使用 这允许我们在进程之间移动内存,而无需任何拷贝—但创建的文件必须位于内存装载的文件系统上,否则我们可能会受到磁盘攻击,从而降低性能。有没有一种不使用文件系统就可以做这样的事情?一个类似malloc的函数返回一个fd和一个指针就

如果我必须在两个进程之间移动适量内存,我可以执行以下操作:

  • 创建要写入的文件
  • F按所需尺寸运行
  • mmap并取消链接
  • 按需使用
当另一个进程需要该数据时,它:

  • 通过unix套接字连接到第一个进程
  • 第一个进程通过unix套接字消息发送文件的fd
  • mmap fd
  • 按需使用
这允许我们在进程之间移动内存,而无需任何拷贝—但创建的文件必须位于内存装载的文件系统上,否则我们可能会受到磁盘攻击,从而降低性能。有没有一种不使用文件系统就可以做这样的事情?一个类似malloc的函数返回一个fd和一个指针就可以了


[Edit]拥有一个文件描述符还提供了一种由内核维护的引用计数机制。

共享内存(虽然有些不同,但结果相同)有什么问题吗?对于任何这样的系统,当进程访问内存时,您必须担心进程之间的协调,但对于内存映射文件也是如此。

共享内存(虽然有些不同,但最终结果相同)有什么问题吗?对于任何这样的系统,当进程访问内存时,您必须担心进程之间的协调,但对于内存映射文件也是如此。

?SystemV共享内存不是被认为过时了吗?很少使用吗?很可能。淘汰的我不这么认为,我也不知道任何证据。@Penz:SystemV共享内存比POSIX更像SUS(单一Unix规范),但在网站上列出时没有任何“obs”标记。?SystemV共享内存不是被认为过时了吗?很少使用吗?很可能。淘汰的我不这么认为,我也不知道这方面的任何证据。@Penz:SystemV共享内存比POSIX更像SUS(单一Unix规范),但在网站上列出时没有任何“obs”标记。如果有办法创建匿名共享内存对象并只使用fd,shm_open正是我所寻找的。SystemV还有这个问题和其他问题:持久性需要显式释放,当相同的数据被发送到多个问题时,这可能是一个问题。有了fd,我们就有了免费的引用计数。如果有办法创建一个匿名共享内存对象并只使用fd,那么shm_open正是我想要的。SystemV还有这个问题和其他问题:持久性需要显式释放,当相同的数据被发送到多个问题时,这可能是一个问题。对于fd,我们可以免费获得引用计数。