首页 > 解决方案 > 在 Guest 上使用 kmalloc 的连续物理内存

问题描述

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

标签: memory-managementlinux-kernelvirtualizationkvmkmalloc

解决方案


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

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

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

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


推荐阅读