我在 linux 上使用 gcc 编译了一个静态程序并在 kvm 下运行它。我检查了客户内存中这个进程的每个页表条目,发现有些页面已经映射,有些没有。这是按需分页的功能吗?我的问题是是否有一种解决方案可以使所有 pte 都存在并映射到页表中?例如我 fork 一个新进程并加载一个新的 elf 二进制文件,如何使每个页面都映射到这个新进程的页表中。谢谢
问问题
152 次
2 回答
4
试试下面的系统调用:
#include <sys/mman.h>
int mlockall(int flags);
使用 MCL_FUTURE 设置 flags 参数,它将所有当前和未来的页面锁定到内存中。您可以在此处找到有关它的更多信息,或者只需键入“man mlockall”,您将获得大量信息。
于 2010-07-29T07:01:48.330 回答
3
用于此的 linux API 是mlock()。
但是,如果您尝试在运行在 KVM 之上的 linux VM 中执行此操作,我认为用户模式代码没有办法使其工作。一个半虚拟化的 linux 内核可能可以访问一些它可以用于此类事情的 KVM API,但有点怀疑它会这样做。
于 2010-07-28T18:16:27.353 回答