进程A使用shmget创建了一个名为“1234”的共享内存。之后,进程A使用shmat将内存附加到自身。
进程B也使用shmat将对应于“1234”的共享内存附加到自己上。
那么,“附加”到底是什么意思?是否存在两份相同的内存副本?如果不是,那么这段内存具体存在于哪里呢?
进程A使用shmget创建了一个名为“1234”的共享内存。之后,进程A使用shmat将内存附加到自身。
进程B也使用shmat将对应于“1234”的共享内存附加到自己上。
那么,“附加”到底是什么意思?是否存在两份相同的内存副本?如果不是,那么这段内存具体存在于哪里呢?
shmget
)会分配一块不属于任何特定进程的内存块。它只是存在那里。从内核的角度来看,使用它的人并不重要。因此,进程必须请求访问它 - 这就是shmat
的作用。通过这样做,内核将共享内存映射到进程的虚拟内存空间中。这样,进程就可以读取和写入它。因为它是相同的内存,所有“连接”到它的进程都看到相同的内容。任何进程所做的更改也会对其他进程可见。