【发布时间】:2011-05-22 15:26:40
【问题描述】:
我猜这个问题是针对 Linux/Unix 系统编程专家的(不幸的是,我还不是那种人;))。
我正在构建一个运行在 Linux/Unix 多核机器上的系统,其中进程通过共享内存相互通信(速度很重要 - 尽可能减少对内核的调用)。 当一个进程请求与另一个进程通信时,动态创建用于通信的共享内存“通道”——每个进程都有一个监听线程,接收和“接受”这些请求,然后创建/初始化共享内存通道。对于进程 a 和 b,创建了两个通道(共享内存区域) - 一个通道用作 a 的“输出”和“输入” " 到 b 反之亦然。
在创建通信通道时,进程 a 必须具有对其相应“输出”通道的 R/W 访问权限,并且只有 R 对其相应“输入”通道的访问权限。其他进程必须无法获得对其他进程对之间共享通道的 W 访问权限(最好它们甚至不应该拥有 R 访问权限)。
您能提出什么解决方案?
我在想:
- 定义我自己的系统调用(目前不推荐)
- 使用文件系统固有的文件权限来施加此访问权限
对于第二种解决方案,想法是在不同的用户 ID 下运行进程,并为每个进程对使用动态创建组,并相应地为每个共享内存描述符分配文件权限(R 到组,R/W 到写入进程, - 其他人)。
第二种解决方案可行吗?有没有更好的解决方案(例如涉及一些我不知道的系统调用)?
非常感谢您的宝贵时间和帮助。
【问题讨论】:
-
您是否考虑过 mmap 文件或命名管道?它们比 SysV ipc 容易得多。
-
是的,实际上使用了共享内存对象的映射
标签: linux unix ipc shared-memory