在 Linux 内核中分配用户空间内存
Posted
技术标签:
【中文标题】在 Linux 内核中分配用户空间内存【英文标题】:Allocating user space memory in Linux Kernel 【发布时间】:2021-10-29 02:36:30 【问题描述】:是否允许从内核空间分配用户空间内存?我知道 Linux 中的进程使用虚拟内存和虚拟地址。并且有一种保护不允许使用不同进程的内存(它会引发分段错误)。那么,有没有办法分配一个缓冲区并返回一个有效的指向它的指针给用户空间进程呢?
【问题讨论】:
“那么,有没有办法分配一个缓冲区并返回一个指向它的有效指针给用户空间进程?” - Linux 内核通过mmap 系统调用为用户分配内存。 【参考方案1】:是否允许从内核空间分配用户空间内存?我知道 Linux 中的进程使用虚拟内存和虚拟地址。并且有一种保护不允许使用不同进程的内存(它会引发分段错误)。那么,有没有办法分配一个缓冲区并返回一个有效的指向它的指针给用户空间进程呢?
内存分配例程通常有一个返回值,它是内核分配值的指针(在虚拟内存坐标中)。如果用户不要求新内存,那么在用户空间为他分配内存而不告诉它分配在哪里是不正常的......
但你可以做到。我认为知道如何做到这一点的最好方法是研究mmap(2)
系统调用是如何工作的(因为它将分配的内存映射到用户空间,并返回一个用户空间指针让用户知道它被分配到哪里),并使用用于分配用户内存的内部内核函数。内核 malloc 组例程需要知道如何将内存页面(即使对于内核虚拟空间,因为内核也在虚拟地址内存空间中运行)映射到虚拟内存地址。不这样做会导致内存无法访问。
【讨论】:
以上是关于在 Linux 内核中分配用户空间内存的主要内容,如果未能解决你的问题,请参考以下文章
Linux 内核 内存管理内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )