我想在无限期的时间内使用malloc()分配大部分内存。我可能会长时间触摸记忆,让我说1分钟。我如何阻止内核从进程中取出内存?
我无法重新分配该内存,因为它正被内核控件之外的其他设备使用。
答案 0 :(得分:0)
在Linux中,您可以在用户空间中分配内存,例如使用malloc
或mmap
,将其传递给内核,然后在内核中获取对内存的引用get_user_pages
。这将阻止页面消失,并允许从任何地址空间访问它们struct page *
引用(如果kmap
生效,则需要kunmap
和CONFIG_HIGHMEM
)。但是,这些页面不是连续的物理内存,并且它们可能不在DMA的适当范围内。
设备访问的内存通常在内核中分配(例如,使用kmalloc
和GFP_DMA
。对于大于页面的分配,kmalloc
也会查找连续的物理页面。获得的kmalloc
- 内存可以使用remap_pfn_range
映射到用户空间。