我猜测它会在进行系统调用的进程的内存中执行此操作。但是,如果是这样,其余进程如何使用该空间?内核如何知道缓冲区指向虚拟地址空间,而不是真实的地址空间?但这就像占用了一些通用内核内容的进程空间,不是吗?
答案1
vmalloc
是一个内核分配器,它(不一定)与进程相关。大多数时候,内核还看到虚拟内存,而不是线性内存。的特殊性vmalloc
在于它只分配连续的虚拟内存,而不是物理内存;kmalloc
分配连续的虚拟内存和物理内存。两者都返回虚拟地址。
vmalloc
与 不同的是kmalloc
,必须分配新的页表条目(kmalloc
从预映射区域分配);它们被映射在页表树的共享部分,或者当启用 KPTI 时,位于树的内核私有部分。
看Linux 设备驱动程序第 8 章了解详细信息。