【发布时间】:2018-09-16 18:56:43
【问题描述】:
我在两个进程之间映射了共享内存(由 /dev/shm 支持)。
7ffff7ff3000-7ffff7ff7000 rw-s 00000000 00:16 176796 /dev/shm/shdmem
一个进程正在对内存的第一页进行 mprotect 并查看正确的配置
7ffff7ff3000-7ffff7ff4000 ---s 00000000 00:16 176796 /dev/shm/shdmem
7ffff7ff4000-7ffff7ff7000 rw-s 00001000 00:16 176796 /dev/shm/shdmem
但第二个仍然只能看到 rw 区域:
7ffff7ff3000-7ffff7ff7000 rw-s 00000000 00:16 176796 /dev/shm/shdmem
这是正确的 Linux 行为吗?我在想,如果我共享同一个内存区域,我可以保护我的内存免受不同进程的使用? (当然进程 B 可以轻松修改共享内存,但是发出 mprotect 的进程 A 会出现段错误)
【问题讨论】:
-
您需要在协作进程之间执行IPC,这样当一个进程想要对某个区域实施保护时,会向所有其他需要这种保护的进程发送一条消息。然后每个进程保护该区域。这种 IPC 通信可以在独立于主进程的单独线程中完成,但每个进程必须自己标记保护。
-
jxh:这是否意味着:如果内存是共享的,页面的权限是每个进程而不是每个物理页面?
-
是的。或者,您可以使用线程。那么一项更改将影响所有线程,因为所有线程都在同一个进程中。
-
感谢您的帮助!如果您愿意,可以将其发布为答案,我将非常乐意接受!
标签: linux memory process shared-memory virtual-memory