TLPI-Chapter 48 System V 共享内存

共享内存允许两个或多个进程共享物理内存的同一块区域(通常称为段)。由于一个共享内存段会称为一个进程用户空间内存的一部分,因此这种IPC机制无需内核介入。所有需要做的就是让一个进程将数据复制进共享内存中,并且这部分数据会对其他所有共享同一个段的进程可用。

与管道或消息队列要求发送进程将数据从用户空间的缓冲区复制进内核内存和接收进程将数据从内核内存复制进用户空间的缓冲区的做法相比,这种IPC技术的速度更快。

共享内存允许两个或多个进程共享内存的同一个分页。通过共享内存交换数据无需内核干涉。一旦一个进程将数据复制进一个共享内存段中之后,数据将会立刻对其它进程可以见。共享内存是一种快速的IPC机制,尽管这种速度上的提升通常会因必须要使用某种同步技术而抵消掉一部分,如使用一个System V信号量来同步对共享内存的访问。

在附加一个共享内存段时推荐的做法是允许内核选择将段附加在进程的虚拟地址空间的何处。这意味着段在不同进程中虚拟地址可能是不同的。正因为这个原因,所有对段中地址的引用都应该表示成为相对偏移量,而不是一个绝对指针。

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章