shmget() 和 shmat()

shmget() 和 shmat()

使用shmget(),我们可以分配一定大小(以字节为单位)的共享内存块,并使用shmat(),我们将此共享内存块附加到调用进程的地址空间。

我需要检查我的理解:
我们有一个进程使用和创建并连接一个共享内存shmget()shmat()另一个进程使用将该共享内存附加到其地址空间shmat()

现在这个共享内存的返回地址(使用shmat())在两个进程中是不同的,因为这是一个虚拟地址。

然而,共享内存块本身具有单个基本物理地址,该地址映射到共享该内存的进程的不同虚拟地址。它是否正确?

答案1

对,那是正确的。这是一个想法共享内存不同的进程可以映射相同的实际内存;由于虚拟寻址,这些地址不必相同。

您甚至可以将相同的共享内存页面两次映射到同一进程的不同地址 - 例如,GNU Radio(经典)就是这样的双映射缓冲区以模拟环形缓冲区,其中在末尾写入意味着在开头写入

相关内容