Process 锁定的共享内存是否可以在地址空间中移动?

Process 锁定的共享内存是否可以在地址空间中移动?,process,kernel,fork,shared-memory,Process,Kernel,Fork,Shared Memory,假设我使用shmget创建一个共享内存段,然后使用shmctl和SHM\u lock标志锁定它。锁定标志确保不会将段移动到交换,但它是否保证不会更改地址?若否,为何/何时更改地址 在阅读有关mlock的文章时,我发现一个被锁定的内存段仍然可以更改地址(虽然我也不知道为什么/什么时候会发生这种情况),但如果它也是共享的,那么地址移动似乎是出乎意料的 当你说“更改地址”时,你是指虚拟地址还是物理地址?如果你指的是虚拟地址,是什么让你认为它是可能的?虚拟地址是进程分配的内存上的唯一句柄;对他们来说,在

假设我使用
shmget
创建一个共享内存段,然后使用
shmctl
SHM\u lock
标志锁定它。锁定标志确保不会将段移动到交换,但它是否保证不会更改地址?若否,为何/何时更改地址


在阅读有关
mlock
的文章时,我发现一个被锁定的内存段仍然可以更改地址(虽然我也不知道为什么/什么时候会发生这种情况),但如果它也是共享的,那么地址移动似乎是出乎意料的

当你说“更改地址”时,你是指虚拟地址还是物理地址?如果你指的是虚拟地址,是什么让你认为它是可能的?虚拟地址是进程分配的内存上的唯一句柄;对他们来说,在这个过程背后接受改变是没有任何意义的。如果你指的是实际地址,你为什么会在意?用户空间进程不需要知道这些。抱歉,没有适当的背景是没有意义的。有些硬件性能计数器直接写入内存,由于它们未连接到进程,因此在计数器生成结果时必须执行拥有内存的进程,否则虚拟到物理映射将不正确。内存不是“更改地址”,而是在进程切换时被取消映射。在共享内存的情况下,所有附加的进程都可以处于非活动状态,因此也可以取消映射内存