【问题标题】:Preventing Linux kernel from taking allocated memory from a process防止 Linux 内核从进程中获取分配的内存
【发布时间】:2014-06-01 14:04:16
【问题描述】:

我想无限期地使用 malloc() 分配大部分内存。我可能会触摸记忆很长一段时间,比如说 1 分钟。如何防止内核从进程中获取内存?

我无法重新分配该内存,因为它正在被内核控制之外的另一个设备使用。

【问题讨论】:

    标签: linux memory-management kernel


    【解决方案1】:

    在Linux中,你可以在用户空间分配内存,比如malloc或者mmap,传递给内核,然后在内核中,通过get_user_pages获取对内存的引用。这将防止页面消失,并允许从任何地址空间访问它们作为struct page * 引用(如果CONFIG_HIGHMEM 有效,则需要kmapkunmap)。但是,这些页面将不是连续的物理内存,并且它们可能不在 DMA 的合适范围内。

    设备要访问的内存通常在内核中分配(例如,使用kmallocGFP_DMA。对于大于页面的分配,kmalloc 也会找到连续的物理页面。一旦获得,kmalloc- ed 内存可以通过remap_pfn_range 映射到用户空间。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2013-11-14
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 2013-10-24
      相关资源
      最近更新 更多