Linux 共享内存:shmget()/共享内存是如何工作的?

Linux 共享内存:shmget()/共享内存是如何工作的?,linux,memory-management,posix,shared-memory,Linux,Memory Management,Posix,Shared Memory,通过阅读shmget()的手动页面,我了解到shmget()调用在内存中分配了#个页面,这些页面可以在进程之间共享 它是否将创建映射到进程本地地址空间的内核内存页? 或者,是否为该段保留了相同的进程内存页,并将为其他连接的进程共享相同的内存页 我的假设是: 调用shmget()时,内核将保留一定数量的段/页 调用shmat()时,保留段映射到进程的地址空间/页 当新进程附加到同一段时,先前创建的内核段将映射到新进程的地址空间 这是正确的吗?除了“内核内存页”这句话之外,这个想法或多或少是正确

通过阅读shmget()的手动页面,我了解到shmget()调用在内存中分配了#个页面,这些页面可以在进程之间共享

它是否将创建映射到进程本地地址空间的内核内存页? 或者,是否为该段保留了相同的进程内存页,并将为其他连接的进程共享相同的内存页

我的假设是:

  • 调用shmget()时,内核将保留一定数量的段/页
  • 调用shmat()时,保留段映射到进程的地址空间/页
  • 当新进程附加到同一段时,先前创建的内核段将映射到新进程的地址空间

这是正确的吗?

除了“内核内存页”这句话之外,这个想法或多或少是正确的。内存管理中保留/分配的内存不是专门为内核设计的。它只是“内存页”,还没有映射到进程内存中