linux内核预分配非映射虚拟内存

时间:2014-11-28 09:02:26

标签: linux-kernel virtual-memory memory-mapping

我有以下情况:
qemu-kvm(客人)---有虚拟记忆,得到物理--->
virtio(向主机发送物理地址)---将物理地图映射到主机虚拟内存--->
主机
物理内存已预先分配。是否有方法在主机上预分配非映射虚拟内存,以便不必搜索空闲虚拟地址空间?
如果缓冲区很大,那么这是一个合理的设计问题吗? 我想要的最终结果是用于映射接收缓冲区的虚拟地址空间池 在每个作业之后,我想取消映射它们并将它们发送回池中的虚拟地址空间。

1 个答案:

答案 0 :(得分:0)

要保留虚拟内存范围而不实际向其提交任何物理页面,请将PROT_NONE作为保护参数传递给mmap()。稍后,您可以在该范围内使用mprotect()以在必要时使其可读/可写 - 内核将在首次访问时提交物理页面。完成后,您可以再次使用mprotect()将地址范围的保护状态重置为PROT_NONE