如何在页表中创建进程的每个页面?

时间:2010-07-28 17:47:51

标签: c kvm

我在linux上使用gcc编译了一个静态程序,并在kvm下运行它。我在访客内存中检查了这个进程的每个页表条目,发现有些页面已经映射而有些页面没有。这是按需分页的功能吗?我的问题是,是否有一个解决方案使所有的pte存在并映射到页表中? 例如。我分叉一个新进程并加载一个新的elf二进制文件,如何使每个页面映射到这个新进程的页表中。 感谢

2 个答案:

答案 0 :(得分:4)

尝试以下系统调用:

#include <sys/mman.h>

int mlockall(int flags);

使用MCL_FUTURE设置flags参数,它会将所有当前和未来页面锁定到内存中。你可以找到关于它的更多信息here或只输入“man mlockall”,你会得到一堆信息。

答案 1 :(得分:3)

这个的Linux API是mlock()

但是,如果您尝试在运行在KVM之上的Linux VM中执行此操作,我认为用户模式代码无法实现此功能。半虚拟化的Linux内核可能可以访问它可以用于此类事情的某些KVM API,但有点怀疑它会这样做。