当前位置:嗨网首页>书籍在线阅读

01-System V共享内存

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

第48章 System V共享内存

本章将介绍System V共享内存。共享内存允许两个或多个进程共享物理内存的同一块区域(通常被称为段)。由于一个共享内存段会成为一个进程用户空间内存的一部分,因此这种IPC机制无需内核介入。所有需要做的就是让一个进程将数据复制进共享内存中,并且这部分数据会对其他所有共享同一个段的进程可用。与管道或消息队列要求发送进程将数据从用户空间的缓冲区复制进内核内存和接收进程将数据从内核内存复制进用户空间的缓冲区的做法相比,这种IPC技术的速度更快。(每个进程也存在通过系统调用来执行复制操作的开销。)

另一方面,共享内存这种IPC机制不由内核控制意味着通常需要通过某些同步方法使得进程不会出现同时访问共享内存的情况(如两个进程同时执行更新操作或者一个进程在从共享内存中获取数据的同时另一个进程正在更新这些数据)。System V信号量天生就是用来完成这种同步的一种方法。当然,还可以使用其他方法,如POSIX信号量(第53章)和文件锁(第55章)。

在mmap()术语中,一块内存区域会被映射到一个地址,而在System V术语中,一个共享内存段是被附加到一个地址上的。这些术语是等价的,它们在术语上之所以存在差异是因为这两组API的起源不同。