2010-07-28 28 views
2

我在linux上使用gcc編譯了一個靜態程序並運行在kvm下。我在訪客內存中檢查了這個進程的每個頁表項,發現有些頁面已經被映射,有些則不是。這是按需分頁的功能嗎?我的問題是,是否有解決方案使所有pte都呈現並映射到頁表中? 例如我分叉一個新進程並加載一個新的elf二進制文件,如何使每個頁面都映射到這個新進程的頁表中。 謝謝如何使頁面表中的每個頁面進程都存在?

+0

這與KVM有什麼關係? – torak 2010-07-28 18:08:48

回答

4

試試下面的系統調用:

#include <sys/mman.h> 

int mlockall(int flags); 

設置與MCL_FUTURE flags參數,它會鎖定所有當前和未來的頁到內存中。你可以找到更多關於它的信息here或者只是輸入「man mlockall」,你會得到一堆信息。

3

這個linux API是mlock()。但是,如果你想在一個運行在KVM之上的linux虛擬機上這樣做,我不認爲有一種方法讓用戶模式代碼來實現這個功能。一個半虛擬化的Linux內核可能有權訪問某些可用於此類事情的KVM API,但有些懷疑它會這樣做。

相關問題