【发布时间】:2014-06-01 14:04:16
【问题描述】:
我想无限期地使用 malloc() 分配大部分内存。我可能会触摸记忆很长一段时间,比如说 1 分钟。如何防止内核从进程中获取内存?
我无法重新分配该内存,因为它正在被内核控制之外的另一个设备使用。
【问题讨论】:
标签: linux memory-management kernel
我想无限期地使用 malloc() 分配大部分内存。我可能会触摸记忆很长一段时间,比如说 1 分钟。如何防止内核从进程中获取内存?
我无法重新分配该内存,因为它正在被内核控制之外的另一个设备使用。
【问题讨论】:
标签: linux memory-management kernel
在Linux中,你可以在用户空间分配内存,比如malloc或者mmap,传递给内核,然后在内核中,通过get_user_pages获取对内存的引用。这将防止页面消失,并允许从任何地址空间访问它们作为struct page * 引用(如果CONFIG_HIGHMEM 有效,则需要kmap 和kunmap)。但是,这些页面将不是连续的物理内存,并且它们可能不在 DMA 的合适范围内。
设备要访问的内存通常在内核中分配(例如,使用kmalloc 和GFP_DMA。对于大于页面的分配,kmalloc 也会找到连续的物理页面。一旦获得,kmalloc- ed 内存可以通过remap_pfn_range 映射到用户空间。
【讨论】: