vmalloc() 在哪个进程的页表中分配新内存?

vmalloc() 在哪个进程的页表中分配新内存?

我猜测它会在进行系统调用的进程的内存中执行此操作。但是,如果是这样,其余进程如何使用该空间?内核如何知道缓冲区指向虚拟地址空间,而不是真实的地址空间?但这就像占用了一些通用内核内容的进程空间,不是吗?

答案1

vmalloc是一个内核分配器,它(不一定)与进程相关。大多数时候,内核还看到虚拟内存,而不是线性内存。的特殊性vmalloc在于它只分配连续的虚拟内存,而不是物理内存;kmalloc分配连续的虚拟内存和物理内存。两者都返回虚拟地址。

vmalloc与 不同的是kmalloc,必须分配新的页表条目(kmalloc从预映射区域分配);它们被映射在页表树的共享部分,或者当启用 KPTI 时,位于树的内核私有部分。

Linux 设备驱动程序第 8 章了解详细信息。

相关内容