我想了解共享内存是否从内核空间获得内存分配,那么为什么它不会通过上下文切换?如果不是来自内核空间,则从分配此内存的位置。
在大多数现代计算机中,内存不会从内核空间分配。相反,内核找到了物理内存的页面,然后将其映射到该过程当前未使用的虚拟地址的过程中。过程中的物理地址和虚拟地址不同。因此,内存始终是"用户空间"内存。这是虚拟内存子系统的一部分。
在过程之间共享物理页面,将内核映射到两个过程中。通常在同一虚拟地址中。完成此操作后,内核将不再涉及,因为两个过程在该位置都具有相同的物理内存。因此,任何更改都会显示出两者。
注意:内核内存通常仅可用于内核,并且是一个不同的概念。
当shmget((调用需要某些内存的要求时,它使上下文从用户转换为内核空间,系统呼叫服务例程在内核中运行,并且从用户空间传递的参数要回到所需的内存空间[并且此内存页面不是内核空间的一部分,它尚未映射到过程内存中],该空间尚未映射到Process local地址空间
因此,这意味着内存管理中有保留的内存,这不是内核内存的一部分,也不是在过程本地地址空间中映射的,并且此内存用于促进此类请求。