C语言 在Linux内核中分配用户空间内存



允许从内核空间分配用户空间内存吗?我知道Linux中的进程使用虚拟内存和虚拟地址。并且有一个不允许使用不同进程内存的保护(这会引起分段故障)。所以,有没有办法分配一个缓冲区,并返回一个有效的指针,它的用户空间进程?

允许从内核空间分配用户空间内存吗?我知道Linux中的进程使用虚拟内存和虚拟地址。并且有一个不允许使用不同进程内存的保护(这会引起分段故障)。所以,有没有办法分配一个缓冲区,并返回一个有效的指针,它的用户空间进程?

内存分配例程通常有一个返回值,该值是内核分配值的指针(在虚拟内存坐标中)。如果用户没有请求新的内存,那么在用户空间中为他分配内存而不告诉它已经分配到哪里是不正常的....

但是你可以做到。我认为了解如何做到这一点的最佳方法是研究mmap(2)系统调用是如何工作的(因为它将已分配的内存映射到用户空间,并返回用户空间指针,以便用户知道它已被分配到哪里),并使用用于分配用户内存的内部内核函数。内核malloc例程组需要知道如何将内存页映射(即使是内核虚拟空间,因为内核也运行在虚拟地址内存空间中)到虚拟内存地址。不这样做会导致内存不可访问。

最新更新