【问题标题】:Contiguous physical memory using kmalloc on Guest在 Guest 上使用 kmalloc 的连续物理内存
【发布时间】:2018-07-24 20:10:03
【问题描述】:

我正在客户操作系统中实现设备驱动程序。为此,我需要分配一个需要连续物理内存的缓冲区空间。在来宾操作系统中使用 kmalloc 分配缓冲区是否保证连续的物理地址?如果没有,我怎样才能做到这一点?

【问题讨论】:

  • 您分配的内存是否超过一页?
  • 目前,我是。但我可以将其配置为一页缓冲区空间。 @迈克尔汉普顿
  • AFAIK kmalloc() 保证连续的物理内存。例如,您需要它来进行 DMA 传输。但是它提供的区块大小是有上限的。
  • 是否由 linux kvm 处理? @迈克尔汉普顿

标签: memory-management linux-kernel virtualization kvm kmalloc


【解决方案1】:

kmalloc() 将保证连续的物理内存,并且应该用于小对象,如函数文档中所述:

* kmalloc is the normal method of allocating memory
* for objects smaller than page size in the kernel.

对于更大的物理连续分配,您应该改用alloc_pages()

但是,由于您在来宾操作系统中,您将分配的物理内存是来宾看到的,而不是虚拟机管理程序(“真实”的)。分配的内存是否实际上在物理上是连续的,取决于您的管理程序如何将内存暴露给客户操作系统。

【讨论】:

    猜你喜欢
    • 2014-03-28
    • 2012-01-08
    • 1970-01-01
    • 2018-09-10
    • 2010-10-24
    • 2011-05-23
    • 2012-11-28
    • 2015-01-26
    相关资源
    最近更新 更多