Posix 共享内存与映射文件

发布于 2024-08-21 06:41:10 字数 172 浏览 11 评论 0原文

了解了一些关于这个主题的知识后,谁能告诉我,POSIX 共享内存 (shm_open) 和 POSIX 映射文件 (mmap) 之间的真正区别是什么?

两者似乎都使用 /dev/tmpfs 子系统,而不是旧的 IPC 机制。

那么使用 mmap 文件比共享内存有什么优势吗?

谢谢。

Having learnt a bit about the subject, can anyone tell, what is the real difference between POSIX shared memory (shm_open) and POSIX mapped files (mmap)?

Both seems to use the /dev/tmpfs subsystem, rather then older IPC mechanism.

So is there any advantage of using mmap file over shared memory?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

为人所爱 2024-08-28 06:41:11

基本上共享内存是 IPC 的一种形式。共享区域是在 /dev/shm 中创建的,它仅在内存(RAM)中创建,并且不需要磁盘操作,因此它是一种更快的 IPC 方法。尽管 IPC 可以使用以下方式完成磁盘文件,然后也使用 mmap,但它会相对较慢。或者,您始终可以将 MAP_ANONYMOUS 与 mmap 一起使用,它不备份任何磁盘文件。

Basically shared memory is an form of IPC.The shared region is created in /dev/shm which is created in memory only(RAM) and it requires no disk operations, hence it is a faster method of IPC.Although IPC can be done using disk file and then using mmap too, but it would be comparetively slow.Alternatively you can always use MAP_ANONYMOUS with mmap which does not back up with any disk file.

月亮坠入山谷 2024-08-28 06:41:10

区别并不总是很清楚。共享内存可以通过内存映射文件来实现。 可以在这里找到关于此的优秀文章(如适用于 C/C++ 编程)。

The distinction is not always clear. Shared memory can be implemented via memory mapped files. An excellent write on this can be found here (as applied to C/C++ programming).

格子衫的從容 2024-08-28 06:41:10

我的理解是,共享内存构建在映射文件之上,但是 此页面似乎表明使用内存映射文件作为共享内存的能力是有条件的。

mmap() 函数的使用受到 QSHRMEMCTL 系统值的限制。当该系统值为 0 时,mmap() 函数可能无法创建具有 PROT_WRITE 功能的共享映射。从本质上讲,这可以防止创建可能更改所映射的流文件内容的内存映射。如果flags参数指定MAP_SHARED,prot参数指定PROT_WRITE并且QSHRMEMCTL系统值为0,则mmap()函数将失败并产生错误数EACCES结果。

My understanding is that that shared memory is built on top of mapped files, but This Page seems to indicate that the ability to use memory mapped files as shared memory is conditional.

The use of the mmap() function is restricted by the QSHRMEMCTL System Value. When this system value is 0, the mmap() function may not create a shared mapping having with PROT_WRITE capability. Essentially, this prevents the creation of a memory map that could alter the contents of the stream file being mapped. If the flags parameter indicated MAP_SHARED, the prot parameter specifies PROT_WRITE and the QSHRMEMCTL system value is 0, then the mmap() functions will fail and an error number of EACCES results.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文