为什么共享内存(在 ipc 中)不需要上下文切换?它是来自内核 space 的内存映射到用户 space 吗?

Why does a shared memory (in ipc) not require context switching ? Is it a memory from kernel space that gets mapped to user space?

我想了解如果共享内存从内核获得内存分配 space 那么为什么它不通过上下文切换?如果它不是来自内核 space 那么这个内存是从哪里分配的。

当 shmget() 调用需要一些内存时,它会进行从用户到内核的上下文切换 space,系统调用服务例程在内核中运行,并使用从用户传递的参数 space 恢复所需的内存 space [并且此内存页不是内核的一部分 space 只是它尚未映射到进程内存中] 它被映射到进程本地地址 space

所以这意味着在内存管理中有一个保留内存,它不是内核内存的一部分,也没有映射到进程本地地址space,并且这个内存用于促进这样的请求。

在大多数现代计算机中,内存不是从内核分配的 space。相反,内核找到一个物理内存页面,然后将其映射到进程当前未使用的虚拟地址处。进程中的物理地址和虚拟地址不一样。所以内存永远是"user space"内存。这是 虚拟内存 子系统的全部内容。

为了在进程之间共享物理页面,内核将页面映射到两个进程。通常在两者的相同虚拟地址。完成此操作后,内核将不再涉及,因为两个进程在该位置映射了相同的物理内存。因此,两者都会显示任何更改。

注意:内核内存是通常只有内核才能访问的内存,是一个不同的概念。